如何以像素为单位偏移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了什么。