PHP从经度和纬度获取地址

时间:2016-11-11 07:15:30

标签: php google-maps

我创建了一个代码来获取用户的经度和纬度,这些变量存储在 mysql 数据库中。

我正在使用下面的代码来获取经度和纬度的地址。

stackoverflow 中搜索后,我找到了这个脚本,但它没有给我任何错误,也没有结果。

我尝试打印变量 $ geolocation ,我的结果打印得像 33.8943186,35.505271199999996 ,但我没有完整的地址:(

任何人都可以帮我解决我的问题,并获得用户的确切地址?? !!

 $geolocation = $latitude.','.$longitude;
     $request ='http://maps.googleapis.com/maps/api/geocode/json?latlng='.$geolocation.'';
    $file_contents = file_get_contents($request);
    $json_decode = json_decode($file_contents);
    if(isset($json_decode->results[0])) {
        $response = array();
        foreach($json_decode->results[0]->address_components as $addressComponet) {
            if(in_array('political', $addressComponet->types)) {
                    $response[] = $addressComponet->long_name;
print_r($response); // no error
            }
        }

        if(isset($response[0])){ $first  =  $response[0];  } else { $first  = 'null'; }
        if(isset($response[1])){ $second =  $response[1];  } else { $second = 'null'; } 
        if(isset($response[2])){ $third  =  $response[2];  } else { $third  = 'null'; }
        if(isset($response[3])){ $fourth =  $response[3];  } else { $fourth = 'null'; }
        if(isset($response[4])){ $fifth  =  $response[4];  } else { $fifth  = 'null'; }

        if( $first != 'null' && $second != 'null' && $third != 'null' && $fourth != 'null' && $fifth != 'null' ) {
            echo "<br/>Address:: ".$first;
            echo "<br/>City:: ".$second;
            echo "<br/>State:: ".$fourth;
            echo "<br/>Country:: ".$fifth;
print_r($response);// No error
        }
        else if ( $first != 'null' && $second != 'null' && $third != 'null' && $fourth != 'null' && $fifth == 'null'  ) {
            echo "<br/>Address:: ".$first;
            echo "<br/>City:: ".$second;
            echo "<br/>State:: ".$third;
            echo "<br/>Country:: ".$fourth;
        }
        else if ( $first != 'null' && $second != 'null' && $third != 'null' && $fourth == 'null' && $fifth == 'null' ) {
            echo "<br/>City:: ".$first;
            echo "<br/>State:: ".$second;
            echo "<br/>Country:: ".$third;
        }
        else if ( $first != 'null' && $second != 'null' && $third == 'null' && $fourth == 'null' && $fifth == 'null'  ) {
            echo "<br/>State:: ".$first;
            echo "<br/>Country:: ".$second;
        }
        else if ( $first != 'null' && $second == 'null' && $third == 'null' && $fourth == 'null' && $fifth == 'null'  ) {
            echo "<br/>Country:: ".$first;
        }
      }
print_r($response);// error

3 个答案:

答案 0 :(得分:2)

$lat=52.722452;
$lng=1.099504;

$geolocation = $lat.','.$lng;
$request ='http://maps.googleapis.com/maps/api/geocode/json?latlng='.$geolocation.'';
$json = json_decode( file_get_contents( $request ) );

$results  = $json->results[0];
$addr = $results->formatted_address;
$comp = $results->address_components;

$response=array();

foreach( $comp as $i => $obj ){
    if( in_array( 'political', $obj->types ) ) $response[]=$obj->long_name;
}

echo $addr;
print_r( $response );

答案 1 :(得分:1)

要获得完整地址,请尝试此操作。

 if (root.right is None) and (root.left is None):
   return [root.val]
 if root.right is not None:
   rightpath = [root.val] + print_path(root.right)
 if root.left is not None:
   leftpath = [root.val] + print_path(root.left)
 return argmax(rightpath, leftpath)

该URL将在执行时返回JSON响应。您需要将其转换为对象/数组。就我而言,它是一个对象。只需遍历数组并获取所需的密钥,在这种情况下为$latitude = 38.872292; $longitude = -76.9698557; $geocode=file_get_contents('https://maps.googleapis.com/maps/api/geocode/json?latlng=38.872292,-76.9698557&sensor=false&key=YOUR_KEY_HERE'); $output= json_decode($geocode); $formattedAddress = @$output->results[0]->formatted_address;

答案 2 :(得分:0)

你必须打印$response[]
$geolocation只是代码中定义的long和lat 如需更多帮助,请查看Google文档here