2011-08-09 10 views
12

Załóżmy, że mam adres jako tekst:Jak przekonwertować adres (jako tekst) na współrzędne GPS?

901 Cherry Ave. San Bruno, CA 94066 USA

Czy istnieje DARMOWA usługa, która pomoże mi określić współrzędne GPS (długość i szerokość geograficzną) tego adresu? (Użyję tego w mojej aplikacji, więc powinien to być jakiś rodzaj API)

Tekst może być w dowolnym języku.

+1

Dziękujemy za linki do google API (http://code.google.com/apis/maps/documentation/geocoding/). Czy jest taka sama funkcjonalność dla OSM? –

+2

Oto link do geokodowania OSM - http://wiki.openstreetmap.org/wiki/Nominatim –

Odpowiedz

18

Proces nazywany jest przekształcaniem adresu na współrzędne geograficzne o nazwie geokodowania.

W zależności od tego, w jaki sposób będziesz korzystać z danych, Google udostępnia interfejs API, szczegóły: here. Powodzenia!

+3

Dzięki, używając _geocoding_ word Znalazłem OSM API. –

0

Jeśli jesteś w stanie/chętni do korzystania z php i Zend Framework to większość interfejsu API Map Google jest pobierane za pomocą Zend_Http_Client.

Na przykład:

$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; 
} 
3

To naprawdę nie Mather których ramy użyć, bo jeśli chcesz coś wielkiego można mieć wielką niespodziankę: limit 2,5 K życzenie/dzień to w przypadku, gdy nie przechowuj tych informacji w xml do późniejszego wykorzystania. W tej chwili możesz znaleźć lepszy sposób na połączenie tego z funkcją OSM w celu lokalizacji.

1

Poniżej znajduje się kod, którego używam. Przygotowałem go na podstawie kodu voncox (dzięki). Po prostu nie chciałem używać Zend.
Jeśli potrzebujesz geokodować wiele adresów, po prostu zamknij ten kod za pomocą dowolnego rodzaju pętli, ale prawdopodobnie jest szybszy sposób. Używałem go tylko dla około 100 adresów i przetworzenie trwało około 30 sekund.

$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

Dobra odpowiedź, Marcin. Dobrym pomysłem może być usunięcie części MySQL z odpowiedzi, ponieważ nie jest to istotne dla pytania i może powodować pewne zamieszanie. –

+0

Dobra robota. Tylko ja * potrzebowałem konwersji adresu na GPS i marnowałem mnóstwo czasu na stronie Google, próbując uzyskać klucz API, zezwolić na API, przetestować go ... itd. To podejście nie wymaga klucza i po prostu przekazuje dane. To wszystko, czego naprawdę potrzebowałem, a nie osadzoną mapę. –

0

FYI, MapQuest za Społeczność Licencja ma 'otwarte' API, które używa nominatim/OpenStreetMap z tyłu.

Jest to ten sam interfejs API (interfejsowy), co wspólnotowe apki "Licencjonowane", co ułatwia późniejsze przejście.

Zauważyłem, że wersja otwarta wymaga, aby adres był trochę zbyt dokładny; pierwszego dnia po wdrożeniu "przegapiliśmy" kilka adresów. Myśleliśmy, że usługa została wyłączona, ale okazało się, że w nazwach ulic brakowało drobnych szczegółów, takich jak kierunek (np. SW).

Wypróbowałem wersję licencjonowaną i zwrócono nawet błędne adresy.

Licencja na wersję z licencją społecznościową jest również bezpłatna, ale podlega ograniczeniom takim samym jak warunki Google. "Otwarte" dane, które możesz zrobić z tym, czego chcesz.

Jeśli masz zamiar zapłacić, to Yahoo Boss/Geo api wydaje się być najtańszym rozwiązaniem dla małej ilości; po prostu nie mają darmowej wersji.

Powiązane problemy