0

所以这是我的问题,我相信很多人都遇到过。我有一个 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 点的最后一个数组。还是我应该为边界添加另一个循环?

谢谢

4

2 回答 2

0

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

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

于 2012-04-05T14:09:15.247 回答
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”,然后从处理单击操作的单独函数访问它们。如果有人认为这是一个坏主意,请告诉我。

于 2012-04-06T00:19:27.980 回答