Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

Другие советы

Я создал автономный модуль обратного геокодирования для стран: 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'}]

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top