5

GitHub 上的 react-native-maps 存储库的示例中提供的示例显示了一个按钮,用于执行一个函数来设置考虑到标记列表的适当缩放:

  fitAllMarkers() {
    this.map.fitToCoordinates(MARKERS, {
      edgePadding: DEFAULT_PADDING,
      animated: true,
    });
}

https://github.com/airbnb/react-native-maps/blob/master/docs/mapview.md

给定已经初始化的标记数组,是否可以使用适当的拟合来初始化地图?

当试图在 上设置正确的配合时componentDidMount,我收到:

Error using new LatLntBounds(LatLngBounds, int): Map size can't be 0. Most likely, layout has not yet occured for the map view.

fitAllMarkers()现在调用我的函数肯定为时过早。是否有onLoad可以在地图初始化后立即触发的功能?

4

2 回答 2

9

fitToCoordinates 不使用标记,它使用纬度和经度对象数组(有一个特定的方法fitToSuppliedMarkers)。让它工作的一个重要的事情是给 internalMapView的引用,以获取对地图的引用。

class Map extends Component {

    constructor() {
        super()
        this.mapRef = null;
    }

    render() {
      return    <MapView style={{flex: 1}}
                    ref={(ref) => { this.mapRef = ref }}
                    onLayout = {() => this.mapRef.fitToCoordinates(this.props.myLatLongs, { edgePadding: { top: 10, right: 10, bottom: 10, left: 10 }, animated: false })}>
                    <Polyline coordinates={this.props.myLatLongs} strokeWidth={4} strokeColor="#2962FF" /> 
                </MapView>
    }
}

我将代码留给将来到达这个地方的人。这也是我在回购问题中的回答https://github.com/airbnb/react-native-maps/issues/1003的重复。

任何到达这里的人也请查看 mapview 文档中的更新:https ://github.com/airbnb/react-native-maps/blob/master/docs/mapview.md

于 2017-02-11T15:21:47.510 回答
4

当我使用 onLayout 道具时,将地图拟合到所需坐标需要很长时间。

我更喜欢在完全加载地图之前将地图拟合到坐标的 onMapReady 道具。

render() {
      return (
        <MapView style={{flex: 1}}
           ref={(ref) => { this.mapRef = ref }}
           onMapReady = {() => this.mapRef.fitToCoordinates(this.props.myLatLongs, { edgePadding: { top: 10, right: 10, bottom: 10, left: 10 }, animated: false })}>
           /** ... */
        </MapView>
    }
于 2020-03-05T18:42:55.017 回答