为了在按下按钮时在Google地图的中心点添加偏移量,我尝试这个功能:
function offsetCenter(map, marker) {
var worldCoordinateCenter = map.getProjection().fromLatLngToPoint(marker.getPosition());
var pixelOffset = new google.maps.Point((100/scale) || 0,(0/scale) ||0)
var worldCoordinateNewCenter = new google.maps.Point(
worldCoordinateCenter.x - pixelOffset.x,
worldCoordinateCenter.y + pixelOffset.y
);
var newCenter = map.getProjection().fromPointToLatLng(worldCoordinateNewCenter);
map.setCenter(newCenter);
}
});
我从infoWindows调用了这个函数,其中定义了map和marker:
(function(marker, data) {
google.maps.event.addListener(marker, "click", function() {
info = '<h4>' + data.nombre + '</h4><h4>'+ data.offerta+'</h4><h4>'+ data.horario+'</h4><a href='+data.web+'><h4>Web</h4></a>'
+ '<input type="button" class = "launchConfirm" onclick="offsetCenter(\''+map+'\', \''+marker+'\');" value='Reset center'></input>' //this is the button inside the infowindos to re-set the map center with an offset
;
infoWindow.setContent(info);
infoWindow.open(map, marker);
map.setCenter(marker.getPosition()); //center the map to marker
map.setZoom(16); //zoom to marker
});
}
但是offsetCenter函数中没有定义标记和地图对象。 如何将地图对象和标记传递给该函数?
答案 0 :(得分:0)
确保您的地图&#39;变量和标记管理器在范围&gt; =函数范围内。这样你就不需要传递地图了。
使用标记管理器管理您的制作者。然后,您可以为链接上的某个属性添加唯一ID。当点击进入时,您可以访问该对象以获取ID,这将允许您从管理器中检索制造商。所以代码看起来像这样:
信息窗口内容(为简洁起见缩短):
var info = '<h4>' + data.nombre + '</h4>'<input type="button" data-markerId="' + SomeMarkerManager.getMarkerId() '" onclick="offsetCenter(this);" value='Reset center'></input>'
var offsetCenter = function (element) {
// get the marker Id
var markerId = $(element).attr("data-marker-id");
// use the markerId to find your marker
var marker = SomeMarkerManager.getMarkerById(markerId);
// now you have access to your map and the clicked marker
}
P.S。 标记管理器不在本答案的范围内。只需搜索谷歌地图标记管理器。