2011-08-09 96 views
12

假設我的地址爲文本:如何將地址(作爲文本)轉換爲GPS座標?

901 Cherry Ave.聖布魯諾,CA 94066 USA

有任何免費服務,它可以幫我找出這個地址的GPS座標(經度和緯度)? (我將在我的應用程序中使用它,所以它應該是某種API)

文本可以是任何語言。

+1

感謝您使用Google API鏈接(http://code.google.com/apis/maps/documentation/geocoding/)。 OSM有相同的功能嗎? –

+2

以下是OSM地理編碼的鏈接 - http://wiki.openstreetmap.org/wiki/Nominatim –

回答

18

將地址轉換爲地理座標的過程稱爲地理編碼

根據您使用數據的方式,Google提供了一個API,詳細信息請參見​​。祝你好運!

+3

謝謝,使用_geocoding_ word我找到了OSM API。 –

0

如果你能夠/願意使用PHP和Zend框架,然後最Google Maps API的抽象是通過使用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; 
} 
3

它確實不是奧美您使用的框架,因爲如果你想要的東西的大,你可以有一個巨大的驚喜:2.5ķ要求限制/天,在此情況下,你不要將這些信息存儲在xml中供以後使用。 因此,現在您可以找到更好的方式將其與OSM功能進行本地化。

1

以下是我使用的代碼。我準備了基於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

很好的答案,Marcin。刪除答案中的MySQL部分可能是一個好主意,因爲它與問題無關,並可能導致一些混淆。 –

+0

幹得好。我只*需要地址到GPS的轉換,並浪費了大量的時間在Google的網站上試圖獲得一個API密鑰,將其許可給API,測試它......等等。這種方法不需要密鑰和簡單提供數據。這首先是我真正需要的,而不是嵌入式地圖。 –

0

僅供參考,MapQuest的社區許可證有一個'open'api,它在背面使用nominatim/OpenStreetMap。

它與Community'Licensed'API是相同的API(接口方式),這使得以後很容易轉換。

我發現打開的版本需要的地址有點過於確切;在部署後的第一天,我們「錯過了」幾個地址。我們認爲該服務已經停止,但事實證明,街道名稱缺少一些細節,如方向(前SW)。

嘗試了許可版本,它甚至返回了拼寫錯誤的地址。

社區許可證許可數據版本也是免費的,但受Google幾乎相同的條款限制。你可以用你想要的「開放」數據。

如果你打算最終付錢,那麼雅虎的Boss/Geo api似乎是低成本的最便宜的;他們只是沒有免費版本。