Карты Google: программная прокрутка карты x пикселей - PullRequest
13 голосов
/ 06 марта 2012

scroll gmaps

Есть ли простой способ программной прокрутки карты Google из x пикселей?

Я могу думать только об использовании setCenter, но проблема в том, чтоЯ должен был бы вычислить новое местоположение (широта / долгота) в зависимости от уровня масштабирования ...

Можете ли вы придумать что-нибудь еще?Сказать, что это невозможно с Google Map API, - правильный ответ, если вы в этом уверены.

ps: я использую Gmaps4rails, так что если вы можете придумать способ сделать это с помощьюдрагоценный камень, это было бы круто.(например, настройка границ для подмножества карты.) Потому что в итоге моя цель - не допустить, чтобы меню скрывало некоторые маркеры.Мне нужно изменить область просмотра карты, если это имеет смысл, чтобы она помещала маркеры в оранжевую область, а не на полную карту.

fit markers


Решение:

@ Шейн Лучше всего, отлично, идея работает отлично, но я думаю, что ваше решение было для 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);

Если кто-нибудь знает о лучшем решении с API v3, расскажите нам об этом.

Ответы [ 2 ]

13 голосов
/ 06 марта 2012

Посмотрите на проекционный объект: http://code.google.com/apis/maps/documentation/javascript/reference.html#Projection

Сначала вам потребуется получить центр карты.

var point = map.getCenter();

Преобразовать значение широты в значение точки.

var pixelpoint = projection.fromLatLngToPoint(point);

Добавьте ваше значение к точечным значениям.

pixelpoint.x = pixelpoint.x + yourvalue;
//or
pixelpoint.y = pixelpoint.y + yourvalue;

Преобразуйте его обратно в лат.

var newpoint = projection.fromPointToLatLng(pixelpoint);

Установите новый центр с новым значением.

map.setCenter(newpoint);

Я не проверял выше, но это должно работать.

6 голосов
/ 27 ноября 2015

Я полагаю, вы ищете это:

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

setTimeout(function() {
    google.maps.event.removeListener(panListener)
}, 2000);

В этом случае карта перемещается на юг на 90 пикселей.

...