Координаты широты и долготы австралийских штатов/территорий для базы данных с использованием Google Maps

У нас есть база данных с поиском на основе местоположения с использованием API Google Maps. Однако поиск по штатам или территориям в Австралии проблематичен, потому что Google Maps находит их в центре штатов, а большинство населенных пунктов в Австралии находится на побережье.

Нам нужно передать код с широтой и долготой, чтобы, например, когда кто-то ищет штат NSW, база данных возвращала соответствующие результаты. Кто-нибудь знает, где найти список координат границ австралийских штатов и территорий для кодирования в базе данных?

Это сэкономит нашему занятому программисту много времени. Заранее спасибо.


person RMW    schedule 05.12.2010    source источник


Ответы (4)


Меня зовут разработчик, и я подумал, что должен рассказать о том, что мы наконец сделали для реализации этой функции:

Чтобы уточнить, для чего это на самом деле используется, эта база данных предназначена для поиска событий, которые могут иметь географическое местоположение.

Сначала я нашел эти бесплатные данные карты: https://www.ga.gov.au/products/servlet/controller?event=GEOCAT_DETAILS&catno=60803.

Однако с данными было трудно работать, и мы решили просто создать базовую схему каждого из штатов, используя функцию «Мои карты» Google Maps (что и сделала RMW).

Затем я создал pl/sql-реализацию функции PNPOLY и написал код поиска для запуска функции PNPOLY, сравнивающей широту и долготу каждого события с контурами состояния (экспортированными из Моих карт) и возвращающими события только в пределах границ.

При этом было 2 основные проблемы:

  • Города на границе двух штатов иногда воспринимались как находящиеся в неправильном состоянии из-за низкого разрешения контуров штата.
  • Обеспокоенность тем, что реализация была неэффективной/неэлегантной (хотя тестирование производительности не проводилось).

Эта реализация, вероятно, работала бы нормально, за исключением первой проблемы — города появлялись в неправильном состоянии.

Текущая реализация отказывается от функции PNPOLY в пользу гораздо более простого решения:

  1. Я добавил логические столбцы в таблицу событий — по одному для каждого штата/территории в Австралии.
  2. когда события геокодируются, мы извлекаем название штата из результатов Google Maps API, а затем сравниваем его со списком названий штатов — если они совпадают, мы устанавливаем флаг для этого штата в значение TRUE.
  3. При поиске ограничение состояния просто становится WHERE in_wa = TRUE (для поиска событий в пределах Западной Австралии).
  4. Чтобы перенести существующие события, для которых не были установлены флаги, я не хотел тратить код PNPOLY и не хотел забивать Google Maps запросами, поэтому я написал миграцию для запуска проверки PNPOLY по каждому событию. и установите правильный флаг для каждого события - это привело к тому, что некоторые текущие события имели неправильное состояние из-за той же проблемы, описанной выше, но это не повлияет на будущие события.

Вы можете увидеть его в действии на странице http://collectiveaction.com.au/events — выберите из штата раскрывающемся списке и нажмите «Обновить результаты поиска».

person Brenton Fletcher    schedule 08.01.2011

Границы австралийских штатов можно загрузить в OpenStreetMap в виде XML-файла. Просто имейте в виду, что лицензия на данные требует, чтобы вы делились производными работами.

person Jaime Soto    schedule 05.12.2010
comment
Спасибо Хайме. Надеюсь, одно из этих решений решит проблему. - person RMW; 05.12.2010

Делюсь своей сутью: XML полигонов состояний. Однако для некоторых состояний у него слишком много точек, и это может стать убийцей производительности, например, если вам нужно сопоставить точку с состояниями. Если вам нужна простая версия, вы можете попробовать использовать этот инструмент для самостоятельного создания координат многоугольника.

Надеюсь, это поможет решить чью-то боль.

person David Lin    schedule 07.10.2014

Просто идея, может ли на самом деле иметь массив javascript с именами штатов и соответствующей латлонгой, которую вы хотите центрировать на карте?

Так что если кто-то ищет NSW, то вы загружаете -33.833578,151.190872.

  function initialize() {
    var myLatlng = new google.maps.LatLng( -33.833578,151.190872);
    var myOptions = {
      zoom: 8,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
  }

Дайте мне знать, если это поможет. В противном случае вы можете связаться со мной, так как я в Аделаиде :)

Ваше здоровье,

Айвз

person Ives.me    schedule 05.12.2010
comment
Спасибо за это, я спрошу у разработчика (который, кстати, бывший Аделаида). - person RMW; 05.12.2010