Обратное геокодирование без веб-доступа - PullRequest
10 голосов
/ 15 сентября 2009

Я работаю над приложением, одним из требований которого является возможность выполнять операции обратного геокодирования в реальном времени на основе данных GPS. В частности, я должен быть в состоянии определить штат / провинцию, в которой отображаются пары широты и долготы, и определить, когда мы перешли из одного штата / провинции в другой.

Пока у меня есть пара идей, но мне было интересно, есть ли у кого-нибудь какие-либо идеи по любому из следующих вопросов:

  • Каков наилучший подход для эффективного решения этой проблемы?
  • Где найти хорошее место и какой формат подходит для границ штатов / провинций Северной Америки

Для начала вот две основные идеи, которые у меня есть:

  1. Разбейте Северную Америку на сетку, где каждый прямоугольник в сетке сопоставляется с конкретной провинцией штата. Выполните поиск по этой таблице (которая растет быстрее, чем точнее вы хотели бы быть) на основе широты, а затем долготы (или наоборот).
  2. Определите полигоны для каждого из состояний и сделайте какой-нибудь расчет, чтобы определить, в каком полигоне лежит пара широта / долгота. Я не уверен, как именно это сделать. Карты изображений HTML приходят на ум как один из способов определения границ для штата / провинции.

Я работаю в Python для заинтересованных или тех, у кого может быть хорошая библиотека, которую они хотели бы предложить.

Для ясности ... У меня нет доступа в Интернет, поэтому использование существующего сервиса обратного геокодирования во время выполнения не вариант

Ответы [ 6 ]

6 голосов
/ 15 сентября 2009

Я предлагаю использовать вариант вашей первой идеи: используйте пространственный индекс . Пространственный индекс - это структура данных, построенная из прямоугольников, отображающих широту / долготу в полезную нагрузку. В этом случае вы, вероятно, сопоставите прямоугольники с парами штат-провинция. R-дерево может быть хорошим вариантом. Вот пакет R-дерева Python . Вы можете обнаружить роуминг, сравнив результаты последовательных поисков.

5 голосов
/ 22 июля 2014

Я создал автономный модуль обратного геокодирования для стран: https://bitbucket.org/richardpenman/reverse_geocode

>>> import reverse_geocode 
>>> coordinates = (-37.81, 144.96), (31.76, 35.21)
>>> reverse_geocode.search(coordinates)
[{'city': 'Melbourne', 'code': 'AU', 'country': 'Australia'},
 {'city': 'Jerusalem', 'code': 'IL', 'country': 'Israel'}]

Я посмотрю, смогу ли я добавить данные для состояний.

4 голосов
/ 15 сентября 2009

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

1 голос
/ 20 октября 2009

Вы можете получить данные по всем Соединенным Штатам из открытой карты улиц Затем вы можете извлечь необходимые данные, такие как город или штат, в любой формат, который лучше всего подходит для вашего приложения. Обратите внимание, что, хотя качество данных хорошее, оно не гарантирует полной точности, поэтому, если вам нужна полная точность, вам, возможно, придется поискать что-то еще.

1 голос
/ 15 сентября 2009

Если вы можете получить границы состояний в виде многоугольников (например, через OpenStreetMap), определение текущего состояния - это просто проверка точки в многоугольнике.

Если вам нужны адресные данные, автономным решением будет использование Microsoft Mappoint.

0 голосов
/ 15 сентября 2009

У меня есть база данных со всеми этими данными и некоторыми инструментами доступа. Я сделал мой из данных тигра переписи. Я предполагаю, что это будет в основном экспорт моей базы данных в sqlite и небольшой перевод кода.

...