Как получить долготу и широту для уличного адреса программно (и юридически)

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

Ответ 2

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

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

Ответ 3

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

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

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

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

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

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

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

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

-Adam

Ответ 4

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

Ответ 5

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

У них есть

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

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

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

Ответ 6

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

Ответ 7

Для использования с 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;
}

Ответ 10

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"

Ответ 11

Если вы хотите сделать это в 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-запросе.

Ответ 12

У меня была партия из 100 000 записей, которые были геокодом и попали в пределы API Google (и поскольку это было для внутреннего корпоративного приложения, нам пришлось обновить их премиум-сервис, который составляет $10 тыс. плюс)

Итак, я использовал это вместо: http://geoservices.tamu.edu/Services/Geocode/BatchProcess/ - у них также есть API. (общая стоимость около ~ 200 $)

Ответ 13

Вы можете попробовать это на JavaScript для города, например kohat

var geocoder = new google.maps.Geocoder();
var address = "kohat";
geocoder.geocode( { 'address': address}, function(results, status) {
var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();
alert(latitude+" and "+longitude);
  } 
});

введите описание изображения здесь

Ответ 14

В python с использованием geopy PyPI используется для получения широты, долготы, почтового индекса и т.д. Вот рабочий пример кода.

from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent="your-app-id")

location = geolocator.geocode("Your required address ")

if location:
    print('\n Nominatim ADDRESS :',location.address)
    print('\n Nominatim LATLANG :',(location.latitude, location.longitude))
    print('\n Nominatim FULL RESPONSE :',location.raw)
else:
   print('Cannot Find')

В Nominatim - некоторые адреса не могут работать, поэтому я просто попробовал MapQuest.
Возвращается правильно. Mapquest предоставляет 15000 транзакций в месяц по бесплатному плану. Мне этого достаточно.

Образец кода:

import geocoder
g = geocoder.mapquest("Your required address ",key='your-api-key')

for result in g:
   # print(result.address, result.latlng)
   print('\n mapquest ADDRESS :',result.address,result.city,result.state,result.country)
   print('\n mapquest LATLANG :', result.latlng)
   print('\n mapquest FULL RESPONSE :',result.raw)

Надеюсь, поможет.