Oll*_*cks 41 javascript google-maps google-maps-api-3
我在页面上有一个现有的地图.我可以使用document.getElementById()行中的某些内容来选择该元素,以获取HTMLElement javascript对象.是否有可能获得初始化地图时创建的google.maps.Map实例,即它是HTMLElement对象的属性还是其原型?
Eng*_*eer 47
您无法google.maps.Map从DOM Element构建Google Maps对象的对象中获取对象.google.maps.Map只是一个包装器,它控制DOM Element着查看地图,并且该元素没有引用它的包装器.
如果您的问题只是范围,请将其map作为window对象的属性,并且可以从页面中的任何位置访问它.您可以'map'使用以下方法之一制作全局:
window.map = new google.maps.Map(..)
Run Code Online (Sandbox Code Playgroud)
要么
map = new google.maps.Map(...) //AVOID 'var'
Run Code Online (Sandbox Code Playgroud)
gol*_*sky 23
你可以通过一个小技巧从中获取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's data attribute
********************************************/
_this.data('map', map);
return _this;
};
// ... more methods
return this;
};
Run Code Online (Sandbox Code Playgroud)
定义地图元素后,例如:
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();
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用元素的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')
));
}
});
Run Code Online (Sandbox Code Playgroud)
通过使用此方法,您可以在页面上拥有多个具有不同行为的地图.
小智 5
我遇到了类似的问题.我想做的就是在创建地图之后操纵地图.我尝试了类似的东西(我认为它也会对你有所帮助).我创建了函数(或多或少像这样):
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
});
}
Run Code Online (Sandbox Code Playgroud)
该函数在调用它以在某个容器中创建映射之后执行的操作.
var mapa = load_map('mapa_container', 53.779845, 20.485712);
Run Code Online (Sandbox Code Playgroud)
函数将返回包含制作地图时使用的一些数据的对象.创建地图后,我可以简单地使用mapa对象操作,在我的情况下,每个地图上的标记,例如:
mapa.marker.setPosition(new google.maps.LatLng(20,30));
mapa.mapa.setCenter(new google.maps.LatLng(20,30));
Run Code Online (Sandbox Code Playgroud)
这会将标记位置和中心贴图更改为相同的坐标.请注意,在调用创建地图的函数时,值lng和lat值不同.
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
58374 次 |
| 最近记录: |