Я переключаюсь с v2 на v3 API карт Google, и у меня возникла проблема с gMap.getBounds()
функцией.
Мне нужно получить границы моей карты после ее инициализации.
Вот мой код javascript:
var gMap;
$(document).ready(
function() {
var latlng = new google.maps.LatLng(55.755327, 37.622166);
var myOptions = {
zoom: 12,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
gMap = new google.maps.Map(document.getElementById("GoogleMapControl"), myOptions);
alert(gMap.getBounds());
}
);
Так что теперь он предупреждает меня, что gMap.getBounds()
это не определено.
Я пытался получить значения getBounds в событии щелчка, и он отлично работает для меня, но я не могу получить те же результаты в событии карты загрузки.
Также getBounds отлично работает при загрузке документа в Google Maps API v2, но не работает в V3.
Не могли бы вы помочь мне решить эту проблему?
источник
Он должен работать, по крайней мере, согласно документации для getBounds (). Тем не менее:
var gMap; $(document).ready(function() { var latlng = new google.maps.LatLng(55.755327, 37.622166); var myOptions = { zoom: 12, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; gMap = new google.maps.Map(document.getElementById("GoogleMapControl"), myOptions); google.maps.event.addListenerOnce(gMap, 'idle', function(){ alert(this.getBounds()); }); });
Смотрите его работать здесь .
источник
idle
мероприятие запускается передtilesloaded
событием? Для меняtilesloaded
событие постоянно срабатывает передidle
событием.Я говорил, что решение Салмана лучше, потому что
idle
событие вызывается раньше, чем событиеtilesloaded
, поскольку оно ожидает загрузки всех плиток. Но при более внимательном рассмотрении кажется, что это вызваноbounds_changed
еще раньше, и это также имеет больше смысла, поскольку вы ищете границы, верно? :)Итак, мое решение было бы:
google.maps.event.addListenerOnce(gMap, 'bounds_changed', function(){ alert(this.getBounds()); });
источник
bounds_changed
не сработало бы, посколькуgetBounds()
требовалось загрузить плитки. +1 за предложение. Я обновлю свой ответ.В других комментариях здесь рекомендуется использовать событие «bounds_changed» вместо «idle», с чем я согласен. Конечно, в IE8, который запускает "idle" перед "bounds_changed", по крайней мере, на моей машине разработчика, оставляя мне ссылку на null в getBounds.
Однако событие «bounds_changed» будет запускаться постоянно, когда вы перетаскиваете карту. Поэтому, если вы хотите использовать это событие для начала загрузки маркеров, это будет сильно загружать ваш веб-сервер.
Мое решение этой проблемы с несколькими браузерами:
google.maps.event.addListenerOnce(gmap, "bounds_changed", function(){ loadMyMarkers(); google.maps.event.addListener(gmap, "idle", loadMyMarkers); });
источник
Я не уверен, что опоздал, но вот мое решение с использованием плагина gmaps.js :
map = new GMaps({...}); // bounds loaded? if not try again after 0.5 sec var check_bounds = function(){ var ok = true; if (map.getBounds() === undefined) ok = false; if (! ok) setTimeout(check_bounds, 500); else { //ok to query bounds here var bounds = map.getBounds(); } } //call it check_bounds();
источник