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

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

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

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

Ответы [ 4 ]

3 голосов
/ 08 января 2011

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

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

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

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

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

С этим связаны две основные проблемы:

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

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

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

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

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

1 голос
/ 05 декабря 2010

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

0 голосов
/ 07 октября 2014

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

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

0 голосов
/ 05 декабря 2010

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

Так что, если кто-то ищет 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);
  }

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

Приветствия,

Ив

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...