从HTMLElement获取google.maps.Map实例
我在页面上有一个现有的地图。 我可以使用沿着document.getElementById()的行select该元素来获取HTMLElement JavaScript对象。 是否有可能获得地图初始化时创build的google.maps.Map的实例,即它是HTMLElement对象的属性还是在其原型中?
您无法从构buildGoogle地图对象的DOM Element
获取google.maps.Map
对象。 google.maps.Map
只是一个包装,它控制着DOM Element
来查看地图,而这个元素没有引用它的包装器。
如果您的问题只是范围,请将map
作为window
对象的属性,并且可以从您网页的任何地方访问。 您可以使用以下其中一种方法将'map'
为全局:
window.map = new google.maps.Map(..)
要么
map = new google.maps.Map(...) //AVOID 'var'
您可以从DOM Element
获取google.maps.Map
对象,只需稍作诀窍。
初始化地图对象时,需要将对象存储在元素的数据属性上。
例:
$.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's 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();
您可以稍后通过使用元素的ID来获取地图对象,例如:
var mapCanvas = $('#map-canvas'); $('.location').on('click', function () { // google map takes time to load, so it's 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') )); } });
通过使用此方法,您可以在页面上使用具有不同行为的多个地图。
我有一个类似的问题。 我所要做的就是在创build地图之后操纵地图。 我尝试过这样的事情(我认为这也会对你有帮助)。 我创build了function(或多或less像这样):
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 }); }
这个函数在调用它来在某个容器中创build地图之后做了什么。
var mapa = load_map('mapa_container', 53.779845, 20.485712);
函数将返回包含制作地图时使用的一些数据的对象。 在创build地图本身之后,我可以简单地使用mapa
对象分别操作每个地图上的标记,例如:
mapa.marker.setPosition(new google.maps.LatLng(20,30)); mapa.mapa.setCenter(new google.maps.LatLng(20,30));
这将改变标记位置和中心地图到相同的坐标。 请注意, lng
和lat
值在调用创build地图的函数时不同。
希望有所帮助。
您在初始化地图时创build一个实例;
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'
如果您使用Polymer项目中的Google地图组件,则可以像这样获取现有地图Dom:
var map = document.querySelector('google-map');
一旦你有了,地图的当前实例可以通过以下方式访问:
var currentMapInstance = map.map;
通过使用var map = $("#map_canvas").gmap('get','map')
可以将地图变成一个variables,通过使用这个variables可以改变现有的地图。
干杯
- Google Maps API v3 + jQuery UI选项卡出现问题
- 嵌套在div标签中的地图不会显示在Google Maps JavaScript API v3上
- 谷歌地图 – 如何获得米之间的两点之间的距离?
- Google Maps API v3:如何dynamic更改标记图标?
- 如何访问Google Maps API v3标记的DIV及其像素位置?
- Google MAP API未捕获TypeError:无法读取null的属性'offsetWidth'
- 谷歌地图API的替代品
- Google地图API API自动完成 – 在input时select第一个选项
- 在Google Maps API v3中只打开一个InfoWindow