Google Maps v3 определяет, какие состояния находятся в пределах границ кругового наложения

Есть ли способ определить, какие штаты находятся в круговых наложениях, созданных google.maps.Circle? Возможно, используя обратное геокодирование и getBounds или contains? Предоставляет ли Google способ сделать это (используя геокодер или какой-либо другой метод) или необходимо использовать базу данных точек широты и долготы штатов?


person trs    schedule 07.07.2011    source источник


Ответы (1)


Кажется, нет простого способа сделать это в API Карт Google.

Вы можете использовать getBounds(), чтобы получить объект LatLngBounds, приближающийся к кругу. Обратите внимание, что getBounds() вернет прямоугольник, который приближается к кругу, поэтому вы можете получить неточные результаты. Чтобы сделать это более точно, вам нужно вычислить кучу точек, чтобы аппроксимировать круг, используя что-то вроде формулы Хаверсина в сочетании с центром и радиусом круга. Чем больше точек вы подсчитаете, тем точнее будет аппроксимация.

Когда у вас есть набор ограничивающих точек, вы все еще не совсем в безопасности. Похоже, что нет способа использовать Google Geocoder API для возврата всех состояний в файле LatLngBounds. Таким образом, вам придется вычислить еще кучу точек в пределах границ и отправить для них отдельные запросы обратного геокодирования. И вы все еще можете пропустить штат или два. В общем, хуйня.

Другой подход, который не кажется мне более привлекательным, но кто знает: для каждого штата получить данные широты/долготы для набора прямоугольных границ, которые, когда все вместе, аппроксимируют форму штата. Для каждого состояния используйте intersects(), чтобы увидеть, пересекается ли оно с вашим кругом.

Могут быть и другие возможности, связанные с Google Maps API или другими технологиями, в зависимости от вашего варианта использования.

person Trott    schedule 08.07.2011