2012-04-06 10 views
0

ここにコードを入力してください var point = new g.LatLng(parseFloat(lat)、parseFloat(lng)); var bounds = map.getBounds(); (bounds.contains(点)) ポイントがビューポート内にあるかどうか確認してください

しかし、私は、ズームレベルを変更すると、ビューポートの座標をthefore { 点がビューポート である}場合 、「不可視」点」として検出されません私はビューポートで意味します。 ポイントはマーカーではありません!

答えて

0

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

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

はハックは、慎重にポイントがマップ(すなわちつのマーカー)ではなく、その他の場合に設定されていればOKです

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

+0

を使うのか? – Bertaud

+0

申し訳ありませんが、私はあなたが "他のケース"とは何を意味するのか分かりません。複数のマーカーを意味しますか? –

+0

いいえ、地図上に設定されていない点のみです。しかし、私はあなたのコードをチェックし、それは大丈夫です。非常に良い例。ありがとうございました。 – Bertaud

0

あなたのビューポートに地球の全周以上のものがあると、状況が悪くなる可能性があります。

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

左端は右端の西にある場合がありますが、両方の経度で定義される領域には関心のあるポイントが含まれない場合があります。

ここにはimage of a mapがあります。私はそれを実証する別の答えのために開発しました。左端は83°Eに、右端は162°Eにあります。マーカーは54°Wと8°Wであり、いずれもmap.getBounds() —のいずれも83°E〜162°E —の間にはないことは明らかです。

私はAPIの中でこれを提供できる方法がないことに気づいていません。

関連する問題