Подтвердить что ты не робот

Получить экземпляр google.maps.Map из элемента HTMLElement

У меня есть существующая карта на странице. Я могу выбрать этот элемент, используя что-то по строкам document.getElementById(), чтобы получить объект javascript HTMLElement. Возможно ли получить экземпляр google.maps.Map, созданный при инициализации карты, т.е. Является ли это объектом объекта HTMLElement или его прототипом?

4b9b3361

Ответ 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'), можно получить карту в переменную, и с помощью этой переменной можно изменить существующую карту.

Приветствия