我正在尝试开发类似的东西,但是使用 ReactJS,我正在寻找相关的东西,但只有使用 vanilla 的实现。我检查了这个 [使用 infowindows 添加多个标记(Google Maps API) [尝试将多个 InfoWindows 绑定到 Google Map 上的多个标记并失败
这是我开发的一些代码,但没有成功,它有点复杂,因为它是 MarkerCluster、Markers、InfoWindow 和 Polygons 的组合。
render() {
if(this.state.info === false){
return(
<Loader/>
)
}
else{
var markCluster = null
var pools = null
if(this.state.marks){
var markerStuff = []
this.state.marks.map(function(v,i){
var mark =
<Marker key={i}
name={v.subtitle}
icon={v.icon}
position={{lat: parseFloat(v.latitud), lng: parseFloat(v.longitud)}}
onClick={() => this.infoPoint(v)}
>
{this.state.isOpen && <InfoWindow onCloseClick={() => this.closeMarker()}>
<div className="scroll">
<div className="row">
<label>Nombre:</label> <span>{this.state.infoPoint.nombre}</span>
</div>
<br/>
<div className="row">
<label>Expediente:</label> <span>{this.state.infoPoint.expediente}</span>
</div>
</div>
</InfoWindow>}
</Marker>
markerStuff.push(mark)
},this)
markCluster = <MarkerClusterer
averageCenter
gridSize={30}
>
{markerStuff}
</MarkerClusterer>
}
if(this.state.pools){
var polsOptions = {
fillColor:'#41a0f4',
strokeWeight: 1,
fillOpacity:0.4
}
pools = <Polygon
paths={this.state.pools}
options={polsOptions}
/>
}
const GettingStartedGoogleMap = withGoogleMap(props => (
<GoogleMap
defaultZoom={3}
center={{lat: 19.435031,lng: -99.167357}}
ref={props.onMapLoad}
>
{markCluster}
{pools}
</GoogleMap>
));
return (
<div className="googleMap">
<GettingStartedGoogleMap
containerElement={
<div style={{ height: `100%` }} />
}
mapElement={
<div style={{ height: `100%` }} />
}
center={{ lat: -25.363882, lng: 131.044922 }}
onMapLoad={this.onMapLoad}
/>
<MapModule queryIt={this.queryRegs}/>
</div>
);
}
}
}
当我调用 onClick 函数时,我会更改状态并设置 InfoWindow 的信息,但碰巧所有标记都显示相同的信息。
infoPoint(e){
this.setState({isOpen: true,
infoPoint: e
})
}
closeMarker(){
this.setState({isOpen: false
})
}