如何将地址(以文本形式)转换为GPS坐标?

14

假设我有这样一个文本地址:

901 Cherry Ave. San Bruno, CA 94066 美国

是否有任何免费的服务可以帮助我识别该地址的GPS坐标(经度和纬度)?(我将在我的应用程序中使用它,所以它应该是某种API)

该文本可以是任何语言。


1
感谢提供 Google API 链接(http://code.google.com/apis/maps/documentation/geocoding/)。OSM 有相同的功能吗? - LA_
2
这是OSM地理编码的链接 - http://wiki.openstreetmap.org/wiki/Nominatim - LA_
6个回答

20

将地址转换为地理坐标的过程被称为地理编码

根据您使用数据的方式,可以从Google获取API,具体详情在此处。祝好运!


3
谢谢,使用"geocoding"这个词,我找到了OSM API。 - LA_

3

无论你使用哪个框架,都不重要,因为如果你想要一些大的东西,你可能会有一个大惊喜:一天只能请求2.5K次。如果你不将这些信息存储在XML中以供以后使用。因此,在这个时刻,您可以找到一个更好的方法将其与用于本地化的OSM功能相结合。


2

1
谢谢。OSM 有相同的功能吗? - LA_

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";
  }
}

好回答,Marcin。也许去掉你的答案中的MySQL部分会是一个不错的主意,因为这与问题无关,可能会引起一些混淆。 - Simon MᶜKenzie
干得好。我*只需要地址到GPS转换,却在谷歌网站上浪费了大量时间尝试获取API密钥、授权API、测试等等。这种方法不需要密钥,只需提供数据即可。这才是我一开始真正需要的,而不是嵌入式地图。 - Michael Blankenship

0

MapQuest的社区许可证具有“开放”API,其后端使用nominatim/OpenStreetMap。

它与社区“许可”的API(接口方面)相同,这使得以后过渡变得容易。

我发现开放版本要求地址要太精确了;在部署后的第一天,我们“错过”了几个地址。我们以为服务出了问题,但事实上街道名称缺少一些细节,例如方向(例如SW)。

尝试了许可版本,它甚至返回了拼写错误的地址。

社区许可证数据版本也是免费的,但受到与Google几乎相同的限制。您可以随意使用“开放”数据。

如果您最终要付费,那么雅虎的Boss / Geo API似乎是低容量的最便宜选择;他们没有免费版本。


0
如果您能够/愿意使用php和Zend Framework,那么大部分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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接