街道名称的地理坐标

时间:2011-03-09 22:38:53

标签: php api geolocation

以任何方式(使用休息 API会很棒)获取与地理坐标对应的街道名称?我认为这个名字是地理编码,google有这个API吗?我是PHP开发人员。

实施例。

<?php 
cor="38.115583,13.37579";
echo(geoname(cor)); // this prints: Foro Umberto I - 90133 Palermo  
?>

因此,该功能的输出是街道名称,邮政编码和城市。感谢您提供任何帮助和脚本示例!

4 个答案:

答案 0 :(得分:14)

是的,只需使用Google Maps API中的“反向地理编码”功能:http://code.google.com/apis/maps/documentation/geocoding/#ReverseGeocoding

以下是一些示例代码:

$lat="38.115583";
$long = "13.37579";

$url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=$lat,$long&sensor=false";

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_ENCODING, "");
$curlData = curl_exec($curl);
curl_close($curl);

$address = json_decode($curlData);
print_r($address);

答案 1 :(得分:3)

这是我用于使用Google MAP API对街道地址进行反向地理编码查找的PHP函数。请注意,此示例以JSON格式获取Google的输出,但我在PHP中进行了简单的解析。

/*
 * Use Google Geocoding API to do a reverse address lookup from GPS coordinates
 */
function GetAddress( $lat, $lng )
{   
    // Construct the Google Geocode API call
    //
    $URL = "http://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&sensor=false";

    // Extract the location lat and lng values
    //
    $data = file( $URL );
    foreach ($data as $line_num => $line) 
    {
        if ( false != strstr( $line, "\"formatted_address\"" ) )
        {
            $addr = substr( trim( $line ), 22, -2 );
            break;
        }
    }

    return $addr;
}

安德鲁 OpenGeoCode.Org团队

顺便说一句&GT;谷歌确实限制将其API用于商业目的。基本上,您需要在谷歌地图上显示结果。

答案 2 :(得分:2)

您还可以查看使用Yahoo!的PlaceFinder API,该API提供反向地理编码。调用API的最小示例(要求它返回轻量级数据交换格式du {4 {3}})可能如下所示:

$url      = 'http://where.yahooapis.com/geocode?location=55.948496,-3.198909&gflags=R&flags=J';
$response = json_decode(file_get_contents($url));
$location = $response->ResultSet->Results[0];
print_r($location);

哪个输出第一个结果(希望有一个!),其中包含streetpostalcity等属性。


使用PlaceFinder API的另一种方法是通过Yahoo!的JSON API,它允许您对“数据表”(通常是其他API)使用类似SQL的查询。

这样的查询可能如下所示:

SELECT * FROM geo.placefinder WHERE text="55.948496,-3.198909" AND gflags="R"

YQL

使用该查询从YQL调用YQL与前面的示例非常相似,并且应该打印相同的信息。

$query    = 'SELECT * FROM geo.placefinder WHERE text="55.948496,-3.198909" AND gflags="R"';
$url      = 'http://query.yahooapis.com/v1/public/yql?q='.urlencode($query).'&format=json';
$response = json_decode(file_get_contents($url));
$location = $response->query->results->Result;
print_r($location);

答案 3 :(得分:0)

正如@Elijah所提到的,我在上一个答案中给出的Maps API有很多限制。您实际上只是将其用于Google地图应用程序。如果这是一个问题,那么您也可以尝试使用AdWords API。它也有类似的服务,但谷歌收费,所以限制较少。