Получите неограниченные границы карты в Google Maps API V3 - PullRequest
5 голосов
/ 09 марта 2012

Если вы уменьшите масштаб карты Google, мир начнет повторяться по горизонтали.Использование .getBounds (), кажется, возвращает долготу по краям отображаемого изображения карты.Но я хотел бы получить минимальную и максимальную долготы для текущего представления реального мира.

Например, в этом изображении .getBounds () говорит, что долгота колеблется между 116 и 37 градусами (давая ширину -79 градусов!).Диапазон, который я ищу, составляет от -244 до +37.(или даже от -180 до +37, так как это крайности мира, видимого вокруг центра карты.)

google-map-bounds1

И еще один пример.Здесь я ищу от -180 до +180 ... google-map-bounds2

Вы можете попробовать сами здесь ... http://jsfiddle.net/spiderplant0/EBNYT/

(Извините, если на этот вопрос уже был дан ответ- Я нашел несколько старых похожих вопросов, но ни один из них не дал удовлетворительных ответов).

Ответы [ 3 ]

2 голосов
/ 26 марта 2012

Сегодня я столкнулся с теми же проблемами, но, думаю, наконец-то понял.

В первом сценарии выше вы можете использовать map.getBounds (). ToSpan (), чтобы получить ширину в долготе..... до тех пор, пока карта не будет развернута.

Для второго сценария, в котором карта вращается, я расширил google.maps.OverlayView(), чтобы получить объект google.maps.MapCanvasProjection.Оттуда вы можете вызвать функцию getWorldWidth().

. Она даст вам ширину мира в пикселях, затем вы сможете сравнить ее с шириной контейнера вашей карты.Если ваш контейнер больше, ваша карта обернута вокруг.

Не знаю, предназначена ли функция для этого, но она работает.

1 голос
/ 19 июня 2012

Ответ, предложенный пользователем 129993, работал для меня (Google map api V3)

Расширение google.maps.OverlayView ()

function MyMapOverlay() {}
MyMapOverlay.prototype = new google.maps.OverlayView();
MyMapOverlay.prototype.onAdd = function() {};
MyMapOverlay.prototype.draw = function() {};
MyMapOverlay.prototype.onRemove = function() {};

Добавить наложение на карту

var map = new google.maps.Map(domContainer, {...});
var overlay = new MyMapOverlay();
overlay.setMap(map);

проверь, оборачивается ли карта:

var proj = overlay.getProjection();
var wwidth = 0;
if (proj) wwidth = proj.getWorldWidth();
var mapsWrapsAround=false;
if (__wwidth > 0 && __wwidth < domContainer.width()) mapsWrapsAround = true;
0 голосов
/ 02 ноября 2016

Я использовал ответ от rebpp, чтобы предотвратить наложение карты, установив getWorldWidth. Вот созданное мной MapWrappingPrevent.

Чтобы использовать это просто позвоните

 var wrapPreventer = new MapWrappingPrevent(_map);

        /* This class prevents wrapping of a map by adjusting the max-width */
        function MapWrappingPrevent(map) {
            var self = this;
            this.setMap(map);
            map.addListener('zoom_changed', function () {
                self.onZoomChanged();
            });
        }
        MapWrappingPrevent.prototype = new google.maps.OverlayView();
        MapWrappingPrevent.prototype.onAdd = function () { this.onZoomChanged(); };
        MapWrappingPrevent.prototype.draw = function () { };
        MapWrappingPrevent.prototype.onRemove = function () { };
        MapWrappingPrevent.prototype.onZoomChanged = function () {
            var proj = this.getProjection();
            if (proj) {
                var wrappingWidth = proj.getWorldWidth();
                $(this.getMap().getDiv()).css({'max-width': wrappingWidth + 'px'})
            }
        };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...