可以polygon.setPath();用于完全重新定义多边形?

时间:2011-05-10 18:31:25

标签: javascript google-maps polygon

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();必须是可见的;给出有说服力的结果。

2 个答案:

答案 0 :(得分:3)

是的,很有可能重复使用相同的多边形对象...

我真的没有任何代码可供选择。我在问题中列出的伪代码基本上有效。

这些是我在充实我的解决方案时学到或选择的东西......

如前所述,地图不能style="display: none;" map.fitBounds();按预期工作。

我已经保留了一个容纳我标记的容器对象。我为多边形路径创建了一个容器对象,并将“多边形”属性添加到与多边形关联的标记,因此多个标记可以引用相同的多边形路径。

即使对于具有单一路径的多边形,我选择在另一个数组中嵌入我的路径数组,然后使用polygon.setPaths();这样,如果我扩展到具有多个路径的多边形,代码将更容易扩展。

最初解析多边形路径时,构建一个LatLngBounds对象,然后保存其bounds.getSouthWest();& bounds.getNorthEast();以及路径。这样可以在显示时快速轻松地map.fitBounds();,并且不会多次重新计算相同的边界。

无论如何,是的,它肯定是可能的,我认为重复使用不同路径的相同多边形对象非常有效。

旧金山&奥克兰回收相同的多边形对象...... BayArea.png

这就是我的全部!

跳过

更新:我发现了一些多路径的多边形数据。它插入了。

答案 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);
    }
}