【发布时间】:2021-07-03 12:08:45
【问题描述】:
我有来自雷达层 API 的响应数据,如下所示:
{
"Date": "2020-04-18T04:00:05+03:00",
"Source": 2,
"Kml": [
{
"Polygons": [
{
"Polygon": [
{ "Cordinates": [25.8409, 51.6199] },
{ "Cordinates": [25.8341541, 51.619873] },
{ "Cordinates": [25.834177, 51.61238] },
{ "Cordinates": [25.8308582, 51.5936356] },
{ "Cordinates": [25.8275185, 51.5823822] }
....
....
]
}
],
"Color": "#47C247"
},
{
"Polygons": [
{
"Polygon": [
{ "Cordinates": [26.1740189, 50.5239372] },
{ "Cordinates": [26.1841354, 50.5238838] },
{ "Cordinates": [26.1909122, 50.53136] },
{ "Cordinates": [26.1977215, 50.5463562] }
....
....
]
}
],
"Color": "#47C247"
},
...
...
我想使用这些数据创建一个雷达地图。
我尝试使用每个数据创建多边形,并创建了一个设置间隔函数来循环每个多边形 250 毫秒,以便它充当动画。
setInterval(() => {
deleteAllShape();
// console.log(data);
data.Kml.map((polygons) => {
const shape = polygons.Polygons.map((polygon) => {
const newMapData = [];
polygon.Polygon.map((obj) => {
const path = { lat: obj.Cordinates[0], lng:
obj.Cordinates[1] };
newMapData.push(path);
});
poly = new google.maps.Polygon({
paths: newMapData,
strokeColor: polygons.Color,
strokeOpacity: 0.8,
strokeWeight: 0,
fillColor: polygons.Color,
fillOpacity: 0.35,
draggable: false,
editable: false,
});
poly.setMap(map);
allPolygons.push(poly);
});
});
},250)
function deleteAllShape() {
poly = null;
for (let i = 0; i < allPolygons.length; i++) {
allPolygons[i].setMap(null);
}
}
这在很大程度上是有效的。但问题是地图和浏览器在创建一些多边形后速度变慢并挂起。
我发现他们正在地图上渲染图像。我的问题是如何使用上述数据创建图像并创建雷达图?
【问题讨论】:
-
“地图和浏览器在创建一些多边形后变慢并挂起” - 你的 javascript 在创建多边形时看起来像什么?请将其添加到您的问题中。我怀疑“在每个多边形中循环 250 毫秒的设置间隔函数”会导致速度变慢。
-
@duncan 我在问题中添加了我的代码的 setInterval 部分。我认为可能会发生一些内存泄漏,导致地图挂起。但根据我的研究,多边形不用于创建雷达图,图像作为图层用于创建雷达图。请提供最合适的解决方案以获得更好的性能。
-
尝试在每个间隔之后将
allPolygons中的多边形总数打印到控制台,我认为它们仍然存在,并且在每个新间隔上,将它们与地图取消链接的for有处理它们。
标签: javascript node.js google-maps