使用react-native-maps在ReactNative中获取当前位置,纬度和经度

问题描述 投票:16回答:3

我正在开发一个地图位置。当我在某个特定的地方点击时,我得到纬度和经度,但不是当前的位置,纬度和经度。

我不知道如何找出答案。

我怎样才能得到它们?如何将标记放在那个位置?

这是我的代码:

class Maps extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      region: {
        latitude:       LATITUDE,
        longitude:      LONGITUDE,
        latitudeDelta:  LATITUDE_DELTA,
        longitudeDelta: LONGITUDE_DELTA,
      },
      marker: {
        latlng:{
          latitude:       null,
          longitude:      null,
          latitudeDelta:  LATITUDE_DELTA,
          longitudeDelta: LONGITUDE_DELTA
        }
      }
    }
  }

  componentDidMount() {
    navigator.geolocation.getCurrentPosition (
      (position) => { alert("value:" + position) },
      (error)    => { console.log(error) },
      {
        enableHighAccuracy: true,
        timeout:            20000,
        maximumAge:         10000
      }
    )
  }

  onMapPress(e) {
    alert("coordinates:" + JSON.stringify(e.nativeEvent.coordinate))
      this.setState({
        marker: [{ coordinate: e.nativeEvent.coordinate }]
      })
    }

  render() {
    return (
      <View style={styles.container}>
        <View style={{flexGrow:1}}>
          <MapView
            ref="map"
            provider={this.props.provider}
            style={styles.map}
            onPress={this.onMapPress.bind(this)}
            provider = {PROVIDER_DEFAULT}
            mapType="standard"
            zoomEnabled={true}
            pitchEnabled={true}
            showsUserLocation={true}
            followsUserLocation={true}
            showsCompass={true}
            showsBuildings={true}
            showsTraffic={true}
            showsIndoors={true}>
          </MapView>
        </View>
      </View>
    )
  }
}
react-native react-native-android react-native-maps
3个回答
33
投票

我按照这些步骤使用[email protected]react-native-maps@^0.13.1并在日期使用[email protected]react-native-maps@^0.15.2做到了:

mapRegion,最后一个state和最后一个longitude中设置latitude对象为null

state = {
  mapRegion: null,
  lastLat: null,
  lastLong: null,
}

然后在你的componentDidMount()函数中观察当前位置的每个变化:

  componentDidMount() {
    this.watchID = navigator.geolocation.watchPosition((position) => {
      ...
    });
  }

当有变化更新它们在你的this.state.mapRegion时,传递实际的coords和delta值(我的可能与你的不同,所以调整它们):

  componentDidMount() {
    this.watchID = navigator.geolocation.watchPosition((position) => {
      // Create the object to update this.state.mapRegion through the onRegionChange function
      let region = {
        latitude:       position.coords.latitude,
        longitude:      position.coords.longitude,
        latitudeDelta:  0.00922*1.5,
        longitudeDelta: 0.00421*1.5
      }
      this.onRegionChange(region, region.latitude, region.longitude);
    }, (error)=>console.log(error));
  }

然后你需要onRegionChange()函数,用于在componentDidMount()函数中为你的元素“设置”新值:

  onRegionChange(region, lastLat, lastLong) {
    this.setState({
      mapRegion: region,
      // If there are no new values set the current ones
      lastLat: lastLat || this.state.lastLat,
      lastLong: lastLong || this.state.lastLong
    });
  }

卸载componentWillUnmount()上的地理位置:

  componentWillUnmount() {
    navigator.geolocation.clearWatch(this.watchID);
  }

并渲染qazxsw poi通过你当前的qazxsw poi对象,它内部的qazxsw poi只是为了向你展示当前的MapViewmapRegion

MapView.Marker

为地图添加latitude,以便使用设备的整个宽度和高度正确渲染它。

longitude

因此,对于你的 render() { return ( <View style={{flex: 1}}> <MapView style={styles.map} region={this.state.mapRegion} showsUserLocation={true} followUserLocation={true} onRegionChange={this.onRegionChange.bind(this)}> <MapView.Marker coordinate={{ latitude: (this.state.lastLat + 0.00050) || -36.82339, longitude: (this.state.lastLong + 0.00050) || -73.03569, }}> <View> <Text style={{color: '#000'}}> { this.state.lastLong } / { this.state.lastLat } </Text> </View> </MapView.Marker> </MapView> </View> ); } 函数,你可以做类似于StyleSheet.absoluteFillObject的东西,那就是得到实际的坐标并设置它们:

const styles = StyleSheet.create({
  map: {
    ...StyleSheet.absoluteFillObject,
  }
});

检查onPress()上的完整代码(虽然没有安装onRegionChange()


4
投票

我建议你阅读关于地理定位的官方文档: onMapPress(e) { let region = { latitude: e.nativeEvent.coordinate.latitude, longitude: e.nativeEvent.coordinate.longitude, latitudeDelta: 0.00922*1.5, longitudeDelta: 0.00421*1.5 } this.onRegionChange(region, region.latitude, region.longitude); }

然后,使用当前位置,您可以将该信息放入您的状态:

expo.io

您可以在渲染方法中使用标记构建最终视图:

react-native-maps

0
投票

使用以下代码查找位置权限:

https://facebook.github.io/react-native/docs/geolocation.html

使用以下代码获取当前位置纬度和经度:

navigator.geolocation.getCurrentPosition((position) => {
    this.setState({position: {longitude: position.longitude, latitude: position.latitude}});
}, (error) => {
    alert(JSON.stringify(error))
}, {
    enableHighAccuracy: true,
    timeout: 20000,
    maximumAge: 1000
});
© www.soinside.com 2019 - 2024. All rights reserved.