Как преобразовать адрес в широту / долготу? - PullRequest
68 голосов
/ 19 сентября 2008

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

Ответы [ 18 ]

46 голосов
/ 19 сентября 2008

У 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 Картах. (обратите внимание, что есть некоторые исключения из этого, например, в Великобритании или Израиле, где данные получены из другого источника и имеют немного пониженное качество)

24 голосов
/ 17 октября 2008

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

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

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

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

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

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

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

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

11 голосов
/ 23 сентября 2008

Yahoo! Веб-службы Карт - API геокодирования точно геокодирует британские почтовые индексы, в отличие от API Google.

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

10 голосов
/ 05 января 2012
5 голосов
/ 17 октября 2008

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

5 голосов
/ 19 сентября 2008

Когда вы конвертируете адрес или объект в широту / длину, это называется геокодированием.

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

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

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

4 голосов
/ 31 июля 2014

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

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

Например: http://maps.google.com/maps/api/geocode/json?address=W Main St, Bergenfield, NJ 07621 и датчик = 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. Parse JSONObject

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

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

2 голосов
/ 19 сентября 2008

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

2 голосов
/ 19 сентября 2008

Виртуальная Земля делает это. Есть также веб-сервис на geocoder.us

2 голосов
/ 19 сентября 2008

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

...