Как преобразовать адрес (как текст) в GPS-координаты? - PullRequest
12 голосов
/ 09 августа 2011

Допустим, у меня есть адрес в виде текста:

901 Cherry Ave. Сан-Бруно, Калифорния 94066 США

существует ли БЕСПЛАТНАЯ услуга, которая может помочь мне определить координаты GPS (долгота и широта) этого адреса? (Я буду использовать это в своем приложении, так что это должен быть какой-то API)

Текст может быть на любом языке.

Ответы [ 6 ]

19 голосов
/ 09 августа 2011

Процесс вызова адреса в географические координаты называется геокодирование .

В зависимости от того, как вы будете использовать данные, от Google доступен API, подробности здесь . Удачи!

3 голосов
/ 22 ноября 2012

На самом деле не важно, какой фреймворк вы используете, потому что, если вы хотите что-то большое, у вас может быть большой сюрприз: ограничение в 2,5 тыс. Запросов в день, если вы не сохраните эту информацию в xml для дальнейшего использования.использовать.Поэтому в данный момент вы можете найти лучший способ объединить это с функцией OSM для локализации.

2 голосов
/ 09 августа 2011

проверьте этот сервис Google Map API 3 Это сервис обратного геокодирования в Google Map API

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

http://googlegeodevelopers.blogspot.com/2010/03/introducing-new-google-geocoding-web.html

1 голос
/ 21 марта 2013

Ниже приведен код, который я использую. Я подготовил его на основе кода Voncox (спасибо). Просто не хотел использовать Zend.
Если вам нужно геокодировать несколько адресов, просто закройте этот код любым циклом, но, возможно, есть более быстрый путь. Я использовал его только для примерно 100 адресов, и обработка заняла около 30 секунд.

$street="Lwowska 4"; $postcode="00-658"; $city="Warszawa"; $region="mazowieckie";

$a=$street.", ".$postcode.", ".$city.", ".$region;
$address = urlencode($a);
$link = "http://maps.google.com/maps/api/geocode/xml?address=".$address."&sensor=false";
$file = file_get_contents($link);

if(!$file)  {
  echo "Err: No access to Google service: ".$a."<br/>\n";
}else {
  $get = simplexml_load_string($file);

  if ($get->status == "OK") {
      $lat = (float) $get->result->geometry->location->lat;
      $long = (float) $get->result->geometry->location->lng;
      echo "lat: ".$lat."; long: ".$long."; ".$a."<br/>\n";
  }else{
    echo "Err: address not found: ".$a."<br/>\n";
  }
}
0 голосов
/ 04 апреля 2013

Между прочим, лицензия сообщества MapQuest имеет открытый API, который использует nominatim / OpenStreetMap на обратной стороне.

Это тот же API (по интерфейсу), что и API "Лицензионный" сообщества, что облегчает переход позже.

Я обнаружил, что в открытой версии адрес должен быть слишком точным; В первый день после развертывания мы «пропустили» несколько адресов. Мы думали, что сервис не работает, но выясняется, что в названиях улиц не было таких мелких деталей, как направление (например, SW).

Попробовал Лицензионную версию, и она вернула даже адреса с ошибками.

Лицензионная версия данных Community License также бесплатна, но ограничена почти теми же условиями, что и Google. «Открытые» данные вы можете делать с тем, что хотите.

Если вы собираетесь в конечном итоге платить, то Yahoo Boss / Geo API, кажется, самый дешевый для небольшого объема; у них просто нет бесплатной версии.

0 голосов
/ 09 августа 2011

Если вы можете / хотите использовать php и Zend Framework, большая часть API Карт Google абстрагируется от Zend_Http_Client.

Например:

$address = '69 Some Road, Somewhere, NW1 8UJ';

$http = new Zend_Http_Client('google_maps_url');
$http->setParameterGet(array('address' => $address, 'sensor' => 'false'));
$get = $http->request();
$get = json_decode($get->getBody());

if ($get->status == self::GOOGLE_MAPS_SUCCESS) {
    $lat = (float) $get->results[0]->geometry->location->lat;
    $long = (float) $get->results[0]->geometry->location->lng;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...