当前位置: 首页 > 知识库问答 >
问题:

谷歌地图做出反应,用lat lng添加标记

孟树
2023-03-14

我使用“google-maps-react”,并尝试通过点击向我的地图添加新的标记。

目前,我可以通过控制台记录特定的latLng,但似乎无法创建新的LATLING。我还没反应过来。

我的onMapClick用于查找纬度和经度。但我认为我需要将位置添加到数组中,然后使用该位置更新地图。可能是错的

  onMapClick = (map,maps,e) => { 
    const { latLng } = e; 
    const latitude = e.latLng.lat(); 
    const longitude = e.latLng.lng(); 
    console.log(latitude + ", " + longitude);  

    var marker = new window.google.maps.Marker({
      position: e.latLng,
      setMap: map,
    });
  }

Im目前的解决方案是,我只是在我的 render() 中硬编码了一些标记,数组的位置在 Marker 中

   <Marker
      onClick={this.onMarkerClick}
      name={storedLocations[0]}
      position={{lat:listLatitude[0], lan:listLongitude[0]}}
    />   

我的信息窗口是:

<InfoWindow
        marker={this.state.activeMarker}
        visible={this.state.showingInfoWindow}
       onClose={this.onClose}
     >
      <div>
        <h4>{this.state.selectedPlace.name}</h4>
      </div>
    </InfoWindow>
  </Map>

共有1个答案

单于智
2023-03-14

我的 onMapClick 可以查找纬度和经度。但我认为我需要将位置添加到数组中,然后使用该位置来更新地图。

这确实是React的方式,但与其通过Google Maps API实例化标记,不如考虑通过<code>state</code>保存数据(标记位置),React将执行以下操作:

class MapContainer extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      locations: []
    };
    this.handleMapClick = this.handleMapClick.bind(this);
  }

  handleMapClick = (ref, map, ev) => {
    const location = ev.latLng;
    this.setState(prevState => ({
      locations: [...prevState.locations, location]
    }));
    map.panTo(location);
  };

  render() {
    return (
      <div className="map-container">
        <Map
          google={this.props.google}
          className={"map"}
          zoom={this.props.zoom}
          initialCenter={this.props.center}
          onClick={this.handleMapClick}
        >
          {this.state.locations.map((location, i) => {
            return (
              <Marker
                key={i}
                position={{ lat: location.lat(), lng: location.lng() }}
              />
            );
          })}
        </Map>
      </div>
    );
  }
}

解释:

>

  • 位置状态用于在单击地图后跟踪所有位置

    位置状态传递给标记组件以渲染标记

    下一步可能是为标记列表引入一个单独的组件,在React中思考以下组件:

    一种这样的技术是单一责任原则,也就是说,一个组件在理想情况下应该只做一件事。如果它最终增长,它应该被分解成更小的子组件。

    const MarkersList = props => {
      const { locations, ...markerProps } = props;
      return (
        <span>
          {locations.map((location, i) => {
            return (
              <Marker
                key={i}
                {...markerProps}
                position={{ lat: location.lat(), lng: location.lng() }}
              />
            );
          })}
        </span>
      );
    };
    

    这是一个演示程序,演示了如何通过< code>google-maps-react库在地图点击上添加一个标记

  •  类似资料:
    • 我想将事件侦听器添加到所有标记中,我正在使用GoogleMapsforRailsGem。这是我的密码 我试图将事件侦听器添加到所有标记中,但它没有发出任何警报。如何在google maps for rails中添加事件侦听器 我有一个数据数组,每个数据包含id,lat,lng

    • (1)https://stackoverflow.com/questions/34247347/initialize-google-map-to-zoom-to-bounds(2)bounds google maps (3)在google maps android api v2中设置最大缩放级别(4)android map v2缩放显示所有标记 (5)在android中调整google map(a

    • 这对于短距离非常有效,但是对于长的折线段,latlng返回的是折线旅行的地方之外,因为它计算的是沿着地球表面的最短距离,而不是在平面地图上的最短距离。 在这方面的任何帮助都将不胜感激,希望我只是错过了一些明显的东西。

    • 我有一个函数,以一个地名作为输入,并在谷歌地图上那个地方的lat和lng位置下降一个pin。它还使用lat和lng位置设置边界,将pin设置为Viewport。一切都很好,但旧的标记没有得到清除,而添加一个新的标记。我已经清除了标记数组,但它不起作用。这是我的代码

    • 我知道周围也有类似的问题,但我无法找到一个可靠的答案,这是我的问题:有没有什么方法可以在没有谷歌地图引用的情况下将标记存储在ArrayList(或任何其他存储)中,然后简单地将它们添加到我的地图中? 背景:我有一个应用程序,目前有大约3500个标记。每个标记还有一个与之相关联的数据(布尔数组存储每个标记的数据,用于根据用户交互使它们可见/不可见)。目前,我使用扩展AsyncTask的类来获取这些标

    • 我正在app engine上构建一个web应用程序。在我的例子中,这是建立在django Nonl的基础上的,但关键是它使用的是谷歌的数据存储。 我喜欢这样一个事实,即我不需要处理复制、分片、备份等,但有一件事总是妨碍我,那就是最终的一致性,这似乎妨碍了实现一个通用的Web应用程序模式,我称之为“添加 假设我有一个项目管理应用程序。项目是它的中心模型。现在有一个网页页面,我可以在其中看到所有项目的