2011-08-09 99 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似乎是低成本的最便宜的;他们只是没有免费版本。