【问题标题】:Single custom marker google maps API in react反应中的单个自定义标记谷歌地图 API
【发布时间】:2020-09-21 08:40:10
【问题描述】:

我一直在使用 Google Maps & Places API,并成功地使用了 react hooks 以允许用户放置标记、onClick 信息窗口、自动完成地点搜索和地理定位。

但是,我需要的是 onClick 它只会添加一个标记,每次用户单击新坐标时都会更改位置。不要像现在那样在每次点击时添加多个标记。

代码如下:

const [markers, setMarkers] = useState([]);
const [selected, setSelected] = useState(null);


  const onMapClick = useCallback((event) => {
    setMarkers((current) => [
      ...current,
      {
        lat: event.latLng.lat(),
        lng: event.latLng.lng(),
        time: new Date(),
      },
    ]);
  }, []);

...

return (

 <GoogleMap
        mapContainerStyle={mapContainerStyle}
        zoom={13}
        center={center}
        onClick={onMapClick}
        onLoad={onMapLoad}
      >
        {markers.map((marker) => (
          <Marker
            key={marker.time.toISOString()}
            position={{ lat: marker.lat, lng: marker.lng }}
            icon={{
              url: "/crane-pin.svg",
              scaledSize: new window.google.maps.Size(40, 40),
              origin: new window.google.maps.Point(0, 0),
              anchor: new window.google.maps.Point(15, 15),
            }}
            onClick={() => {
              setSelected(marker);
            }}
          />
        ))}

...

  </GoogleMap>

任何帮助将不胜感激!

【问题讨论】:

    标签: javascript reactjs google-maps onclick


    【解决方案1】:

    要实现您的用例,您需要访问marker object 并使用setPosition method 将标记的位置更改为地图中单击的坐标。

    您是否使用任何谷歌地图反应库?这是一个sample reactjs code,它在不使用任何反应库的情况下实现了这一点。代码如下:sn-p:

    import React, { Component } from "react";
    import { render } from "react-dom";
    import Map from "./Map";
    import "./style.css";
    
    class App extends Component {
      render() {
        return (
          <div id="container">
            <Map
              id="myMap"
              options={{
                center: { lat: 37.769, lng: -122.446 },
                zoom: 12,
              }}
              onMapLoad={(map) => {
                let marker = new google.maps.Marker({
                  position: { lat: 37.769, lng: -122.446 },
                  map: map,
                });
    
                //Changing Marker position for clicked coordinate
                map.addListener("click", (event) => {
                  marker.setPosition(event.latLng);
                });
              }}
            />
          </div>
        );
      }
    }
    
    export default App;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 2013-08-21
      • 2013-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多