假设我的地址为文本:如何将地址(作为文本)转换为GPS坐标?
901 Cherry Ave.圣布鲁诺,CA 94066 USA
有任何免费服务,它可以帮我找出这个地址的GPS坐标(经度和纬度)? (我将在我的应用程序中使用它,所以它应该是某种API)
文本可以是任何语言。
假设我的地址为文本:如何将地址(作为文本)转换为GPS坐标?
901 Cherry Ave.圣布鲁诺,CA 94066 USA
有任何免费服务,它可以帮我找出这个地址的GPS坐标(经度和纬度)? (我将在我的应用程序中使用它,所以它应该是某种API)
文本可以是任何语言。
将地址转换为地理坐标的过程称为地理编码。
根据您使用数据的方式,Google提供了一个API,详细信息请参见。祝你好运!
谢谢,使用_geocoding_ word我找到了OSM API。 –
检查这个谷歌地图API 3服务,这是在谷歌地图API的反向地理编码服务
http://code.google.com/apis/maps/documentation/javascript/services.html#Geocoding
http://googlegeodevelopers.blogspot.com/2010/03/introducing-new-google-geocoding-web.html
谢谢。 OSM有相同的功能吗? –
如果你能够/愿意使用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;
}
它确实不是奥美您使用的框架,因为如果你想要的东西的大,你可以有一个巨大的惊喜:2.5ķ要求限制/天,在此情况下,你不要将这些信息存储在xml中供以后使用。 因此,现在您可以找到更好的方式将其与OSM功能进行本地化。
以下是我使用的代码。我准备了基于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";
}
}
很好的答案,Marcin。删除答案中的MySQL部分可能是一个好主意,因为它与问题无关,并可能导致一些混淆。 –
干得好。我只*需要地址到GPS的转换,并浪费了大量的时间在Google的网站上试图获得一个API密钥,将其许可给API,测试它......等等。这种方法不需要密钥和简单提供数据。这首先是我真正需要的,而不是嵌入式地图。 –
仅供参考,MapQuest的社区许可证有一个'open'api,它在背面使用nominatim/OpenStreetMap。
它与Community'Licensed'API是相同的API(接口方式),这使得以后很容易转换。
我发现打开的版本需要的地址有点过于确切;在部署后的第一天,我们“错过了”几个地址。我们认为该服务已经停止,但事实证明,街道名称缺少一些细节,如方向(前SW)。
尝试了许可版本,它甚至返回了拼写错误的地址。
社区许可证许可数据版本也是免费的,但受Google几乎相同的条款限制。你可以用你想要的“开放”数据。
如果你打算最终付钱,那么雅虎的Boss/Geo api似乎是低成本的最便宜的;他们只是没有免费版本。
感谢您使用Google API链接(http://code.google.com/apis/maps/documentation/geocoding/)。 OSM有相同的功能吗? –
以下是OSM地理编码的链接 - http://wiki.openstreetmap.org/wiki/Nominatim –