首页 文章

谷歌 Map - 从经度和纬度获取国家,地区和城市名称(PHP)

提问于
浏览
9

我想通过Google Maps API(V3?)从经度和纬度获取国家,地区和城市名称 - 使用PHP . 我只是无法为每个县获得它,我设法得到这个代码,但它不适用于其他县,因为返回的结果是不同的(唯一正确的信息是国家,但即使是以本地名称返回而不是英文名):

<?
    $lok1 = $_REQUEST['lok1'];
    $lok2 = $_REQUEST['lok2'];

    $url = 'http://maps.google.com/maps/geo?q='.$lok2.','.$lok1.'&output=json';
    $data = @file_get_contents($url);
    $jsondata = json_decode($data,true);

    if(is_array($jsondata )&& $jsondata ['Status']['code']==200)
    {
          $addr = $jsondata ['Placemark'][0]['AddressDetails']['Country']['CountryName'];
          $addr2 = $jsondata ['Placemark'][0]['AddressDetails']['Country']['Locality']['LocalityName'];
          $addr3 = $jsondata ['Placemark'][0]['AddressDetails']['Country']['Locality']['DependentLocality']['DependentLocalityName'];
    }
    echo "Country: " . $addr . " | Region: " . $addr2 . " | City: " . $addr3;
?>

这非常适合从我的国家获得正确的数据,但不适用于其他人......

4 回答

  • 7

    您可以使用第二个api(由Thomas建议),如下所示:

    $geocode=file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?latlng=48.283273,14.295041&sensor=false');
    
            $output= json_decode($geocode);
    
    echo $output->results[0]->formatted_address;
    

    试试这个..

    编辑:::::

    $geocode=file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?latlng=48.283273,14.295041&sensor=false');
    
            $output= json_decode($geocode);
    
        for($j=0;$j<count($output->results[0]->address_components);$j++){
                    echo '<b>'.$output->results[0]->address_components[$j]->types[0].': </b>  '.$output->results[0]->address_components[$j]->long_name.'
    '; }
  • 6

    这是我解决问题的方法

    $lat = "22.719569";
    $lng = "75.857726";
    $data = file_get_contents("http://maps.google.com/maps/api/geocode/json?latlng=$lat,$lng&sensor=false");
    $data = json_decode($data);
    $add_array  = $data->results;
    $add_array = $add_array[0];
    $add_array = $add_array->address_components;
    $country = "Not found";
    $state = "Not found"; 
    $city = "Not found";
    foreach ($add_array as $key) {
      if($key->types[0] == 'administrative_area_level_2')
      {
        $city = $key->long_name;
      }
      if($key->types[0] == 'administrative_area_level_1')
      {
        $state = $key->long_name;
      }
      if($key->types[0] == 'country')
      {
        $country = $key->long_name;
      }
    }
    echo "Country : ".$country." ,State : ".$state." ,City : ".$city;
    
  • 1
    <?php
    $deal_lat=30.469301;
    $deal_long=70.969324;
    $geocode=file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?latlng='.$deal_lat.','.$deal_long.'&sensor=false');
    
            $output= json_decode($geocode);
    
        for($j=0;$j<count($output->results[0]->address_components);$j++){
                   $cn=array($output->results[0]->address_components[$j]->types[0]);
               if(in_array("country", $cn))
               {
                $country= $output->results[0]->address_components[$j]->long_name;
               }
                }
                echo $country;
    ?>
    
  • 25

    您是否尝试过使用GeoCoding API?

    https://developers.google.com/maps/documentation/geocoding/#ReverseGeocoding

    示例:http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=false

    编辑:我在许多针对印度的应用程序中使用过它,它运行得很好 .

相关问题