如何更改反应本机地图中的标记位置?

时间:2019-10-29 05:52:41

标签: javascript reactjs react-native react-native-android react-native-maps

您好,我想在地图上添加可拖动的标记“根据地图视图更改标记的位置” 所以我使用react-native-maps

当用户在下摆后滑动地图并更改标记的位置时,在我的代码中,我将其记录在控制台中,但日志中看不到任何东西,或者不是通过这种方式制作的! 如何使其在地图上可拖动?

这是我要实现的目标 map

这是我的代码

import React, {Component} from 'react';
import {StyleSheet, View} from 'react-native';
import MapView, {Marker} from 'react-native-maps';

// create a component
class App extends Component {
  state = {
    latlng: {
      latitude: 35.1790507,
      longitude: -6.1389008,
    },
  };
  render() {
    return (
      <View style={styles.container}>
        <MapView
          style={styles.map}
          region={{
            latitude: 35.1790507,
            longitude: -6.1389008,
            latitudeDelta: 0.015,
            longitudeDelta: 0.0121,
          }}>
          <Marker
            draggable
            coordinate={this.state.latlng}
            title="Home"
            onDragEnd={e => {
              console.log('dragEnd', e.nativeEvent.coordinate);
            }}
          />
        </MapView>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    ...StyleSheet.absoluteFillObject,
    // height: 400,
    // width: 400,
    justifyContent: 'flex-end',
    alignItems: 'center',
  },
  map: {
    ...StyleSheet.absoluteFillObject,
  },
});

//make this component available to the app
export default App;

1 个答案:

答案 0 :(得分:0)

您可以使用onRegionChangeComplete的{​​{1}}属性来实现此目的。

首先,如下更改状态对象:

MapView

相应地更改您的state = { markerData: { latitude: 35.1790507, longitude: -6.1389008, }, mapData: { latitude: 35.1790507, longitude: -6.1389008, latitudeDelta: 0.015, longitudeDelta: 0.0121, }, };

MapView

然后定义一个处理函数,当用户将鼠标悬停在地图上时,该函数将更改状态值:

<MapView
     style={{flex: 1}}
     region={this.state.mapData}
     onRegionChangeComplete={this.handleRegionChange}>
     <Marker
        coordinate={this.state.markerData}
        title="Home"
        onDragEnd={e => {
              console.log('dragEnd', e.nativeEvent.coordinate);
            }}
      />
</MapView>

希望这会有所帮助。