Вопрос
У меня есть база данных адресов, и я попытался найти широту и долготу, используя геокодирование Google и API Yahoo . Существуют ли какие-либо другие популярные API или программы. Я использую платформу Ubuntu. Р>
Решение
Мне известна по крайней мере одна другая система геокодирования, OpenStreetMap . Единственное существенное различие, которое я обнаружил с любым из этих API - это уровень детализации каждого из них. OpenStreetMap содержит значительно меньше данных, но его гораздо проще интегрировать с пользовательскими данными. Кроме того, я думаю, что карты, созданные Google, являются самыми красивыми из трех.
Другие советы
Я обычно использовал службу геокодирования Карт Google по HTTP, которая возвращает вам Json или XML, как вам нравится. Просмотрите здесь для получения дополнительной информации об этом.
Другим вариантом может быть GeoNames.org . Он также предоставляет некоторые интересные сервисы и клиентские библиотеки.
С обоими из тех, о которых вы упомянули, если вы массово их обрабатываете или не показываете карту пользователю во время запроса API, вы нарушаете TOS.
Лучшим решением для удовлетворения ваших потребностей было бы что-то вроде LiveAddress . На самом деле я работаю в SmartyStreets , где мы сами его разрабатываем - нет никаких лицензионных ограничений, которые бы помешали вам запустить даже миллионы адресов. Помимо возврата координат, LiveAddress также проверит наличие адресов и стандартизирует их для вас. Это полезно для удаления дубликатов и имеет много деловых преимуществ.
Если у вас возникнут дополнительные вопросы, связанные с адресом, я с удовольствием помогу вам.
Вы также можете найти geocoder.us полезным.
Используя YQL, вы можете получить список возможных прогнозов. Первый шаг: Обратное геокодирование
SELECT woeid
FROM geo.places
WHERE text="##LATITUDE##, ##LONGITUDE##"
затем примените фильтр, чтобы упорядочить результаты по placeType. Это поможет вам упорядочить прогноз по точности уровня карты (город, город, почтовый индекс, регион, ....)
SELECT woeid
FROM geo.places
WHERE text="##LATITUDE##, ##LONGITUDE##" |
SORT(field="placeTypeName.code")
Теперь используйте simile join, чтобы получить все прогнозы по woeid, полученному в результате последнего запроса, и отфильтровать нулевые результаты
SELECT channel
FROM weather.woeid
WHERE w in (
SELECT woeid
FROM geo.places
WHERE text="##LATITUDE##, ##LONGITUDE##" |
SORT(field="placeTypeName.code"))
AND channel.