Google Maps v3 getBounds выходит за рамки того, что видно на карте - PullRequest
8 голосов
/ 21 августа 2010

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

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

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

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

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

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

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

1 Ответ

18 голосов
/ 21 августа 2010

Правильно, map.getBounds() вернет границы видимой области, как показано в примере ниже. В этом примере красное поле Polyline рисуется с использованием точек 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>
...