2008-09-19 4 views
66

Как я могу перевести адрес или город на широту/долготу? Есть ли коммерческие наряды, на которых я могу «арендовать» эту услугу? Это будет использоваться в коммерческом настольном приложении на ПК с ОС Windows с полным доступом в Интернет.Как преобразовать адрес в широту/долготу?

+1

кажется дублирующим http://stackoverflow.com/questions/158474/how-to-obtain-longitude-and-latitude-for-a-street-address-programmatically-and-l – Guillaume 2009-01-15 09:41:45

+5

Кристиан: * Точка Latitude * написана правильно. См .: http://en.wikipedia.org/wiki/Latitude – 2011-07-09 18:30:23

ответ

44

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

http://googlemapsapi.blogspot.com/2006/06/geocoding-at-last.html

Они обеспечивают онлайн геокодирования (через JavaScript):

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

Или бэкэнд геокодирования (через запрос HTTP):

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

Данные, как правило, то же самое используется Картами Google. (обратите внимание, что есть некоторые исключения из этого, например, в Великобритании или Израиле, где данные из другого источника и имеют несколько пониженное качество).

+0

эй, это круто. спасибо, что указали это. – 2008-09-19 00:58:36

+21

Обратите внимание на следующие вопросы из Карт Google: «... и обратите внимание, что использование геокодирования для любых целей, кроме получения местоположений, которые будут отображаться с помощью API Карт Google, является нарушением Условий обслуживания». – 2011-08-09 15:31:18

2

Вы хотите использовать приложение для геокодирования. Они доступны либо в Интернете, либо в качестве бэкэнда приложения.

  • Интернет приложения:

  • Backend применений:

2

