Google maps 如何以像素为单位偏移谷歌地图(API v3)的中心?

Google maps 如何以像素为单位偏移谷歌地图(API v3)的中心?,google-maps,google-maps-api-3,Google Maps,Google Maps Api 3,我想知道在Google maps api v3中是否可以偏移地图的中心。我想用像素来控制这个偏移量,因为lat和lng似乎是错误的,很难预测 我只需要放一个标记,然后把中心偏移250px,这样我就可以把一些其他的内容放在地图中间。 希望有人能帮忙 查看MapCanvasProjection对象- 您可以获取地图中心latLng(map.getCenter()),然后使用fromContainerPixeltoLatLng()将其转换为容器像素坐标。还有地图对象的panBy方法。。。可以偏移指定数

我想知道在Google maps api v3中是否可以偏移地图的中心。我想用像素来控制这个偏移量,因为lat和lng似乎是错误的,很难预测

<>我只需要放一个标记,然后把中心偏移250px,这样我就可以把一些其他的内容放在地图中间。


希望有人能帮忙

查看MapCanvasProjection对象-


您可以获取地图中心latLng(map.getCenter()),然后使用fromContainerPixeltoLatLng()将其转换为容器像素坐标。

还有地图对象的panBy方法。。。可以偏移指定数量的像素。但是,您将获得平滑的过渡动画,这可能不是您想要的。我自己也在寻找同样的东西,我会告诉你我发现了什么。

在研究时发现了这个问题,并认为我应该提供一个答案:

功能图\u重新居中(latlng、offsetx、offsety){
var point1=map.getProjection().fromLatLngToPoint(
(google.maps.latlng的latlng实例)?latlng:map.getCenter()
);
var point2=新的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(新的google.maps.Point(
点1.x-点2.x,
点1.y+点2.y
)));
}
如果您的Google maps变量不是
map
,请使用以下调用函数引用:

函数映射\u recenter(映射、latlng、offsetx、offsety){。。。
请参阅此问题:

这是对我提供的答案的修改

然后,您可以像这样使用它:

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);

这是一个可行的方法。

是否可以在不渲染地图然后重新绘制地图的情况下执行此操作,即用户看不到跳转?我在onMarkerClick()上使用它。当我单击一个标记时效果很好,但是如果我使用google.maps.event.trigger(thisMark,'click');不工作……但没关系(我可以接受)…这是进行偏移的最佳解决方案。谢谢!!!漂亮而优雅的解决方案。应该在触发projection_changed事件后调用此函数,否则map.getProjection()调用将抛出js错误。google.maps.event.addListenerOnce(map,“projection_changed”,function(){map_recenter(…);});如果我使用Math.pow(2,this.map.getCameraZoom()位移非常小,为什么?这很好,但是有没有办法修改它以使用panTo而不是setCenter?如果它转换而不是跳转会很好。效果很好。谢谢!我目前正在使用iFrame在页面上加载我的地图,它有一个漂亮的白色背景框,里面有关于兴趣点的信息,这是ac吗可以使用投影法吗?是的,
map.panBy(0,-10)
将其每10px向上移动这应该是答案,比其他方法简单得多
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);