Задать вопрос
wielski
@wielski
✔ Совет: Вам помогли? Отметьте ответы решением.

Как отследить координаты клика по стандартным маркерам Google Maps v3?

Доброго времени суток.
Проблема в следующем - при использовании event-а "click" на встроенной на сайт карте (Google Maps API v3) ничего не происходит при попытке кликнуть на стандартный маркер станции метро, автобусной остановки, и т.д.
То есть, event не выполняется, и соответственно отследить координаты клика не получается.

Как решить эту проблему кроме Places API?
Сейчас при drag'n'drop-е карты выполняю запрос, получая все ближайшие остановки, и поверх них создаю невидимый маркер, для отслеживания клика. Но получается слишком много кода, и соответственно запросов к серверам Google.

Есть варианты сделать более элегантнее?
Заранее благодарен за вашу помощь.
  • Вопрос задан
  • 1535 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
wielski
@wielski Автор вопроса
✔ Совет: Вам помогли? Отметьте ответы решением.
Элегантное решение проблемы нашел сам:
Создаем поверх карты слой overlay (переменную объявляем в глобальной видимости)
overlay = new google.maps.OverlayView();
  overlay.draw = function() {};
  overlay.setMap(map);


Вешаем на объект карты триггер клика:
$('#map-canvas').click(function(event){
    var point = new google.maps.Point(event.pageX,event.pageY);
    var location = overlay.getProjection().fromContainerPixelToLatLng(point); //получаем координаты по значениям X,Y клика

    var request = {
      location: location,
      types: ['bus_station','subway_station'], //нам нужны только автобусные остановки, и метро
      radius: 10,
    };
    placesService = new google.maps.places.PlacesService(map);
    placesService.search(request, function(result, status, pagination){ //ищем по близости объект по координатам, в 10 метрах от клика
      station = result[0];
      if(typeof station != 'undefined'){
        pos = station.geometry['location'];
        bus_no = station.name.match(/\[([0-9]+)\]/i)[1]; //получаем ID автобусной остановки, он обычно среди []
        alert(bus_no); // А вот и наша остановка
      }
    });
  });


Удачи, надеюсь кому нибудь пригодится!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы