假设我有这样一个文本地址:
901 Cherry Ave. San Bruno, CA 94066 美国
是否有任何免费的服务可以帮助我识别该地址的GPS坐标(经度和纬度)?(我将在我的应用程序中使用它,所以它应该是某种API)
该文本可以是任何语言。
假设我有这样一个文本地址:
901 Cherry Ave. San Bruno, CA 94066 美国
是否有任何免费的服务可以帮助我识别该地址的GPS坐标(经度和纬度)?(我将在我的应用程序中使用它,所以它应该是某种API)
该文本可以是任何语言。
将地址转换为地理坐标的过程被称为地理编码。
根据您使用数据的方式,可以从Google获取API,具体详情在此处。祝好运!
无论你使用哪个框架,都不重要,因为如果你想要一些大的东西,你可能会有一个大惊喜:一天只能请求2.5K次。如果你不将这些信息存储在XML中以供以后使用。因此,在这个时刻,您可以找到一个更好的方法将其与用于本地化的OSM功能相结合。
$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";
}
}
MapQuest的社区许可证具有“开放”API,其后端使用nominatim/OpenStreetMap。
它与社区“许可”的API(接口方面)相同,这使得以后过渡变得容易。
我发现开放版本要求地址要太精确了;在部署后的第一天,我们“错过”了几个地址。我们以为服务出了问题,但事实上街道名称缺少一些细节,例如方向(例如SW)。
尝试了许可版本,它甚至返回了拼写错误的地址。
社区许可证数据版本也是免费的,但受到与Google几乎相同的限制。您可以随意使用“开放”数据。
如果您最终要付费,那么雅虎的Boss / Geo API似乎是低容量的最便宜选择;他们没有免费版本。
$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;
}