gpt4 book ai didi

reactjs - Google Maps React,添加带有 lat lng 的标记

转载 作者:行者123 更新时间:2023-12-02 03:19:15 25 4
gpt4 key购买 nike

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

我目前设法通过控制台记录特定的 latLng,但似乎无法创建新的。我对 React 还很陌生。

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

  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,
});
}

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

   <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>

最佳答案

My onMapClick works with finding the latitude and longitude. But I think I need to add the position to an array and then use that one to update the map.

这确实是 React 的方式,但不是通过 Google Maps API 实例化标记,而是考虑通过 state 保留数据(标记位置),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>
);
}
}

说明:

  • locations 状态用于在单击 map 后跟踪所有位置

  • locations 状态传递给 Marker 组件以渲染标记

下一步可能是为标记列表引入一个单独的组件,Thinking in React讲述以下组件:

One such technique is the single responsibility principle, that is, a component should ideally only do one thing. If it ends up growing, it should be decomposed into smaller subcomponents.

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>
);
};

Here is a demo它演示了如何通过 google-maps-react 库在 map 点击上添加制造商

关于reactjs - Google Maps React,添加带有 lat lng 的标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55263520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com