2008-10-01 3 views

ответ

65

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

+1

Отлично!Раздел «Геокодирование через HTTP», похоже, является тем, что я ищу. – 2008-10-01 16:35:39

+3

Просто убедитесь, что вы соблюдаете правила использования. Я думаю, Google только позволяет использовать это, если вы показываете местоположения на карте Google. Запрещается использовать его для других целей, но вы должны проверить правила лицензии и использования. – peSHIr 2012-11-05 13:54:55

+0

v2 (устаревший с 2010 года) полностью закрывается всего за несколько месяцев (май 2013 года), поэтому рекомендуем больше не создавать ничего нового с этим! – Funka 2013-01-09 20:16:16

2

Вы можете посмотреть на API Документов Google Maps здесь, чтобы получить старт на этом:

http://code.google.com/apis/maps/documentation/services.html#Geocoding

Это также, кажется, что-то, что вы можете сделать для международных организаций с использованием живых карт также:

http://virtualearth.spaces.live.com/blog/cns!2BBC66E99FDCDB98!1588.entry

14

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

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

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

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

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

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

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

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

-Adam

+0

Это не сработает (для этого вопроса, в общем, это хорошо для США), поскольку вопрос уже заявляет что решение, которое работает только для адресов в США, не будет приемлемым решением. – peSHIr 2009-10-16 09:51:36

22

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

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

4

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

9

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

7

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

Они имеют

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

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

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

3

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

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

Если вы хотите, чтобы это сделать в 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, похоже, ottle, если он видит больше определенной суммы, поэтому вы хотите использовать ключ API в своем HTTP-запросе.

1

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

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

0

Вы можете попробовать это в JavaScript для города, как КОХАТ

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); 
    } 
}); 

enter image description here

 Смежные вопросы

  • Нет связанных вопросов^_^