Google Maps v3 getBounds выходит за рамки того, что видно на карте

По какой-то причине функция getBounds() для Google Maps v3, кажется, расширяется намного дальше, чем то, что на самом деле показывает карта. Поправьте меня, если я ошибаюсь, но разве он не должен возвращать координаты широты и долготы СВ (верхний правый угол) и ЮЗ (нижний левый угол) для самых углов того, что отображается в текущем представлении?

Я возвращаю результаты поиска (которые отображаются с помощью широты и долготы), которые находятся между этими координатами, и мне возвращаются результаты намного дальше от области, возвращаемой getBounds(). Любые идеи о том, что может происходить здесь?

Просто к вашему сведению, я получаю ограничения на событие простоя карты:

google.maps.event.addListener(map, 'idle', function() {

var bounds = map.getBounds();
var NE = bounds.getNorthEast();
var SW = bounds.getSouthWest();

... и используя .lat() и .lng() для получения координат соответствующих углов. Затем я передаю это SQL-запросу, который проверяет результаты между этими координатами. Результаты находятся в общей области, но могут выходить далеко за пределы того, что на самом деле показано на карте.

Любые идеи приветствуются! Спасибо!


person Ryan    schedule 21.08.2010    source источник
comment
ПРИМЕЧАНИЕ. На самом деле это произошло из-за гораздо более глубокой ошибки, когда некоторые маркеры отображались / не отображались и были привязаны к неправильному результату поиска. Google, конечно же, выдавал правильные результаты.   -  person Ryan    schedule 22.08.2010


Ответы (1)


Правильно, map.getBounds() вернет границы видимой области, как показано в примере ниже. В этом примере с помощью точки map.getBounds() при возникновении события idle.

Ваш SQL-запрос может не возвращать результаты, которые вы ищете, и, возможно, его нужно просмотреть еще раз.

<!DOCTYPE html>
<html>
<head>
<title>Bounds Box</title>
<script type="text/javascript"
    src="http://maps.google.com/maps/api/js?sensor=false">
</script>
<script type="text/javascript">
      function initialize() {

        var latlng = new google.maps.LatLng(30.405865,-87.283362);
        var myOptions = {
          zoom: 8,
          center: latlng,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById("map_canvas"),
            myOptions);
        var viewportBox;

        google.maps.event.addListener(map, 'idle', function(event) {
            var bounds = map.getBounds();

            var ne = bounds.getNorthEast();
            var sw = bounds.getSouthWest();

            var viewportPoints = [
                ne, new google.maps.LatLng(ne.lat(), sw.lng()),
                sw, new google.maps.LatLng(sw.lat(), ne.lng()), ne
            ];
            /*strokeOpacity = 0 , if don't want to show the border moving. */
            if (viewportBox) {
                viewportBox.setPath(viewportPoints);
            } else {
                viewportBox = new google.maps.Polyline({
                    path: viewportPoints,
                    strokeColor: '#FF0000',
                    strokeOpacity: 1.0,
                    strokeWeight: 4 
                });
                viewportBox.setMap(map);
            };

            var info = document.getElementById('info');
            info.innerHTML = 'NorthEast: ' + ne.lat() + '   ' + ne.lng() + 
                '<br />' + 'SouthWest: ' + sw.lat() + '   ' + sw.lng();
        });
      };
</script>
</head>
<body onload="initialize()">
  <div id="map_canvas" style="width:500px; height:500px"></div>
  <div id="info"></div>
</body>
</html>
person Eric C    schedule 21.08.2010
comment
Да, на самом деле это была другая ошибка с маркерами, которая меня запутала. Хорошая демонстрация для демонстрации границ, спасибо. - person Ryan; 22.08.2010
comment
@ Райан, ты нашел ошибку с маркерами? У меня такая же проблема! - person Christian Benseler; 16.07.2015