Как получить долготу и широту для адреса улицы программно (и юридически) - PullRequest
73 голосов
/ 01 октября 2008

Предположительно, это можно получить с помощью Google Maps или другого подобного сервиса. (Только адреса в США недостаточно хороши.)

Ответы [ 15 ]

69 голосов
/ 01 октября 2008

Вы ищете термин геокодирование, и да, Google действительно предоставляет эту услугу.

22 голосов
/ 01 октября 2008

В дополнение к вышеупомянутому веб-сервису геокодирования Google существует также конкурирующий сервис , предоставляемый Yahoo . В недавнем проекте, где геокодирование осуществляется с помощью взаимодействия с пользователем, я включил поддержку обоих. Причина в том, что я обнаружил, что, особенно за пределами США, их обработка в самых непонятных местах сильно различается. Иногда у Google будет лучший ответ, иногда Yahoo.

Нужно знать, что: если Google действительно думает, что не знает, где находится ваше место, он вернет ошибку 602, указывающую на ошибку. Yahoo, с другой стороны, если он может очистить город / провинцию / штат / т. Д. От вашего неверного адреса, вернет местоположение центра этого города. Таким образом, вы должны обратить внимание на результаты, которые вы получите, чтобы увидеть, действительно ли они того, что вы хотите. В некоторых результатах есть вспомогательные поля, которые говорят вам об этом: Yahoo называет это поле «точностью», а Google - «точностью».

15 голосов
/ 01 октября 2008

Если вы хотите сделать это, не полагаясь на услугу, вы загружаете шейп-файлы TIGER из переписи населения США.

Вы ищите интересующую вас улицу, которая будет иметь несколько сегментов. Каждый сегмент будет иметь начальный адрес и конечный адрес, и вы будете интерполировать вдоль сегмента, чтобы найти, где в сегменте лежит номер вашего дома.

Это даст вам пару lon / lat.

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

Также обратите внимание, что, несмотря на то, что бесплатные данные хороши, они не идеальны - там нет последних улиц (они могут быть в данных, которые использует Google), и улицы могут в некоторой степени отклоняться от своего реального местоположения в неточности обследования. Но для 98% потребностей в геокодировании она работает отлично, бесплатна, и вы контролируете все, что сокращает зависимости в вашем приложении.

Целью Openstreetmaps является картирование всего в мире, хотя они не совсем там, но стоит следить за тем, как они предоставляют свои данные по лицензии CC

Тем не менее, во многих (большинстве?) Других странах отображаются только правительства или услуги, за которые вам нужно заплатить плату. Если вам не нужно геокодировать слишком много данных, то может быть достаточно использовать Google, Yahoo или другие бесплатные всемирные картографические сервисы.

Если вам нужно геокодировать много данных, то вам лучше всего будет взять в аренду данные карты у крупного поставщика, такого как телеатлас.

-Adam

9 голосов
/ 15 января 2009

Вы также можете попробовать OpenStreetMap NameFinder , который содержит вики-данные улиц с открытым исходным кодом (потенциально) для всего мира. NameFinder прекратит свое существование в конце августа, но Nominatim является его заменой.

7 голосов
/ 29 сентября 2009

Google требует, чтобы вы показывали карту Google с их данными, с максимальными 2,5 тыс. (Было 25 тыс.) HTTP-запросов в день. Полезно, но вы должны следить за использованием.

У них есть

http://groups.google.com/group/Google-Maps-API/web/resources-non-google-geocoders

(Google с тех пор удалил это. Если вы увидите дубликат или кеш, я ссыпаюсь на это.)

... в котором я нашел GeoNames , который имеет как загружаемую базу данных, бесплатный веб-сервис, так и коммерческий веб-сервис.

4 голосов
/ 01 октября 2008

Условия обслуживания Google позволят вам использовать их API геокодирования бесплатно, если ваш сайт, в свою очередь, будет бесплатным для пользователей. Если нет, вам придется получить лицензию на Карты предприятия.

3 голосов
/ 26 марта 2013

Для использования с Drupal и PHP (и легко модифицированными):

function get_lat_long($address) {
  $res = drupal_http_request('http://maps.googleapis.com/maps/api/geocode/json?address=' . $address .'&sensor=false');
  return json_decode($res->data)->results[0]->geometry->location;
}
2 голосов
/ 21 июля 2015

Если вы хотите сделать это в Python:

import json, urllib, urllib2

address = "Your address, New York, NY"

encodedAddress = urllib.quote_plus(address)
data = urllib2.urlopen("http://maps.googleapis.com/maps/api/geocode/json?address=" + encodedAddress + '&sensor=false').read()
location = json.loads(data)['results'][0]['geometry']['location']
lat = location['lat']
lng = location['lng']
print lat, lng

Обратите внимание, что Google, похоже, блокирует запросы, если видит больше определенной суммы, поэтому вы хотите использовать ключ API в своем HTTP-запросе.

2 голосов
/ 13 мая 2015

R Код для получения широты и долготы адреса улицы

# CODE TO GET THE LATITUDE AND LONGITUDE OF A STREET ADDRESS WITH GOOGLE API
addr <- '6th Main Rd, New Thippasandra, Bengaluru, Karnataka'  # set your address here
url = paste('http://maps.google.com/maps/api/geocode/xml?address=', addr,'&sensor=false',sep='')  # construct the URL
doc = xmlTreeParse(url) 
root = xmlRoot(doc) 
lat = xmlValue(root[['result']][['geometry']][['location']][['lat']]) 
long = xmlValue(root[['result']][['geometry']][['location']][['lng']]) 
lat
[1] "12.9725020"
long
[1] "77.6510688"
2 голосов
/ 04 марта 2009

Вы также можете сделать это с помощью веб-служб MapPoint от Microsoft.

Вот сообщение в блоге, которое объясняет, как: http://www.codestrider.com/BlogRead.aspx?b=b5e8e275-cd18-4c24-b321-0da26e01bec5

...