Я разработчик по имени - подумал, что мне следует поговорить о том, что мы наконец-то сделали для реализации этой функции:
Чтобы уточнить, для чего это на самом деле используется, эта база данных предназначена для поиска событий, которые могут иметь географическийlocation.
Сначала я нашел эти бесплатные данные карты: https://www.ga.gov.au/products/servlet/controller?event=GEOCAT_DETAILS&catno=60803.
Однако с этими данными было сложно работать, и мы решили просто создать базовую схему каждого из состояний с помощью Google.Функция «Мои карты» в Maps (что и сделала RMW).
Затем я создал pl / sql-реализацию функции PNPOLY и написал код поиска для запуска функции PNPOLY, сравнивая значения lat и lng каждого события с состоянием.контуры (экспортированные из «Моих карт») и возвращать события только в пределах границ.
С этим связаны две основные проблемы:
- Города / города на границе между двумя штатами иногдарассматривается как находящееся в неправильном состоянии из-за низкого разрешения контуров состояния.
- Опасение, что реализация быланеэффективный / неэлегантный (хотя не было проведено тестирование перфорации).
Эта реализация, вероятно, работала бы хорошо, за исключением первой проблемы - города появлялись в неправильном состоянии.
Текущая реализация отказывается от функции PNPOLY в пользу гораздо более простого решения.:
- Я добавил логические столбцы в таблицу событий - по одному для каждого штата / территории в Австралии.
- , когда события геокодируются, мы извлекаем название штата из API Карт Googleрезультат, а затем сравните его со списком названий штатов - если один из них соответствует, мы устанавливаем флаг для этого штата в значение ИСТИНА.
- При поиске ограничение состояния просто становится ГДЕ in_wa = TRUE (для поиска событий в Западной Австралии).
- Чтобы перенести существующие события, для которых не установлены флаги, я не хотел тратить код PNPOLY и не хотел забивать Google Maps запросами, поэтому я написал миграциюзапустить проверку PNPOLY для каждого события и установить правильный флаг для каждого события - это вызвало некоторые текущие события иметьневерное состояние установлено из-за той же проблемы, описанной выше, но это не повлияет на будущие события.
Вы можете увидеть его в действии на http://collectiveaction.com.au/events - выберите из выпадающего списка состояния и нажмите«Обновить результаты поиска».