У меня есть существующая карта на странице. Я могу выбрать этот элемент, используя что-то по строкам document.getElementById(), чтобы получить объект javascript HTMLElement. Возможно ли получить экземпляр google.maps.Map, созданный при инициализации карты, т.е. Является ли это объектом объекта HTMLElement или его прототипом?
Получить экземпляр google.maps.Map из элемента HTMLElement
Ответ 1
Вы не можете получить объект google.maps.Map
из DOM Element
, на котором был создан объект Google Maps. google.maps.Map
- это просто оболочка, которая управляет DOM Element
для просмотра карты, и этот элемент не имеет ссылки на свою оболочку.
Если ваша проблема - это только область видимости, сделайте map
как свойство объекта window
, и она будет доступна из любой точки вашей страницы. Вы можете сделать 'map'
глобальным, используя один из них:
window.map = new google.maps.Map(..)
или
map = new google.maps.Map(...) //AVOID 'var'
Ответ 2
Вы можете получить google.maps.Map
объект из DOM Element
с небольшим трюком.
Когда вы инициализируете объект карты, вам нужно сохранить объект по атрибуту данных элемента.
Пример:
$.fn.googleMap = function (options) {
var _this = this;
var settings = $.extend({}, {
zoom: 5,
centerLat: 0,
centerLon: 0
}, options);
this.initialize = function () {
var mapOptions = {
zoom: settings.zoom
};
var map = new google.maps.Map(_this.get(0), mapOptions);
// do anything with your map object here,
// eg: centering map, adding markers' events
/********************************************
* This is the trick!
* set map object to element data attribute
********************************************/
_this.data('map', map);
return _this;
};
// ... more methods
return this;
};
После определения элемента карты, например:
var mapCanvas = $('#map-canvas');
var map = mapCanvas.googleMap({
zoom: 5,
centerLat: 0,
centerLong: 0
});
// ... add some pre-load initiation here, eg: add some markers
// then initialize map
map.initialize();
вы можете получить объект карты позже, используя идентификатор элемента, например:
var mapCanvas = $('#map-canvas');
$('.location').on('click', function () {
// google map takes time to load, so it better to get
// the data after map is rendered completely
var map = mapCanvas.data("map");
if (map) {
map.panTo(new google.maps.LatLng(
$(this).data('latitude'),
$(this).data('longitude')
));
}
});
Используя этот метод, вы можете иметь несколько карт с различным поведением на странице.
Ответ 3
У меня была аналогичная проблема. Все, что я хотел сделать, это манипулировать картами после того, как они были созданы. Я пробовал что-то вроде этого (я думаю, это тоже поможет). Я создал функцию (более или менее):
function load_map(el_id, lat, lng) {
var point = new google.maps.LatLng(lat,lng);
var myMapOptions = {
scrollwheel:false,
zoom: 15,
center: point,
mapTypeControl: true,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.DROPDOWN_MENU,
position: google.maps.ControlPosition.RIGHT_TOP
},
navigationControl: true,
navigationControlOptions: {
style: google.maps.NavigationControlStyle.SMALL,
position: google.maps.ControlPosition.LEFT_CENTER
},
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById(el_id),myMapOptions);
var marker = new google.maps.Marker({
draggable:true,
map: map,
position: point
});
return({
container:map.getDiv(),
marker:marker,
mapa:map
});
}
Что делает эта функция, после вызова ее для создания карты в каком-то контейнере.
var mapa = load_map('mapa_container', 53.779845, 20.485712);
Функция возвращает объект, содержащий некоторые данные, используемые при создании карты. После создания самой карты я могу просто манипулировать в моем случае маркером на каждой карте отдельно с помощью объекта mapa
, например:
mapa.marker.setPosition(new google.maps.LatLng(20,30));
mapa.mapa.setCenter(new google.maps.LatLng(20,30));
Это изменит положение маркера и карту центра на те же самые коорды. Обратите внимание, что значения lng
и lat
различаются, а при вызове функции, которая создает карту.
Надеюсь, что это поможет.
Ответ 4
Вы создаете экземпляр при инициализации карты;
var map = new google.maps.Map(document.getElementById("map_element"), options);
Вы используете этот экземпляр всякий раз, когда хотите сделать что-то вроде пометки, изменения местоположения и т.д. Это не объект HTMLElement. Однако он имеет метод getDiv()
, который дает вам элемент html, над которым он работает.
map.getDiv(); // in this case it returns the element with the id 'map_element'
Ответ 5
Если вы используете компонент Google-карты из проекта Polymer, вы можете получить существующую карту Dom следующим образом:
var map = document.querySelector('google-map');
Как только у вас есть, к текущему экземпляру карты можно получить доступ:
var currentMapInstance = map.map;
Ответ 6
Используя var map = $("#map_canvas").gmap('get','map')
, можно получить карту в переменную, и с помощью этой переменной можно изменить существующую карту.
Приветствия