我尝试将标记坐标添加到地图或窗口,以便在用鼠标修改时设置特殊功能,我的测试代码如下:
var multiMarker = [];
var xmyOptions = { // Ponemos unas coordenadas iniciales al mapa de google maps.
zoom: 16,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var xmap = new google.maps.Map($('#map_canvas2').get(0), xmyOptions); // Iniciamos el mapa indicando el Div donde se va a cargar y las opciones.
for (x=0; x<9; x++) {
multiMarker[x] = new google.maps.Marker({ // Definimos una nueva "marca" o puntero
position: new google.maps.LatLng('40.' + Math.floor(Math.random()*99999999), '-3.' + Math.floor(Math.random()*99999999)),
draggable: true,
map: xmap,
title: 'Ejemplo marcador arrastrable'
});
google.maps.event.addListener(multiMarker[x], 'mouseover', function(){
console.log(this);
});
}
var bounds = new google.maps.LatLngBounds();
for (index in multiMarker) {
var data = multiMarker[index];
bounds.extend(new google.maps.LatLng(data.position.Oa, data.position.Pa));
}
xmap.fitBounds(bounds);
问题是我无法在marker [x]对象中获取此坐标,我只能看到纬度和经度,我需要标记的顶部,左侧,底部或右侧位置来设置特殊的浮动工具提示。 API没有这个信息吗?
感谢。
答案 0 :(得分:0)
我在这里回答了类似的问题:How to access Google Maps API v3 marker's DIV and its pixel position?
您可以得到的是标记在世界坐标中的位置,然后转换为可见矩形左上角的偏移量。但它是唯一的位置,您无法访问标记本身,因此您无法向其添加事件或以这种方式更改标记div。
var scale = Math.pow(2, map.getZoom());
var nw = new google.maps.LatLng(
map.getBounds().getNorthEast().lat(),
map.getBounds().getSouthWest().lng()
);
var worldCoordinateNW = map.getProjection().fromLatLngToPoint(nw);
var worldCoordinate = map.getProjection().fromLatLngToPoint(marker.getPosition());
var pixelOffset = new google.maps.Point(
Math.floor((worldCoordinate.x - worldCoordinateNW.x) * scale),
Math.floor((worldCoordinate.y - worldCoordinateNW.y) * scale)
);
如果由于某种原因你需要访问marker的div,那么你需要检查为map创建了什么div,选择在哪一层(标记在一层,但我不记得哪一个,不要混淆它们)用标记阴影:-))然后以某种方式检查这个div有哪个位置,选择你需要的位置。