Отображение маркеров внутри ограничительной рамки с помощью Google Maps API v3 - PullRequest
0 голосов
/ 26 апреля 2011

Я хочу отобразить список маркеров, которые находятся внутри ограничительной рамки карты. У меня работает базовая реализация, которая перехватывает событие карты «bounds_changed» и запускает запрос AJAX на мой сервер с координатами широты / долготы юго-западного и северо-восточного углов карты. Это работает для большинства сценариев, однако я обнаружил, что эта реализация нарушается, если пользователь перемещается слишком далеко на восток / запад.

Например, допустим, ограничивающая рамка изначально начинается как целый мир (юго-западный угол: [-90, -180], северо-западный угол: [90, 180]). Затем, если пользователь поворачивается на запад на 180 градусов, ограничивающая рамка становится [-90, -360] / [90, 0]. Это нарушает мой AJAX-запрос, потому что, хотя пользователю все еще виден весь мир, любые маркеры с долготой> 0 не будут возвращены моим запросом к базе данных.

Какой лучший способ справиться с этим?

1 Ответ

2 голосов
/ 28 апреля 2011

Самый простой способ сделать это - проверить значения широты и долготы при их получении, и если они больше, чем широта и долгота реального мира, вы просто убедитесь, что их соответствующие значения находятся в диапазоне [-90; 90] для долготы и [-180; 180] для долготы.

В качестве примечания: если вы хотите сэкономить на всех вызовах ajax, вы можете сделать это с помощью javascript. В классе google.maps.LatLngBounds есть метод с названием contains, который проверяет, находится ли данный latlng в границах. Затем вы просто сохраните все свои маркеры в массиве при инициализации сайта, а затем выполните итерации по ним, когда пользователь выполнит панорамирование, и установите для его свойства visible значение true, если они находятся в текущих границах. Вы можете получить текущие границы, вызвав getBounds () для вашего экземпляра карты.

Использование метода map.getBounds (). Contains () также решит вашу проблему, не беспокоясь о том, будет ли пользователь панорамировать слишком далеко, так как API справится с этим за вас.

...