在调用fitBounds之后更新视口状态

时间:2019-01-16 21:17:34

标签: react-map-gl

我已经使用react-map-gl创建了一个地图。每当我在地图上缩放或平移时,视口都会更新,因为onViewStateChange道具会调用_updateViewPort函数来设置新状态。我遇到的问题是,当我使用mapbox函数fitBounds放大某个地方时,onViewStateChange似乎没有触发,因此,视口状态永远不会改变。结果,下次我平移或缩放地图时,它将带我回到调用fitBounds方法之前的位置。有没有人经历过这种情况,并有解决方案?

1 个答案:

答案 0 :(得分:0)

最终工作的是使用WebMercatorViewport为要缩放的新范围计算新的纬度,经度和缩放,然后将其设置为新的视口状态。我使用了react-map-gl提供的FlyToInterpolator方法来飞往该位置。

const {longitude, latitude, zoom } = new WebMercatorViewport(this.state.viewport)
.fitBounds([[extent[0], extent[1]], [extent[2], extent[3]]], {padding: {top: 82, bottom: 30, left: leftPadding, right: 30}});
const viewport = {
  ...this.state.viewport,
  longitude,
  latitude,
  zoom,
  transitionDuration: 2000,
  transitionInterpolator: new FlyToInterpolator()
}
this.setState({viewport});