Как найти почтовый индекс по координате GPS?

StackOverflow https://stackoverflow.com/questions/918826

  •  06-09-2019
  •  | 
  •  

Вопрос

Допустим, у меня есть API веб-сервиса, который принимает почтовый индекс в качестве параметра, но у меня есть доступ только к координате GPS (широта, долгота).Как я могу динамически искать почтовый индекс, которому принадлежит координата?

Я выполняю эту работу на iPhone, так что, надеюсь, есть простой способ сделать это с помощью CoreLocation API, который я упускаю из виду в документации.

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

Решение

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

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

На этой странице представлена база данных (в формате csv) всех почтовых индексов США с указанием их широты и долготы.http://zips.sourceforge.net/

Размер распакованного файла составляет 500 тыс.Вот первые несколько строк данных:

"35004", "AL", " 33.606379", " -86.50249", "Moody", "Alabama"
"35005", "AL", " 33.592585", " -86.95969", "Adamsville", "Alabama"
"35006", "AL", " 33.451714", " -87.23957", "Adger", "Alabama"

Сбросьте эти данные в локальную базу данных.Используйте формулу Haversine для сравнения ваших координат с координатами в базе данных, чтобы найти ближайшую точку.В CoreLocation есть функция getDistanceFrom, которую вы тоже могли бы использовать.

- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location

На этой странице есть функция Haversine на c и информация о базе данных zips.

http://www.jaimerios.com/?p=39

Редактировать: Вот отличное объяснение от Google о вычислении расстояний.Он использует MySQL и PHP, но SQL для поиска ближайших точек также полезен здесь.Вероятно, было бы быстрее выполнить запрос с использованием SQL, а не функции getDistanceFrom.

http://code.google.com/support/bin/answer.py?answer=87134&topic=11364

Найдите 20 ближайших местоположений, которые находятся в радиусе 25 миль от координаты 37, -122:

SELECT id, ( 3959 * acos( cos( radians(37) ) 
 * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) 
 + sin( radians(37) ) * sin( radians( lat ) ) ) ) 
 AS distance FROM markers HAVING distance < 25 
 ORDER BY distance LIMIT 0 , 20; 

Чтобы выполнить поиск по километрам, а не по милям, замените 3959 на 6371.

Этот вид поиска называется «обратной геолокацией».

Первое, что вам нужно сделать, это преобразовать данные широты и долготы из объекта CLocation в градусы...

в функции locationManager (которая вызывается после получения обновления местоположения)....

Код:

[lat stringWithFormat:@"%+.6f", myLocation.coordinate.latitude];
[lng stringWithFormat:@"%+.6f", myLocation.coordinate.longitude];

Оттуда вы отправляете строки lat и lng на внутренний веб-сервис, такой как «GeoNames.org» или API Карт Google...и вы можете получить адрес ближайшего города или улицы.

Существует база данных переписи населения США — база данных Tiger.Я считаю, что есть возможность найти почтовый индекс по широте/долготе.

Держу пари, если вы искали Почтовый индекс Тигра возможно, ты что-нибудь найдешь.видеть здесь например.Похоже, что в CPAN есть модуль Perl, который делает это, так что это не должно быть невозможно.

Google предлагает бесплатную услугу обратного геокодирования.Вы можете использовать его напрямую или попробовать Temboo SDK, который предлагает удобный доступ на нескольких языках, включая Objective C (с примерами кода).

Проверить https://www.temboo.com/library/Library/Google/Geocoding/GeocodeByCoordinates/

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