我有一个坐标列表,我要导入我的谷歌地图,然后从中创建多边形,我遇到的问题是多边形相互重叠并且每个多边形的轮廓清晰可见,我需要找到一种方法将它们合并为 1 个多边形,移除所有相交线,并在外部仅留下 1 条边界线。
我的地图 - https://codesandbox.io/s/4ywq78407
我可以看到这可能通过使用这里提到的 geoJSON 数据来实现:
GoogleMaps API V3 构建包含多个邮政编码的多边形
但是我无法找到与 react-google-maps 一起使用的任何示例
看起来也可以使用此处提到的 JSTS 和 wicket:
GoogleMaps API V3 构建包含多个邮政编码的多边形
同样,我不确定如何将这些集成到 react-google-maps
如何使用 geoJSON 数据或 JSTS/wicket 与 react-google-maps 合并我的多边形?
你好.js
import React from 'react';
import MyGoogleMap from './GoogleMap'
import coords from './const'
export default class Hello extends React.Component {
render() {
return(
<MyGoogleMap coords={coords} lat={50.0883800089} lng={14.3196645721} zoom={8} />
)
}
}
谷歌地图.js
import React, { Component } from "react";
import withScriptjs from "react-google-maps/lib/async/withScriptjs";
import { withGoogleMap, GoogleMap, Polygon } from "react-google-maps";
export default class GoogleMaps extends Component {
constructor() {
super();
this.state = {};
this.handleMapLoad = this.handleMapLoad.bind(this);
}
handleMapLoad(map) {
this._mapComponent = map;
}
render() {
const MyGoogleMap = withScriptjs(
withGoogleMap(props => (
<GoogleMap
ref={props.onMapLoad}
defaultZoom={props.zoom}
defaultCenter={{ lat: props.lat, lng: props.lng }}
onClick={props.onMapClick}
>
{props.coords.map(coord => (
<Polygon
path={coord.area}
options={{
fillColor: "red",
fillOpacity: 0.4,
strokeColor: "red",
strokeOpacity: 1,
strokeWeight: 1
}}
/>
))}
</GoogleMap>
))
);
// Use this by settings props in e.g <MyGoogleMap coords={coords} lat={50.0883800089} lng={14.3196645721} zoom={8}/>
return (
<div style={{ height: '640px', width: '100%' }}>
<div style={{ height: "100%" }}>
<MyGoogleMap
googleMapURL={`https://maps.googleapis.com/maps/api/js?key=AIzaSyBOGV1MxJRcgXxNULDXk1eUx_QQ6nftEP4`}
loadingElement={<div style={{ height: "100%" }} />}
containerElement={<div style={{ height: "100%" }} />}
mapElement={<div style={{ height: "100%" }} />}
onMapLoad={this.handleMapLoad}
coords={this.props.coords}
lat={this.props.lat}
lng={this.props.lng}
zoom={this.props.zoom}
/>
</div>
</div>
);
}
}