我仍然是使用谷歌地图和 ReactJS 的初学者。我google-maps-react用来绘制我的地图。
我有一个在地图上呈现的属性。该属性是一组多个多边形,所有这些多边形一起形成属性(农场)。
当我点击一个特定的多边形时,我会得到被点击的那个多边形的所有坐标:
我想知道,是否可以显示被选定多边形包围的 10 公里半径?
根据我的研究,可以通过单个点显示半径,即单个纬度和单个经度。在我的例子中,一个多边形可以有数百个纬度和数百个经度。如上图所示。
您能告诉我如何根据选择的多边形配置 10 公里半径吗?
我把我的代码放进了代码沙箱
在这里我绘制我的地图:
import React, { useState, useEffect } from "react";
import { Map, Polygon, GoogleApiWrapper } from "google-maps-react";
import data from "./api/coordinates.json";
const Colors = {
SELECTED: "blue",
DEFAULT: "#02482b",
OVER: "red"
};
const Maps = () => {
const [poligons, setPoligons] = useState([]);
const [selected, setSelected] = useState([]);
const [polygonOptions, setPolygonOptions] = useState({
strokeColor: Colors.DEFAULT,
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: Colors.DEFAULT,
fillOpacity: 0.35,
polygonKey: 1
});
const [areaPosition, setAreaPosition] = useState({
lat: -22.735840991240327,
lng: -47.574046945850164
});
const reduceMap = () => {
const _poligons = data.reduce((acc, [coords]) => {
const paths = coords.map(([lng, lat]) => ({ lng, lat }));
acc.push(paths);
return acc;
}, []);
setPoligons(_poligons);
};
useEffect(() => {
reduceMap();
}, []);
const selectedArea = (polygon) => {
for (let i = 0; i < selected.length; i++) {
const _polygon = selected[i];
_polygon.setOptions({ fillColor: Colors.DEFAULT });
}
setSelected([polygon]);
polygon.setOptions({ fillColor: Colors.SELECTED });
};
const handleClick = (props, polygon, event) => {
setAreaPosition({ lat: event.latLng.lat(), lng: event.latLng.lng() });
const paths = polygon.getPaths().getArray();
const coordinates = paths.map((path) => {
const points = path.getArray();
return points.map((point) => [point.lng(), point.lat()]);
});
selectedArea(polygon);
console.log("polygon selected: ", coordinates);
};
const handleMouseOver = (props, polygon) => {
polygon.setOptions({
fillColor:
polygon.fillColor !== Colors.SELECTED ? Colors.OVER : Colors.SELECTED
});
};
const handleMouseOut = (props, polygon) => {
polygon.setOptions({
fillColor:
polygon.fillColor !== Colors.SELECTED ? Colors.DEFAULT : Colors.SELECTED
});
};
return (
<>
<Map
google={google}
style={{ width: "90%", height: "70%", marginTop: "10px" }}
zoom={13}
initialCenter={{
lat: `${areaPosition.lat}`,
lng: `${areaPosition.lng}`
}}
clickableIcons={false}
className={"map"}
center={{ lat: `${areaPosition.lat}`, lng: `${areaPosition.lng}` }}
>
{poligons.map((coord, i) => (
<Polygon
key={`polygon-${i}`}
onMouseover={handleMouseOver}
onMouseout={handleMouseOut}
paths={coord}
options={polygonOptions}
onClick={handleClick}
/>
))}
</Map>
</>
);
};
export default GoogleApiWrapper({
apiKey: ""
})(Maps);
先感谢您。
