2

現在/クリックされたマーカーの周囲に半径 50 マイルを追加するアプリがあります (mapMarkers[] から)。選択したマーカーのインデックス番号とその LatLng 位置を「myPosition」として、他のマーカーの LatLng 位置を mapMarkers[i].point として知っています。

マップ上に円が描画された後、次の単純な関数を呼び出して、すべての mapMarkers[] をステップスルーして現在のマーカーからの距離を計算し、半径 50 マイル内に実際に含まれるマーカーの数をカウントします。シンプルですね。

問題: 次のルーチンは、現在のマーカーの最初の反復 (つまり、最初のクリック) で結果を生成しません。ただし、現在のマーカーを 2 回目以降にクリックすると、期待どおりの結果が得られます。

function inCircle() {
    var j = 0;
    var myDistance = 0;
    for (var i = 0; i < mapMarkers.length; i++) {
        myDistance = google.maps.geometry.spherical.computeDistanceBetween(myPosition, mapMarkers[i].point);
        myDistance = parseInt(myDistance/1609.34)  //meters to miles
        if (myDistance <= 50) {
            j = j + 1;
            //Do more stuff...
        }
    }
    alert("Markers inside circle: " + j);
}

円を選択したマーカーにバインドした直後に、この関数を呼び出します。「myPosition」は、マップが読み込まれるときに宣言されます。距離計算をコメントアウトすると、現在のマーカーの最初の反復で結果が生成されます。

この問題の原因は何ですか?

4

1 に答える 1

1

上記の私のコメントを WRT してください: リクエストを行ったために、ジオメトリ ライブラリが読み込まれているだけだと思います。こちらの developers.google.com/maps/documentation/javascript/libraries をご覧ください。Google マップ js を呼び出すとき (ページの読み込み中) に、geometry-spherical ライブラリを含めます。

例えば:

 <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=drawing,geometry,weather"></script>
于 2013-03-22T15:55:33.113 に答える