【发布时间】:2020-10-18 12:37:39
【问题描述】:
我仍然是使用谷歌地图和 ReactJS 的初学者。我正在使用google-maps-react 绘制我的地图。
我有一个在地图上呈现的属性。该属性是一组多边形,所有这些多边形共同构成属性(农场)。
当我点击一个特定的多边形时,我会得到被点击的那个多边形的所有坐标:
我想知道,是否可以显示被选定多边形包围的10公里半径?
根据我的研究,可以通过单个点显示半径,即单个纬度和单个经度。 在我的例子中,一个多边形可以有数百个纬度和数百个经度。如上图所示。
您能告诉我如何根据选择的多边形配置 10 公里半径吗?
我将代码放入codesandbox
我在这里绘制地图:
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);
提前谢谢你。
【问题讨论】:
-
你能得到多边形的中心点(x, y)吗?
-
他的里卡多,我考虑过,但有可能我占据了多边形的中心,设置了一个 10 公里的无线电,但我仍然停留在多边形内。这并不能解决我的问题。
-
我明白了,所以您想设置 10 公里外边界的半径,在这种情况下,您可以计算多边形区域的宽度和高度吗?并将其添加到所需的半径? This 可能会有所帮助
-
我去看看里卡多,非常感谢你
标签: javascript reactjs google-maps google-maps-react