如何使用 react-google-maps 通过单击在地图上添加标记?

Posted

技术标签:

【中文标题】如何使用 react-google-maps 通过单击在地图上添加标记?【英文标题】:How to add marker on map by Click using react-google-maps? 【发布时间】:2018-08-22 19:25:29 【问题描述】:

我正在努力寻找一个非常简单的示例,说明当用户使用基于组件的 React-google-maps 在地图上单击鼠标左键时如何向 Google 地图添加标记。需要帮助。

const Map = withScriptjs(withGoogleMap((props) =>
  <GoogleMap
    defaultZoom=8
    defaultCenter= lat: -34.397, lng: 150.644 
    onClick = props.onMapClick
   >
  props.isMarkerShown && <Marker position=props.markerPosition />

 </GoogleMap>
))

export default class MapContainer extends React.Component 
  constructor (props) 
    super(props)
    this.state = 

   
 

render () 
  return (
  <div style=height: '100%'>
    <Map
      googleMapURL="https://maps.googleapis.com/maps/api/js?key=AIzaSyC4R6AN7SmujjPUIGKdyao2Kqitzr1kiRg&v=3.exp&libraries=geometry,drawing,places"
      loadingElement=<div style= height: `100%`  />
      containerElement=<div style= height: `400px`  />
      mapElement=<div style= height: `100%`  />
      placeMarker=this.placeMarker
    />
  </div>
)
 
 

【问题讨论】:

【参考方案1】:

这是一个通用示例,演示如何在地图点击时显示标记:

const Map = compose(
    withStateHandlers(() => (
        isMarkerShown: false,
        markerPosition: null
      ), 
        onMapClick: ( isMarkerShown ) => (e) => (
            markerPosition: e.latLng,
            isMarkerShown:true
        )
      ),
    withScriptjs,
    withGoogleMap
)
    (props =>
        <GoogleMap
            defaultZoom=8
            defaultCenter= lat: -34.397, lng: 150.644 
            onClick=props.onMapClick
        >
            props.isMarkerShown && <Marker position=props.markerPosition />

        </GoogleMap>
    )

export default class MapContainer extends React.Component 
    constructor(props) 
        super(props)
    

    render() 
        return (
            <div style= height: '100%' >
                <Map
                    googleMapURL="https://maps.googleapis.com/maps/api/js?key=AIzaSyC4R6AN7SmujjPUIGKdyao2Kqitzr1kiRg&v=3.exp&libraries=geometry,drawing,places"
                    loadingElement=<div style= height: `100%`  />
                    containerElement=<div style= height: `400px`  />
                    mapElement=<div style= height: `100%`  />
                />
            </div>
        )
    

Live demo

【讨论】:

e.latLng 的 Marker 是一个函数。如果我想访问latLng.lat 本身,我该怎么做。例如,如果我想在屏幕上渲染 Lat 和 lng,我该怎么做? 并给自己一个答案(以及所有感兴趣的人)e.latLng.lat().toFixed(3) 成功【参考方案2】:

使用添加标记的编辑版本检查此代码

const InitialMap = withGoogleMap(props => 
  var index = this.marker.index || [];

  return(
    <GoogleMap
      ref=props.onMapLoad
      zoom=13
      center= lat: 21.178574, lng: 72.814149 
      onClick=props.onMapClick
    >
      props.markers.map(marker => (
        <Marker
          ...marker
          onRightClick=() => props.onMarkerRightClick(marker)
        />
      ))
    </GoogleMap>
  )
);

export default class MapContainer extends Component
  constructor(props)
    this.state = 
      markers:[
        position:
          lat: 255.0112183,
          lng:121.52067570000001,
        
      ]
    
  
  render()
    return(
      <div style=height:"100%">
        <InitialMap
          containerElement=
            <div style=height:"150px"/>
          
          mapElement=
            <div style=height:"150px" />
          
          markers=this.state.markers />
      </div>
    )
  
    

【讨论】:

嗨@Arthi,地图点击函数在哪里 @Van 你能检查一下这个参考吗***.com/questions/43937887/…

以上是关于如何使用 react-google-maps 通过单击在地图上添加标记?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 react-google-maps 显示多个标记

如何使用 react-google-maps 库创建折线

如何在 react-google-maps 中添加标记?

react-google-maps:如何使用 fitBounds、panBy、panTo、panToBounds 公共 API?

如何将自定义按钮添加到 react-google-maps?

如何使用 react-google-maps 在 React.JS 中获取多边形的坐标