Ответ 1
Процесс называется преобразованием адреса в географические координаты называется геокодированием.
В зависимости от того, как вы будете использовать данные, существует API, доступный от Google, здесь здесь. Удачи!
Скажем, у меня есть адрес в виде текста:
901 Cherry Ave. Сан-Бруно, Калифорния 94066 США
есть ли БЕСПЛАТНОЕ обслуживание, которое может помочь мне определить координаты GPS (долготу и широту) этого адреса? (Я буду использовать это в своем приложении, так что это должен быть какой-то API)
Текст может быть на любом языке.
Процесс называется преобразованием адреса в географические координаты называется геокодированием.
В зависимости от того, как вы будете использовать данные, существует API, доступный от Google, здесь здесь. Удачи!
На самом деле это не означает, что вы используете, потому что если вам нужно что-то большое, у вас может быть большой сюрприз: предел в 2,5 К запрашивает/день, если вы не храните эту информацию в xml для более поздних версий использовать. Поэтому в этот момент вы можете найти лучший способ объединить это с функцией OSM для локализации.
проверьте эту службу 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
Ниже приведен код, который я использую. Я подготовил его на основе кода 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";
}
}
Если вы можете/хотите использовать 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;
}
FYI, MapQuest Community License имеет "открытую" api, которая использует nominatim/OpenStreetMap на обратной стороне.
Это тот же API (по интерфейсу), что и "Лицензионный" api сообщества, что упрощает переход позже.
Я обнаружил, что открытая версия требует, чтобы адрес был слишком точным; в первый день после развертывания мы "пропустили" несколько адресов. Мы думали, что сервис был опущен, но, оказывается, названия улиц не хватало небольших деталей, таких как направление (ex SW).
Пробовал Лицензионную версию, и она вернула даже орфографические адреса.
Лицензионная версия лицензии на лицензии сообщества также бесплатна, но ограничена почти теми же терминами, что и Google. "Открытые" данные вы можете делать с тем, что хотите.
Если вы собираетесь заплатить, то Yahoo Boss/Geo api кажется самым дешевым для малого объема; у них просто нет бесплатной версии.