2012-06-27 4 views
7

У меня есть карта с различными маркерами, и мне нужно рисовать прямоугольник на карте и выбирать маркеры, которые находятся в пределах прямоугольника.проверить, соответствуют ли маркеры карты выбранным границам

До сих пор я нашел некоторую большую информацию здесь: How to get markers inside an area selected by mouse drag?

Я реализовано 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); 
}); 

Это дает мне следующую ((лат, длинный), (лат, длинный)) формат из предупреждения (bnds);

Мне нужно знать, как я могу проверить, есть ли в нем какие-либо маркеры?

У меня уже есть объект, который хранит маркеры по другой причине. например:

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

который может быть пригоден?

Я не понимаю, как использовать GLatLngBounds и containsLatLng (latlng: GLatLng), как было предложено.

ответ

3

Box/Rectangle Draw Selection in Google Maps

Это было мое решение ..

 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"); 
     }   
    }); 
10

Ваш вопрос помечен версией 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 в маркеры объекта, когда создавая их. Таким образом, вам не нужно создавать их везде, где вам нужно.

+0

да его v3 апи. спасибо за ваш ответ Питер. поэтому я должен иметь возможность использовать var bounds = new google.maps.LatLngBounds (bnds); ? –

+0

Конструктор принимает 2 аргумента: юго-запад и северо-восток. Просто нажмите ссылку, которую я предоставил. –

+0

я вижу, так как я могу получить аргументы sw и ne из моего вывода bnds? –

Смежные вопросы