Lan*_*tus 38 google-maps google-maps-api-3
我想知道是否有可能在Google maps api v3中偏移地图的中心.我想以像素为单位控制这个偏移量,因为lat和lng似乎是错误的并且很难预测.
我只需要放置一个标记,然后将中心偏移250px,这样我就可以在地图中间放置一些其他内容.
希望有人可以帮忙!
iam*_*eed 60
在研究和发现时我发现这个问题我应该提供一个答案:
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
)));
}
Run Code Online (Sandbox Code Playgroud)
如果您的Google地图变量未map使用以下调用函数参考:
function map_recenter(map,latlng,offsetx,offsety) { ...
Run Code Online (Sandbox Code Playgroud)
Dea*_* Or 24
请参阅此问题:如何以像素为单位偏移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);
};
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
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);
Run Code Online (Sandbox Code Playgroud)
这是一个有效的例子.
小智 5
还有地图对象的 panBy 方法......您可以偏移指定数量的像素。但是,您将获得平滑的过渡动画,这可能不是您想要的。我自己也在寻找同样的东西,会让你知道我找到了什么。
| 归档时间: |
|
| 查看次数: |
25635 次 |
| 最近记录: |