Как сместить центр карты Google (API v3) в пикселях? - PullRequest
38 голосов
/ 13 августа 2010

Мне было интересно, возможно ли сместить центр карты в Google maps api v3. Я хотел бы контролировать это смещение в пикселей , поскольку по широте и долготе кажется неправильным и очень трудно предсказать

Мне просто нужно поместить маркер, а затем сместить центр на 250 пикселей, чтобы я мог разместить другой контент в центре карты.

Надеюсь, кто-то может помочь!

Ответы [ 4 ]

60 голосов
/ 23 мая 2012

Нашел этот вопрос при исследовании и подумал, что должен дать ответ:

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 maps не map, используйте следующую ссылку на функцию вызова:

function map_recenter(map,latlng,offsetx,offsety) { ...
24 голосов
/ 26 сентября 2012

См. Этот вопрос: Как сместить центр карт 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);

Вот рабочий пример .

4 голосов
/ 13 августа 2010

Посмотрите на объект MapCanvasProjection - http://code.google.com/apis/maps/documentation/javascript/reference.html#MapCanvasProjection

. Вы можете получить центр карты latLng (map.getCenter ()), а затем преобразовать его в пиксельные координаты контейнера с помощью fromContainerPixeltoLatLng ()

3 голосов
/ 24 марта 2011

есть также метод panBy объекта карты ... вы можете сместить на указанное количество пикселей.Однако вы получите плавную анимацию перехода, которая может оказаться не такой, как вы хотели.Я сам ищу то же самое, дам вам знать, что я нахожу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...