如何以像素为单位偏移Google地图(API v3)的中心?
我想知道是否有可能在谷歌地图API v3中抵消地图的中心 。 我想控制像素的偏移量,因为lat和lng似乎是错误的,而且很难预测。
我只需要放置一个标记,然后将中心偏移250px,这样我可以在地图中间放置其他一些内容。
希望有人能帮助!
发现这个问题时,研究和思考我应该提供一个答案:
function map_recenter(latlng,offsetx,offsety) { var point1 = map.getProjection().fromLatLngToPoint( (latlng instanceof google.maps.LatLng) ? latlng : map.getCenter() ); var point2 = new google.maps.Point( ( (typeof(offsetx) == 'number' ? offsetx : 0) / Math.pow(2, map.getZoom()) ) || 0, ( (typeof(offsety) == 'number' ? offsety : 0) / Math.pow(2, map.getZoom()) ) || 0 ); map.setCenter(map.getProjection().fromPointToLatLng(new google.maps.Point( point1.x - point2.x, point1.y + point2.y ))); }
如果您的Google地图variables不是map
使用以下调用函数参考:
function map_recenter(map,latlng,offsetx,offsety) { ...
请参阅此问题: 如何以像素为单位偏移Google地图(API v3)的中心?
这是我在这里提供的答案的修改。
google.maps.Map.prototype.setCenterWithOffset= function(latlng, offsetX, offsetY) { var map = this; var ov = new google.maps.OverlayView(); ov.onAdd = function() { var proj = this.getProjection(); var aPoint = proj.fromLatLngToContainerPixel(latlng); aPoint.x = aPoint.x+offsetX; aPoint.y = aPoint.y+offsetY; map.setCenter(proj.fromContainerPixelToLatLng(aPoint)); }; ov.draw = function() {}; ov.setMap(this); };
你可以像这样使用它:
var latlng = new google.maps.LatLng(-34.397, 150.644); var map = new google.maps.Map(document.getElementById("map_canvas"), { zoom: 8, mapTypeId: google.maps.MapTypeId.ROADMAP, center: latlng }); map.setCenterWithOffset(latlng, 0, 250);
这是一个工作的例子 。
查看MapCanvasProjection对象 – http://code.google.com/apis/maps/documentation/javascript/reference.html#MapCanvasProjection
你可以通过fromContainerPixeltoLatLng()将地图中心latLng(map.getCenter())转换成容器像素坐标,
还有地图对象的panBy方法…你可以偏移指定数量的像素。 但是,你会得到一个平滑的过渡animation,这可能不是你想要的。 我正在寻找同样的东西,会让你知道我find了什么。