





Вы можете взглянуть на GeoLite City. Он бесплатный (GPL), но говорят, что не самый точный.
Over 99.5% on a country level and 79% on a city level for the US within a 25 mile radius
Это все еще может подойти вам, в зависимости от ваших потребностей.
Google Maps API поддерживает геокодирование и Python Cookbook имеют простой пример для доступа к нему из Python (хотя рецепт не использует API напрямую, а только простые URL-адреса maps.google.com).
И у Google, и у Microsoft есть API, к которым очень легко подключиться. Есть некоторые ограничения, но они довольно щедры. Вы также можете посмотреть http://geocoder.us/. Мне не известно о каких-либо бесплатных сервисах геокодирования, которые были бы полезны (и я потратил время на поиски!)
Geopy позволяет выбирать из нескольких геокодеров (включая Google, Yahoo, Virtual Earth).
Вы можете использовать веб-API, например карты Google, чтобы найти координаты. Затем, если вам просто нужно рассчитать расстояния (по прямой), вы можете применить есть формула, чтобы получить довольно точные результаты.
Геокодер USC WebGIS (https://webgis.usc.edu) бесплатно. У него есть API, которые вы можете вызывать из скриптов или загружать и обрабатывать базы данных (mdb, csv и т. д.). Уровни точности зависят от того, где находятся ваши адреса. Например, в округе Лос-Анджелес доступны центроиды участков, а в других частях страны - только TIGER / Lines. Карта покрытия источников справочных данных в настоящее время недоступна, но находится в разработке. Базовые инструменты планируется открыть с открытым кодом в будущем, как только будет завершена новая разработка.
На днях наткнулся на http://www.geonames.org/. Фактически вы можете загрузить все данные для почтовых индексов, включая широту / долготу и т. д., Даже для коммерческого использования, чтобы избежать необходимости подключаться к внешним источникам. Я думаю, что вы можете сделать то же самое для названий городов (данные почтового индекса уже связаны с названиями подрубрик).
Немного математики о нахождении расстояния «Как летит ворона» - прямо от точки к точке можно найти здесь и здесь (пример .NET).
Вы можете лучше посмотреть в модуле Geopy, и его стоит использовать, так как он содержит карту Google, геокодеры карты Yahoo, с помощью которых вы можете реализовать геокодирование.
Веб-сервис Google очень прост в использовании. Просто введите запрос в URL-адрес. Чтобы было еще проще / ленивее, я беззастенчиво рекламирую пигеокодер, оболочку Python для Google Geocoding. Тогда вы можете просто сделать что-нибудь вроде
print Geocoder.geocode("Montreal, Canada")[0].coordinates
чтобы получить кортеж с координатами. Вы также можете делать такие вещи, как
Geocoder.geocode("sushi, San Francisco").count
или же
Geocoder.geocode("sushi, San Francisco")[0].postal_code
Xster, похоже, ваша библиотека не работает, когда геокодирование адресов, содержащих диакритические знаки ("éèôœö"), не возвращает результатов. Я полагаю, это потому, что он кодирует их urlencodes, а Google принимает эти символы как есть.
Те из нас, кто не использует Python, но все еще интересуется геокодированием, будут рады получить более широкие ответы.