У вас есть два основных варианта:
Использовать службу обратного геокодирования
- Google можно использовать только в сочетании со встроенной Картой Google на той же странице, поэтому я не рекомендую ее, если вы этим не занимаетесь.
- У Yahoo есть хороший, см. http://developer.yahoo.com/search/local/V3/localSearch.html
- Я не использовал OpenStreetMap. Их карты выглядят очень подробными и подробными, и они постоянно улучшаются, но я бы беспокоился о задержке и надежности, а также о том, являются ли их адресные данные полными (адресные данные не видны непосредственно на карте, а OpenStreetMap - это, прежде всего, интерактивная карта. ).
Используйте карту почтовых индексов
Перепись США публикует карту почтовых индексов США здесь . Они строят это из своей наименьшей статистической единицы - блока переписи, который в большинстве случаев соответствует городскому кварталу. Для каждого блока они находят, какой почтовый индекс наиболее распространен в этом блоке (большинство блоков имеют только один почтовый индекс, но у блоков вблизи границы между почтовыми кодами может быть больше одного). Затем они объединяют все блоки с заданным почтовым индексом в одну область, называемую областью табуляции почтового индекса. Они публикуют карту этих областей в формате шейп-файла ESRI.
Я знаю об этом, потому что я написал библиотеку Java и веб-сервис, который (помимо прочего) использует эту карту для возврата почтового индекса для заданной широты и долготы. Это коммерческий продукт, поэтому он будет не для всех, но он быстрый, простой в использовании и решает эту конкретную проблему без API. Вы можете прочитать об этом продукте здесь:
http://askgeo.com/database/UsZcta2010
А обо всех ваших географических предложениях здесь:
http://askgeo.com
В отличие от решений для обратного геокодирования, которые доступны только в виде веб-API, поскольку запуск собственной службы будет чрезвычайно сложным, вы можете запустить эту библиотеку на своем собственном сервере и не зависеть от внешнего ресурса.