1

私はこのようにチェックします:ここにコードを入力してくださいvar point = new g.LatLng(parseFloat(lat)、parseFloat(lng)); var bounds = map.getBounds(); if(bounds.contains(point)){ポイントはビューポートにあります}

しかし、ズームレベルを変更すると、ビューポートの座標の前に、「非表示」ポイントが「表示」として検出されません。つまり、ビューポート内です。ポイントはマーカーではありません!

4

2 に答える 2

1

私はあなたのシナリオでうまくいくかもしれないハックを書きました。私がテストした限りでは、繰り返される世界があまりないときに機能します。世界が2回以上表示されている場合、このハックは信頼できないことを私は知っています。したがって、マップのminZoomを設定できれば、そのようなケースを防ぐことができます。

マップを左半分と右半分に分割し、マーカーがどちらかの半分にあるかどうかを確認するという考え方です。

これがハックです、慎重に使用してください

http://jsfiddle.net/QeR2D/3/

于 2012-04-06T21:41:03.017 に答える
0

ビューポートに地球の全周以上がある場合、問題が発生する可能性があります。

左側の端は、右側の端よりもさらに東にある場合があります。map.getBounds()この場合、間違った結果が得られます。

左側の端は右側の端の西にある場合がありますが、両方の経度によって定義される領域には、対象のポイントが含まれない場合があります。

これは、それを示す別の答えのために私が作成した地図の画像です。左端は83°E、右端は162°Eです。マーカーは54°Wと8°Wにあり、どちらも範囲内map.getBounds()にありません—明らかに地図上にありますが、83°Eと162°Eの間にありません—。

これに対応できるAPIのメソッドを私は知りません。

于 2012-04-06T18:06:39.070 に答える