2016-08-18 4 views
-1

Я использую API Javascript Google Maps для отображения карты и отображения на ней набора маркеров местоположения. Чтобы уменьшить объем данных, возвращаемых через запрос AJAX, который получает местоположения, я отправляю координаты ограничивающего прямоугольника в запросе, чтобы возвращать только видимые местоположения.API Google Maps JS API - getBounds() не всегда определен

я в настоящее время код вдоль линий:

google.maps.event.addListener(Map.map, "bounds_changed", function() { 
    Map.bounds.north = Map.map.getBounds().getNorthEast().lat(); 
    Map.bounds.east = Map.map.getBounds().getNorthEast().lng(); 
    Map.bounds.south = Map.map.getBounds().getSouthWest().lat(); 
    Map.bounds.west = Map.map.getBounds().getSouthWest().lng(); 
    }); 

Что, как я понимаю, как getBounds работы следует обновить Map.bounds (который отправляется на сервер для извлечения данных), когда карта перемещается. Однако я не могу заставить его установить Map.bounds, когда карта создана, поэтому первоначальный запрос для местоположений не удался. Если я звоню Map.map.getBounds за пределами google.maps.event.addListener Я получаю сообщение об ошибке getBounds is undefined. Как установить границы после загрузки карты, прежде чем пользователь взаимодействует с ней?

(я также попытался "idle" в дополнение к "bounds_changed" с теми же результатами)

+0

пожалуйста обеспечивают [mcve], который демонстрирует вашу проблему. Код, который вы опубликовали, не должен терпеть неудачу. – geocodezip

+0

Код, который я написал, действительно работает, поэтому я разместил его, это единственный экземпляр, в котором он работает. Использование функции getBounds в любом другом контексте дает ошибку, что она не определена (все же внутри обратного вызова Google Maps). Я не столько прошу внести исправления в мой код, как пример использования getBounds вне этого точного дела. – FatalKeystroke

+0

Это мне было непонятно. Пример того, что вы пробовали, который не работал, который, по вашему мнению, должен был бы, был бы полезен. – geocodezip

ответ

0

Карт Google Javascript API базируется событие. Если вы назовете getBounds на карте до начала первого события bounds_changed, это не сработает. В любое время после его установки в первый раз будет работать.

Пример:

var map; 
 

 
function initMap() { 
 
    map = new google.maps.Map(document.getElementById('map'), { 
 
    center: { 
 
     lat: 42, 
 
     lng: -72 
 
    }, 
 
    zoom: 8 
 
    }); 
 
} 
 
google.maps.event.addDomListener(window, 'load', initMap);
html, 
 
body, 
 
#map { 
 
    height: 100%; 
 
    width: 100%; 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<input type="button" value="get bounds" onclick="document.getElementById('bounds').innerHTML = map.getBounds().toUrlValue(6);" /> 
 
<div id="bounds"></div> 
 
<div id="map"></div>

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