Maptsraction (http://www.mapstraction.com) позволяет выбирать между любым количеством услуг геокодирования. Это может быть полезно, если вам нужно делать большие количества, так как я знаю, что у Google есть предел, сколько вы можете сделать за день.

5

Когда вы конвертируете адрес или объект в lat/long, он называется Geocoding.

Существует множество решений для геокодирования. Решение для вашего проекта будет зависеть от приемлемости условий лицензирования для каждого решения по геокодированию. Оба Microsoft Virtual Earth и Google Maps предлагает решение, которые можно бесплатно использовать при очень ограничительных лицензиях ...

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

http://www.microsoft.com/virtualearth/product/faq.aspx

11

Yahoo! Maps Web Services - Geocoding API точно геокодирования UK почтовых индексов, в отличии от API от Google ,

К сожалению Yahoo уже осуждается эту услугу, вы можете посетить http://developer.yahoo.com/geo/placefinder/ для службы Yahoo,

+2

Мы обнаружили, что Yahoo является наиболее точным. – 2008-10-17 19:12:38

+0

@Mike; мы тоже сделали – chelmertz 2009-12-01 14:36:31

5

скатившись мое собственное решение для этого, прежде чем я могу от всего сердца рекомендую модуль Geo::Coder::US Perl для этого. Просто загрузите все данные переписи и используйте включенного импортера для создания Berkeley DB для вашей страны и укажите на нем скрипт Perl. Используйте встроенный синтаксический анализ модуля, и там у вас есть: автономная система геокодирования!

24

Ничего нового для добавления, но у меня было много опыта реального мира в ГИС и геокодировании из предыдущей работы. Вот что я помню:

Если в вашем приложении требуется «время от времени», я определенно рекомендую API Google или Yahoo Geocoding API, но будьте осторожны, чтобы прочитать их условия лицензирования.

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

Несмотря на эти ограничения, они оба являются отличным выбором, потому что они часто обновляют свои уличные базы данных. Большинство бесплатных бэкэнд-инструментов и библиотек используют данные дорожного движения Census и TIGER, которые обновляются редко, поэтому вы менее склонны к успешному геокодированию адресов в быстрорастущих областях или новых подразделениях.

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

Я не думаю, что об этом еще упоминалось, но ESRI имеет ArcWeb web services, которые включают в себя геокодирование, хотя они и не очень дешевы. В прошлый раз, когда я использовал их, он стоил около 1,5 центов за поиск, но вам нужно было заплатить определенную сумму, чтобы начать. Опять же, основным преимуществом является то, что данные дорожного движения, которые они используют, постоянно обновляются в актуальном состоянии, и вы можете использовать данные в коммерческих ситуациях, которые Google не разрешает. Служба ArcWeb также будет обслуживать спутниковые и аэрофотоснимки высокого разрешения a la Карты Google, снова по цене за запрос.

Если вы хотите просмотреть свой собственный или получить более точные данные, вы можете приобрести подписки на данные ГИС от компаний, таких как TeleAtlas, но это не из дешевых. Вы можете купить только данные штата или графства, если ваши потребности крайне локальны. Существует несколько уровней данных - только для объектов ГИС, ГИС плюс подробные улицы, все это плюс данные геокода, все это плюс ограничения потока трафика/направления/скорости для маршрутизации. Конечно, цена поднимается по мере продвижения по уровням.

Наконец, статья Википедии о Geocoding содержит некоторую полезную информацию об алгоритмах и методах. Даже если вы не делаете это в своем собственном коде, полезно знать, какие ошибки и точность вы можете ожидать от различных источников данных.

2

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

0

USC WebGIS Geocoder является бесплатным и предлагает несколько API, или вы можете загрузить базу данных для онлайн-пакетной обработки.

0

Вы можете использовать веб-службы Microsoft MapPoint.

Я создал blog entry о том, как преобразовать адрес в GeoCode (lat/long).

0

Думал, что добавлю еще один к списку. Texas A & M имеет довольно прилично оцененное обслуживание здесь: http://geoservices.tamu.edu/Services/Geocode/

Хороший вариант, если у вас довольно большой набор адресов для геокодирования и вы не хотите погладить 10k в Google или Microsoft. Мы по-прежнему использовали возвращаемые данные в Google Map.

4

Попробуйте с этим кодом, я так работать с адресами:

Это ссылка, в которой с помощью метода GET вы будете отправлять запрос и получить лат и LNG.http://maps.google.com/maps/api/geocode/json?address=YOUR ADDRES&sensor=false

Для Exemple:http://maps.google.com/maps/api/geocode/json?address=W Main St, Bergenfield, NJ 07621&sensor=false

1. Создайте свой метод GET.

public static String GET(String url) throws Exception {//GET Method 
     String result = null; 
     InputStream inputStream = null; 
     try { 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpGet httpGet = new HttpGet(url); 

     Log.v("ExecuteGET: ", httpGet.getRequestLine().toString()); 

     HttpResponse httpResponse = httpclient.execute(httpGet); 
     inputStream = httpResponse.getEntity().getContent(); 
     if (inputStream != null) { 
      result = convertInputStreamToString(inputStream); 
      Log.v("Result: ", "result\n" + result); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return result; 
} 

2. Создать метод для отправки запроса

@SuppressWarnings("deprecation") 
    public static String getLatLng(String accessToken) throws Exception{ 
     String query=StaticString.gLobalGoogleUrl+"json?address="+URLEncoder.encode(accessToken)+"&sensor=false"; 
     Log.v("GETGoogleGeocoder", query+""); 
     return GET(query); 
    } 

gLobalGoogleUrl = "http://maps.google.com/maps/api/geocode/"

3. Метод вызова getLatLng

String result=getLatLng("W Main St, Bergenfield, NJ 07621"); 

4. Анализировать JSONObject

Теперь результат является JSONObject с информацией об адресе и локальной сети, LNG. Parse JSONObject (результат) с gson(). После этого используйте lat, lng.

Если у вас есть вопрос о коде, спросите.

0

Вы спрашиваете о Geocoder. Google предоставляет API для этого. , так и другой поставщик для этого.

вы можете увидеть демонстрацию реализации в My Current Location .net

0

Если вам нужен один от решения, вы можете попробовать: https://addresstolatlong.com/

Я использовал его в течение длительного времени, и это имеет работал очень хорошо для меня.

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