如何从多边形返回数组点?

时间:2012-04-05 14:05:19

标签: javascript arrays google-maps-api-3 latitude-longitude

所以这是我的问题,我相信很多人都会参与其中。我有一个带有状态数组的JSON文件,以及对应于该状态的lat和lng值的子数组。

我遍历状态,然后遍历点然后构建50个多边形。

我现在需要在点击状态时居中并放大状态。我意识到我可以再次循环点,并添加边界。但是,当我在控制台中显示多边形时,我可以点击数值并查看点。

我假设有一种方法可以简单地访问这些点,而无需通过它们重新循环......这些点已经与多边形相关联,该多边形与状态相关联。

当我尝试console.log(newpoly.latLngs);时,我已退回:

Kf

->b: Array[1]

->0: Kf

->b: Array[5]

->0: Q
     Xa: 41.0037
     Ya: -104.05560000000003
     __proto__: Q
  1: Q
     Xa: 44.9949
     Ya: -104.0584
     __proto__: Q
  2: Q
     Xa: 44.9998
     Ya: -111.0539
     __proto__: Q
  3: Q
     Xa: 40.9986
     Ya: -111.04570000000001
     __proto__: Q
  4: Q
     Xa: 41.0006
     Ya: -104.05560000000003

抱歉,我不确定如何使这看起来更干净。

无论如何我想访问latLng点的最后一个数组。或者我应该为边界添加另一个循环?

由于

2 个答案:

答案 0 :(得分:0)

我认为没有办法在图像映射中获取多边形的边界框(我认为这就是你正在使用的)。

无需编写另一个循环;使用你已编写的循环来计算边界并同时构建多边形。

答案 1 :(得分:0)

让它以这种方式运作:

jQuery.getJSON("http://www.betafoot.com/wp-content/themes/twentyeleven/states.json", function(json) 
{
var j = [];
var i = [];
var $length = Object.keys(json).length;
for (var j=1; j<$length+1; j++)
{
var latlngbounds = new google.maps.LatLngBounds( );
var pts = [];
for (var i=0; i<json[j].points.length; i++) 
{
var id = json[j].stateid;
pts[i] = new google.maps.LatLng(json[j].points[i][1], json[j].points[i][2]);
latlngbounds.extend(pts[i]);
};
var newpoly = new google.maps.Polygon({
paths: pts,
strokeColor: "#FFFFFF",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#FF0000",
fillOpacity: 0
});
newpoly.setMap(map);
newpoly.latlngbounds = latlngbounds;
newpoly.objInfo = id;
listenMarker(newpoly);
};
});
function listenMarker(newpoly)
{
google.maps.event.addListener(newpoly, 'click', function(event)
{
map.fitBounds(newpoly.latlngbounds);
});
};

你可以看到我将latlngbounds附加到“newpoly”,然后从处理点击动作的单独函数访问它们。如果有人认为这是个坏主意,请告诉我。