Google地图:以x像素编程方式滚动地图

Rob*_*bin 13 scroll google-maps google-maps-api-3 gmaps4rails

滚动gmaps

有一种简单的方法以编程方式滚动谷歌地图的x像素?

我只能考虑使用setCenter,但问题是我必须根据缩放级别计算新位置(lat/lng)...

你能想到别的吗?告诉我,如果您对此非常肯定,使用Google Map API是不可能的.

ps:我正在使用Gmaps4rails,所以如果你能想到用宝石做到这一点的方法,它会很酷.(比如将边界调整为地图的子集.)因为最终我的目标是阻止菜单隐藏一些标记.我需要更改地图的视口,如果这是有意义的,那么它使标记适合橙色区域,而不是完整的地图.

适合的标记


解:

@Shane Best,很棒,这个想法很完美,但我认为你的解决方案适用于Google API v2,对吗?这是我为V3做的:

var point = map.getCenter();

var overlay = new google.maps.OverlayView();
overlay.draw = function() {};
overlay.setMap(map);

var projection = overlay.getProjection();

var pixelpoint = projection.fromLatLngToDivPixel(point);
pixelpoint.x += my_value; # or .y

point = projection.fromDivPixelToLatLng(pixelpoint);

map.setCenter(point);
Run Code Online (Sandbox Code Playgroud)

如果有人知道有关API v3的更好的解决方案,请告诉我们.

Sha*_*est 13

看一下投影对象:http: //code.google.com/apis/maps/documentation/javascript/reference.html#Projection

首先,您需要获得地图的中心.

var point = map.getCenter();
Run Code Online (Sandbox Code Playgroud)

将latlng转换为点值.

var pixelpoint = projection.fromLatLngToPoint(point);
Run Code Online (Sandbox Code Playgroud)

将您的值添加到点值.

pixelpoint.x = pixelpoint.x + yourvalue;
//or
pixelpoint.y = pixelpoint.y + yourvalue;
Run Code Online (Sandbox Code Playgroud)

将其转换回latLng.

var newpoint = projection.fromPointToLatLng(pixelpoint);
Run Code Online (Sandbox Code Playgroud)

使用新值设置新中心.

map.setCenter(newpoint);
Run Code Online (Sandbox Code Playgroud)

我没有测试过上面但它应该工作.


小智 7

我相信你在寻找这个:

var panListener = google.maps.event.addListenerOnce(map, 'bounds_changed', function(event) {
                    map.panBy(0,-90);
                });

setTimeout(function() {
    google.maps.event.removeListener(panListener)
}, 2000);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它将地图向南移动90px.