0

これが私の問題です。多くの人が遭遇したと確信しています。州の配列と、その州に対応する緯度と経度の値のサブ配列を含む JSON ファイルがあります。

州をループし、ポイントをループして、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 に答える