Javascript 反应本地地图:什么';实现可拖动标记的最佳方法是什么?
我有一个地图,我需要添加一个可拖动的标记,以允许用户选择一个点 如果我选择传统的方法Javascript 反应本地地图:什么';实现可拖动标记的最佳方法是什么?,javascript,google-maps,react-native-maps,Javascript,Google Maps,React Native Maps,我有一个地图,我需要添加一个可拖动的标记,以允许用户选择一个点 如果我选择传统的方法 <MapView initialRegion={{ .... }}> <Marker coordinate={this.state.coordinates} draggable /> </MapView 当此函数返回位置时,标记会移动到正确的点,但地图不会滚动到放置标记的区域,因为initialRegion在安装后不会更改区域 如果我使用region而不是initialR
<MapView
initialRegion={{
....
}}>
<Marker coordinate={this.state.coordinates} draggable />
</MapView
当此函数返回位置时,标记会移动到正确的点,但地图不会滚动到放置标记的区域,因为initialRegion
在安装后不会更改区域
如果我使用region
而不是initialRegion
,则地图根本不会滚动,因为onRegionChange
回调正在持续更改状态,并且可能与region
属性冲突
解决所有问题的最佳方法是什么?最好的方法是通过绝对定位将标记显示在屏幕中央
<View style={styles.markerFixed}>
<Icon
style={{
color: '#B11C01',
}}
size={30}
name={'map-marker-alt'}
solid
/>
</View>
markerFixed: {
left: 0,
right: 0,
marginLeft: 0,
marginTop: 0,
position: 'absolute',
top: '40%',
alignItems: 'center',
},
markerFixed:{
左:0,,
右:0,,
marginLeft:0,
玛金托普:0,
位置:'绝对',
前几名:“40%”,
对齐项目:“居中”,
},
现在,您可以将地图拖动到任何位置。这将显示标记正在移动的效果。但地图实际正在移动。现在,使用onRegionChangeComplete函数将更新的latlang转换为地址。您可以在标记上方显示转换后的地址,如快照中所示
import Geocoder from 'react-native-geocoding';
<MapView
style={styles.mapStyle}
provider={PROVIDER_GOOGLE}
region={{
latitude: lat,
longitude: long,
latitudeDelta: 0.0922 / 10,
longitudeDelta: 0.0421 / 10,
}}
onRegionChangeComplete={this.onRegionChange}
/>
convertToAddress() {
let {lat, long} = this.state;
if (this.state.firstIndication === 0) {
this.setState({firstIndication: 1});
return;
}
Geocoder.from(lat, long)
.then(json => {
var addressComponent = json.results[0].address_components[0];
this.setState({name: addressComponent.long_name});
})
.catch(error => console.warn(error));
}[![enter image description here][1]][1]
从“react native geocoding”导入地理编码器;
convertToAddress(){
设{lat,long}=this.state;
if(this.state.firstIndication==0){
this.setState({firstIndication:1});
返回;
}
地理编码器,从(纬度,长)
。然后(json=>{
var addressComponent=json.results[0]。address_components[0];
this.setState({name:addressComponent.long_name});
})
.catch(错误=>console.warn(错误));
}[![在此处输入图像描述][1][1]
最好的解决方法是使用
它为您提供了一个可拖动的地图,您可以轻松地通过标记选择任何位置
你可以参考
<View style={styles.markerFixed}>
<Icon
style={{
color: '#B11C01',
}}
size={30}
name={'map-marker-alt'}
solid
/>
</View>
markerFixed: {
left: 0,
right: 0,
marginLeft: 0,
marginTop: 0,
position: 'absolute',
top: '40%',
alignItems: 'center',
},
import Geocoder from 'react-native-geocoding';
<MapView
style={styles.mapStyle}
provider={PROVIDER_GOOGLE}
region={{
latitude: lat,
longitude: long,
latitudeDelta: 0.0922 / 10,
longitudeDelta: 0.0421 / 10,
}}
onRegionChangeComplete={this.onRegionChange}
/>
convertToAddress() {
let {lat, long} = this.state;
if (this.state.firstIndication === 0) {
this.setState({firstIndication: 1});
return;
}
Geocoder.from(lat, long)
.then(json => {
var addressComponent = json.results[0].address_components[0];
this.setState({name: addressComponent.long_name});
})
.catch(error => console.warn(error));
}[![enter image description here][1]][1]