gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:50:23 25 4
gpt4 key购买 nike

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

我不知道怎么查。

我怎样才能得到它们,我怎样才能把标记放在那个位置?

这是我的代码:

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@0.42.3 按照以下步骤进行操作和 react-native-maps@^0.13.1并使用 react-native@0.44.0react-native-maps@^0.15.2日期:

设置一个 mapRegion state 中的对象,最后longitude最后一个 latitudenull :

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

然后在您的 componentDidMount() 内函数观察当前位置的每次变化:
  componentDidMount() {
this.watchID = navigator.geolocation.watchPosition((position) => {
...
});
}

当有更改时,请在您的 this.state.mapRegion 中更新它们,传递实际坐标和 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);
}

并渲染 MapView通过您当前的 mapRegion对象, MapView.Marker里面只是为了给你展示当前的 latitudelongitude当他们改变时:
  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用于您的 map ,以便使用设备的整个宽度和高度正确渲染它。
const styles = StyleSheet.create({
map: {
...StyleSheet.absoluteFillObject,
}
});

所以对于您的 onPress()您可以执行类似于 onRegionChange() 的功能,那是获取实际坐标并设置它们:
  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 没有安装)

关于react-native - 使用 react-native-maps 在 ReactNative 中获取当前位置、纬度和经度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43176862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com