Расширение Google Map (v3) LatLngBounds на определенное количество пикселей - PullRequest
0 голосов
/ 26 августа 2011

Я хочу взять мои текущие границы карты (например, так: var b = map.getBounds();) и расширить его на определенное количество пикселей в каждом направлении.По сути, я хочу дополнить границы 256px.Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Ответ может работать, но проблема в том, что функция

overlay.getProjection()

всегда возвращает неопределенное значение, пока не отобразится карта. Это означает, что вы не можете расширять свои границы до тех пор, пока карта не отобразится, а затем она должна быть отображена снова - дополнительная обработка и возможный дурацкий опыт для конечного пользователя.

Мне кажется, я нашел способ расширения границ на пиксели, который не требует обновления карты и может быть рассчитан до визуализации карты. Он основан на том факте, что объект bounds будет покрывать ширину карты, и мы знаем пиксели ширины карты из ее контейнера, поэтому отношение двух дает нам отношение долготы к пикселям

                // extend bounds to allow for 250 pixels of label width
                var ne = bounds.getNorthEast();
                var sw = bounds.getSouthWest();
                var lng = ne.lng();
                var diff = lng - sw.lng();
                var newlng = lng + 250 * diff / targetwidth;

                var lat = sw.lat();
                var diff2 = lat - ne.lat;
                var newlat = lat + 100 & diff2 / targetheight;

                var point = new google.maps.LatLng(newlat, newlng);
                bounds.extend(point);

                // fit the map to these bounds
                thismap.fitBounds(bounds);

Выше делает ширину и высоту. Если вы хотите расширить только ширину:

                // extend bounds to allow for 250 pixels of label width
                var ne = bounds.getNorthEast();
                var sw = bounds.getSouthWest();
                var lng = ne.lng();
                var diff = lng - sw.lng();
                var newlng = lng + 250 * diff / targetwidth;

                var lat = sw.lat();

                var point = new google.maps.LatLng(newlat, newlng);
                bounds.extend(point);

                // fit the map to these bounds
                thismap.fitBounds(bounds);

В обоих случаях переменная "targetwidth" - это числовая ширина в пикселях элемента div, содержащего карту.

HTH:)

0 голосов
/ 26 августа 2011

Вы можете попробовать что-то вроде этого:

var overlay = new google.maps.OverlayView(); 
overlay.draw = function() {}; 
overlay.setMap(map); 
var projection = overlay.getProjection();  
// Get pixels:    
var sw = projection.fromLatLngToDivPixel(bounds.getSouthWest());   
var ne = projection.fromLatLngToDivPixel(bounds.getNorthEast());    

См. Также Пользовательские оверлеи .

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