2010-08-25 5 views
17

Я хочу получить почтовый индекс от текущего местоположения пользователей (Широта, Долгота), я использовал методы делегирования MKReverse Geocoder, но иногда я не могу получить информацию о почтовом индексе на основе широты & долготы (действительные значения). Существуют ли другие альтернативы для MKReverseGeocoder? База данных ZipCode специфична для стран, поэтому я не хочу их использовать. Любая другая идея или подсказка?Получите почтовый индекс от широты, долготы?

Благодаря

+2

базы данных ZipCode специфичны, да страна; но zipcodes также являются специфичными для страны (например, США не имеют того же формата почтового индекса, что и Нидерланды или Великобритания). Вам нужно будет заниматься этим так или иначе, если вы хотите использовать zipcodes. – Piskvor

ответ

34

Рассмотрите GeoNames web service. Это полный набор геокодирования/обратного геокодирования в соответствии с лицензией на использование Creative Commons. Вы можете либо загружать свои данные, либо ударять по их веб-сервису. Лучше всего, они не требуют каких-либо ключей API или глупости лицензирования - вы просто нажимаете на свое веб-приложение и пытаетесь получить данные.

Вот пример: http://ws.geonames.org/findNearbyPostalCodesJSON?formatted=true&lat=36&lng=-79.08 Это вернет вам объект JSON для почтовых индексов вокруг Chapel Hill, NC area.

Это также международный. Вот Seaford, Англия, и единственная разница - это пара lat/lng, которую я отправляю: http://ws.geonames.org/findNearbyPostalCodesJSON?formatted=true&lat=50.5&lng=0.08

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

+0

спасибо, это то, что я ищу. Спасибо. – Matrix

+0

Для коммерческого использования, это немного дорого (со временем). Это не бесплатно для этого, вот их руководство: http://www.geonames.org/commercial-webservices.html. Извините, что обнародовал эту новость для ... –

+4

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

1

EDIT:

Пара других вариантов я видел в последнее время:

http://developer.yahoo.com/geo/placefinder/guide/index.html

http://jamiethompson.co.uk/projects/2010/04/30/an-open-free-uk-postcode-geocoding-web-service/

http://www.postcodeanywhere.co.uk/geocoding-service/api.aspx

-

Взгляните на Google Maps API - Reverse Geocoding (полезно только при вставке результатов в интерфейс Google Maps).

+1

Я прошел через это, но не нашел никакого связанного с почтовым индексом – Matrix

+1

. Служба обратного геокодирования Google может использоваться только совместно со встроенной Картой Google. –

2

Если у вас есть свободный дб (доступный от этого сайта? Просто поиск по базе данных почтового индекса, и вы увидите его)

, то вы можете запустить внутреннее тестирование SQL запросов для близлежащих LAT/долгот. Таким образом вам не придется беспокоиться о лицензировании веб-службы.

У вас есть три варианта. SQL BETWEEN, уравнение гипотенузы или Haversine. Хэверсин - лучший, к счастью, это учебник в другом месте

+1

Зачем голосовать? Серьезно, вы хотите, чтобы я сделал математику? Я использую эту технику на работе, она позволяет делать это без использования онлайн-кодера. Это решило проблему для нас, она работает, и все же вы проголосовали за меня, потому что вы слишком ленивы, чтобы протестировать четыре неравенства, если кто-то не написал код для вас? Здесь: если x lat - диапазон, то же самое долго. Ответы на ваш вопрос –

+0

Как это обрабатывать эти базы данных, как правило, центральный латинский почтовый индекс? Вам понадобится база данных всех регионов всех почтовых индексов (в, скажем, GeoJSON), и вам понадобится база данных, которая будет понимать запросы GeoJSON по точкам в регионе (которых их мало). Haversine и SQL BETWEEN, похоже, дадут вам очень приблизительный ответ, если я не упущу что-то. –

+0

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

6

Это на самом деле сложный вопрос. Использование решения геокодирования, такого как GeoNames, может привести к серьезным ошибкам для большого количества запросов. Причиной этого является то, что GeoNames, просматривая запись в своей базе данных, которая ближе всего к вашей точке запроса, а затем возвращает ZIP-код, который у них есть на записи для этой точки. Это отлично работает, когда ваш запрос находится прямо над записью в своей базе данных, но может привести к ошибкам в противном случае. Например, если их ближайшая запись находится в нескольких кварталах от другого почтового индекса, вы получите неправильный ответ.

Бюро переписи населения США созданы карты кодов ZIP:

https://www.census.gov/geo/reference/zctas.html

Пожалуйста, смотрите свои записи на этой странице.

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

http://askgeo.com

Мы предлагаем как веб-API и библиотеки Java, что вы можете работать на вашем собственном сервере. Библиотека имеет отличную производительность. Так как наш сайт предлагает дополнительную информацию, чем просто почтовый индекс, вы можете прочитать о нашем сервисе ZIP код здесь:

http://askgeo.com/database/UsZcta2010

А вы читали о документации для Web API здесь:

http://askgeo.com/#web-api

Методология GeoNames в корне ошибочна для этого типа запросов. Если вы ищете многоугольник, содержащий заданную точку запроса, вам нужна карта с полигонами, и вам нужен пространственный указатель для быстрого поиска. В GeoNames нет ни одного. У AskGeo есть оба.

+0

Geonames кажется отличным, хотя, если я хочу перейти с ZipCode -> Lat/Long. – Walker

+1

URL-адрес переписи изменился. Это кажется правильным: https://www.census.gov/geo/reference/zctas.html –

+1

Я боюсь, что это ограничивается только США. Наверное, в этом мире есть много других стран. –

Смежные вопросы