You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在google-maps-react中通过用户点击添加带经纬度的标记?

解决google-maps-react点击地图添加标记时无法获取经纬度的问题

我看你遇到的问题是点击地图时,虽然能把标记项添加到state的markers数组里,但event.latLng没法正确获取经纬度,导致标记无法正常渲染出来对吧?这是因为event.latLng是Google Maps提供的LatLng实例对象,不是普通的JS对象,直接存到state里的话,React没办法正确解析它的经纬度值,而且你也没在Map组件里循环渲染这些标记。

给你两个关键的修改点:

1. 把LatLng对象转换成普通的经纬度对象

在mapClicked方法里,不要直接存储event.latLng,而是调用它的lat()和lng()方法拿到具体的数值,转换成普通的JS对象:

mapClicked = (event) => {
  const { markers } = this.state;
  // 提取经纬度数值,转换成普通JS对象
  const newMarker = {
    position: {
      lat: event.latLng.lat(),
      lng: event.latLng.lng()
    },
    key: Date.now(),
    defaultAnimation: 2,
  };
  this.setState({
    markers: [newMarker, ...markers]
  });
}

2. 在Map组件中循环渲染所有标记

现在你只渲染了初始定位的那个Marker,需要遍历this.state.markers数组,把每个用户点击添加的标记都渲染出来:

render() {
  if (!this.props.loaded) {
    return <div>Loading...</div>
  }
  const style = {
    width: '100%',
    height: '100vh'
  }
  return (
    <Map
      google={this.props.google}
      zoom={11}
      style={style}
      initialCenter={{ lat: this.state.lat, lng: this.state.lng }}
      center={{ lat: this.state.lat, lng: this.state.lng }}
      onClick={this.mapClicked}
    >
      {/* 初始定位标记 */}
      <Marker
        title={'Geolocation'}
        position={{ lat: this.state.lat, lng: this.state.lng }}
      />
      {/* 循环渲染所有点击添加的标记 */}
      {this.state.markers.map(marker => (
        <Marker
          key={marker.key}
          position={marker.position}
          defaultAnimation={marker.defaultAnimation}
        />
      ))}
    </Map>
  );
}

这样修改之后,点击地图时就能正确获取经纬度并存入state,同时所有标记都会被渲染到地图上了。

内容的提问来源于stack exchange,提问作者KT-mongo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:29:18