11

I am using the following code with no success:

//Inside of NativeBase Container

        <MapView.Animated
           ref="map"
           style = {styles.map}
           showsUserLocation = {true}
           zoomEnabled = {true}
           showsMyLocationButton = {true}
           showsCompass = {true}
           showScale = {true}
           showsIndoors = {true}
           mapType = {this.state.mapTypes[this.state.mapTypeCode]}
        />

//Inside of componentDidMount of the class

navigator.geolocation.getCurrentPosition(
  (position) => {
    var initialPosition = JSON.stringify(position.coords);
    this.setState({position: initialPosition});

    let tempCoords = {
      latitude: Number(position.coords.latitude),
      longitude: Number(position.coords.longitude)
    }

    this.refs.map.animateToCoordinate(tempCoords, 1);

  }, function (error) { alert(error) },

);

But an error occurs saying there is no such function animateToCoordinate.

4

5 回答 5

9

我遇到了一些 this.refs 未定义的问题,除非我将构造函数中对 this 的引用绑定到我正在使用 this.refs 的函数。在你的情况下,试试这个:

constructor(props) {
    super(props);
    this._getCoords = this._getCoords.bind(this);
    this.state = {
        position: null
    };
}

componentDidMount() {
    this._getCoords();
}

_getCoords = () => {
    navigator.geolocation.getCurrentPosition(
        (position) => {
            var initialPosition = JSON.stringify(position.coords);
            this.setState({position: initialPosition});
            let tempCoords = {
                latitude: Number(position.coords.latitude),
                longitude: Number(position.coords.longitude)
            }
            this._map.animateToCoordinate(tempCoords, 1);
          }, function (error) { alert(error) },
     );
};

render() {
    return (
         <MapView.Animated
             ref={component => this._map = component}
          />
    );

}

虽然仍然可以使用字符串引用,但我相信这是现在的遗留问题,所以我也将 MapView 引用更新为更新的方式。请参阅:参考示例

于 2017-02-03T21:45:38.323 回答
8

不幸的是,现在 animateToCoordinate 已被弃用,如果你想这样做,你应该使用animateCameraanimateToRegion

render() {
  return ( 
    <MapView style = {styles.maps}
      ref = {(mapView) => { _mapView = mapView; }}
      initialRegion = {{
        latitude: 6.8523,
        longitude: 79.8895,
        latitudeDelta: 0.0922,
        longitudeDelta: 0.0421,
      }}
    />
    <TouchableOpacity 
       onPress = {() => _mapView.animateToRegion({
        latitude: LATITUDE,
        longitude: LONGITUDE
      }, 1000)}>
      <Text>Tap</Text>
    </TouchableOpacity>
  )

}

于 2019-01-30T11:48:25.840 回答
8

在我的情况下,我使用了 animateToCoordinate()如下,它对我有用:

  var _mapView: MapView;

  render() {
      return ( 
        <MapView style = {styles.maps}
          ref = {(mapView) => { _mapView = mapView; }}
          initialRegion = {{
            latitude: 6.8523,
            longitude: 79.8895,
            latitudeDelta: 0.0922,
            longitudeDelta: 0.0421,
          }}
        />
        <TouchableOpacity 
           onPress = {() => _mapView.animateToCoordinate({
            latitude: LATITUDE,
            longitude: LONGITUDE
          }, 1000)}>
          <Text>Tap</Text>
        </TouchableOpacity>
      )
  }
于 2017-02-21T12:37:14.613 回答
0

这是一个解决方案。

const animateToCoordinat = (lat, long) => {
  mapView?.animateCamera({
    center: {
      latitude: lat,
      longitude: long,
    },
    duration: {
      1000,
    }
  });
}

https://github.com/react-native-maps/react-native-maps/blob/master/docs/mapview.md#:~:text=current%20camera%20configuration.-,animateCamera,-camera%3A% 20相机%2C%20%7B%20duration

也可以使用setCamera方法。

于 2021-06-10T03:03:47.973 回答
0

我的案例使用了动画相机功能,我使用了 <MapView.Animated/>,这个组件生成了一个很酷的动画......

<MapView.Animated
    provider = { Platform.OS === 'android' ? PROVIDER_GOOGLE : PROVIDER_DEFAULT } // remove if not using Google Maps
    style = { styles_l.map }       
    ref = {(map) => (this.map = map)}
    initialRegion = { this.state.region }
    followsUserLocation = { true}
    showsCompass = { true}
    showsUserLocation = { true}
    onRegionChange = {() => this.handleChangeRegion }
    onRegionChangeComplete = {() => this.handleChangeRegion.bind(this) }>
</MapView.Animated >

该组件将调用此函数:

handleChangeRegion = (region) => {
    this.map.animateCamera({ center: region });
}

我希望这也可以帮助你,它真的是一个很好的组件!并且非常有用,祝贺相关人员。

于 2021-08-31T15:14:27.570 回答