Google Maps JavaScript API V3。
我的映射让我处理多边形的概念,并且在尝试深入研究代码之前,我正在尝试制定策略。
我一次在地图上永远不会有多个多边形,所以我希望我可以定义一个多边形并像标记一样重复使用它。
我的理解是否正确多边形setPath();函数将移动多边形以表示一个新的点数组?文档说......“从MVCArray插入或删除LatLng将自动更新地图上的多边形。”但它并没有说出你可以使用setPath();给它一个全新的点数。
我正在考虑使用伪代码...
// some event fires
polygon.setPath(latlngArray);
bounds = new google.maps.LatLngBounds();
$.each(latlngArray, function(key, ll){
bounds.extend(ll);
});
polygon.setMap(MyMap);
MyMap.fitBounds(bounds);
//a different event fires
polygon.setMap(null);
// build a new latlngArray
// do it again
我认为我可以在这个时代重复使用相同的多边形对象,或者我是否需要重新考虑我的策略?
感谢。
跳过
编辑:答案是肯定的。我将更好地挖掘我的代码,并尝试提供一个写得很好的答案,这显示了我遇到的警告。例如,map.fitBounds();必须是可见的;给出有说服力的结果。答案 0 :(得分:3)
是的,很有可能重复使用相同的多边形对象...
我真的没有任何代码可供选择。我在问题中列出的伪代码基本上有效。
这些是我在充实我的解决方案时学到或选择的东西......
如前所述,地图不能style="display: none;"
map.fitBounds();
按预期工作。
我已经保留了一个容纳我标记的容器对象。我为多边形路径创建了一个容器对象,并将“多边形”属性添加到与多边形关联的标记,因此多个标记可以引用相同的多边形路径。
即使对于具有单一路径的多边形,我选择在另一个数组中嵌入我的路径数组,然后使用polygon.setPaths();
这样,如果我扩展到具有多个路径的多边形,代码将更容易扩展。
最初解析多边形路径时,构建一个LatLngBounds对象,然后保存其bounds.getSouthWest();
& bounds.getNorthEast();
以及路径。这样可以在显示时快速轻松地map.fitBounds();
,并且不会多次重新计算相同的边界。
无论如何,是的,它肯定是可能的,我认为重复使用不同路径的相同多边形对象非常有效。
旧金山&奥克兰回收相同的多边形对象......
这就是我的全部!
跳过
更新:我发现了一些多路径的多边形数据。它插入了。
答案 1 :(得分:2)
是的,你假设重新定义setPaths将重新定义多边形,你是正确的,但是你必须先设置Map以重绘多边形。多边形可能在api窗口之外,这是无关紧要的。为了便于使用,一旦“重新命名”,由于多边形可能在您的查看窗口之外,使用地图上的setCenter方法重新定义窗口中心将是一种很好的可行性做法。这段代码是我从应用程序中删除的一个块,它允许用户绘制折线,然后将其转换为多边形(因为用户可能想要修复周边,我允许她在折线和多边形之间来回)。我总是使用相同的多边形,只需设置PathSSSSSSSSS(多边形最后有一个S):
function confirmClosePolyline() {
var pathArrayTemp = areaPerimeterPath.getPath();
var decision = confirm("Change POLYGON?");
if (decision) {
areaMapPolygon.setMap(null); //makes polygon "invisible"/ removes
areaMapPolygon.setPaths(pathArrayTemp);
areaMapPolygon.setMap(map);
}
}