7

さまざまなマーカーを含むマップがあり、マップ上に四角形を描画し、四角形の境界内にあるマーカーを選択できるようにする必要があります。

これまでのところ、ここでいくつかの素晴らしい情報を見つけました:マウスドラッグで選択された領域内にマーカーを取得する方法は?

keymapzoom プラグインを正常に実装しました。そのようです

    $('#dispatcher').gmap3({action:'get'}).enableKeyDragZoom({
        boxStyle: {
          border: "dashed black",
          //backgroundColor: "red",
          opacity: 0.5
        },
        paneStyle: {
          backgroundColor: "gray",
          opacity: 0.2
        }
  });
var dz = $('#dispatcher').gmap3({action:'get'}).getDragZoomObject();
google.maps.event.addListener(dz, 'dragend', function (bnds) {
  alert(bnds);
});

これにより、次の (( lat,long ),( lat,long )) 形式が alert(bnds); から得られます。

この範囲内にマーカーがあるかどうかを確認する方法を知る必要がありますか?

別の理由で、マーカーを格納しているオブジェクトが既にあります。お気に入り:

    markers[name] = {};
    markers[name].lat = lati;
    markers[name].lng = longi;

どれが役に立つでしょうか?

提案されている GLatLngBounds と containsLatLng(latlng:GLatLng) の使用方法がわかりません。

4

2 に答える 2

10

あなたの質問は Maps API の v3 バージョンでタグ付けされているため、そのバージョンを使用していると仮定します (v2 は非推奨であるため、これを使用する必要があります)。一部のクラスとメソッドの名前は、質問とは異なることに注意してください。

境界はLatLngBoundsクラスで表されます。そのクラスのインスタンスでメソッドを実行してcontains、ポイントがそれらの境界内にあるかどうかを判断できます。

すべてのマーカーを含むオブジェクトがある場合は、それらをループして各マーカーを確認できます。次に例を示します。

var bounds = new google.maps.LatLngBounds(sw, ne);
for (var a in markers) {
    if (bounds.contains(new google.maps.LatLng(markers[a].lat, markers[a].lng)) {
        // marker is within bounds
    }
}

余談ですが、LatLng オブジェクトを作成するときに、マーカー オブジェクトに格納します。そうすれば、必要な場所にそれらを作成する必要はありません。

于 2012-06-27T15:50:10.700 に答える
3

Google マップでのボックス/長方形の描画選択

これが私の解決策でした..

     google.maps.event.addListener(dz, 'dragend', function(e) { //important listener          
      for(var i = 0; i < markers.length; i++){ // looping through my Markers Collection       
        if(e.contains(markers[i].position))
            console.log("Marker"+ i +" - matched");
        }         
     });
于 2012-06-28T10:42:08.530 に答える