我正在使用这个脚本从谷歌获取地理代码信息,但我不知道如何过滤掉Lat、Lon、Town、County等细节。这是我的代码(我认为它将在新的API-3下工作?):
<?php
$address="LS1 7AS";
$result=file_get_contents("http://maps.google.com/maps/api/geocode/json?address=" . urlencode($address) . "&sensor=false" );
$geocodedinfo=json_decode($result);
print_r($geocodedinfo);
?>
这会打印出我需要的所有信息,但作为一个块,我只想拥有其中的一些信息,这样我就可以将其插入到表中,例如:
$town = "town from result";
$county = "county from result";
$lat = "lat from result";
$lon = "lon from result";
首先,您需要修改API输出格式。使用输出格式json
,因为您已经使用了json_decode
函数。
$address="LS1 7AS";
"http://maps.google.com/maps/api/geocode/json?address=" . urlencode($address) . "&sensor=false";
你的变量应该看起来像:
$geocodedinfo=json_decode($result);
您必须检查退货状态:
if($geocodedinfo->status == 'OK') {
$country = $geocodeinfo->results[0]->address_components[3]->long_name;
$town = $geocodeinfo->results[0]->address_components[2]->long_name;
$lat = $geocodeinfo->results[0]->geometry->location->lat;
$lon = $geocodeinfo->results[0]->geometry->location->lng;
}
请尝试以下操作:
$address="LS1 7AS";
$result = @file_get_contents("http://maps.google.com/maps/api/geocode/json?address=" . urlencode($address) . "&sensor=false" );
if ($result === FALSE) {
//manage exception from file_get_contents call
} else {
$geocodedinfo = json_decode($result);
if ($geocodedinfo->status == "OK") {
$county = "";
$town = "";
foreach ($geocodedinfo->results[0]->address_components as $addrcomps) {
if ( $addrcomps->types[0] == 'postal_town')
$town = $addrcomps->long_name;
if ( $addrcomps->types[0] == 'administrative_area_level_2')
$county = $addrcomps->long_name;
}
$lat = $geocodedinfo->results[0]->geometry->location->lat;
$lon = $geocodedinfo->results[0]->geometry->location->lng;
}
}
有时,file_get_contents函数调用会返回异常。所以你应该在调用它之前使用@。