Подтвердить что ты не робот

Как преобразовать адрес (как текст) в координаты gps?

Скажем, у меня есть адрес в виде текста:

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 4

Ниже приведен код, который я использую. Я подготовил его на основе кода 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";
  }
}

Ответ 5

Если вы можете/хотите использовать 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;
}

Ответ 6

FYI, MapQuest Community License имеет "открытую" api, которая использует nominatim/OpenStreetMap на обратной стороне.

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

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

Пробовал Лицензионную версию, и она вернула даже орфографические адреса.

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

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