2016-09-29 174 views
0

我想從Google地圖API獲取經緯度的國家,pincode,州和城市名稱 - 使用PHP。但有時它的工作是正確的,但有時會得到錯誤的信息,並且很多時候它會返回空值,因爲結果是動態的而不是固定的。從經緯度得到國家,地區和城市名稱(PHP)

所以任何人都建議我如何使這個充滿活力和檢查裏面是全國城市PIN碼和狀態在任何從結果數組索引的可用....

下面

是我的代碼...

$fromlat = $this->request->data['Order']['from_lat']; 
      $fromlong = $this->request->data['Order']['from_long']; 

      $geocode = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?latlng='.$fromlat.','.$fromlong.'&sensor=false'); 
      $json = json_decode($geocode); 

      //print_r($geocode); 
      $country = $json->{'results'}[1]->{'address_components'}[3]->{'long_name'}; 
      $state = $json->{'results'}[1]->{'address_components'}[2]->{'long_name'}; 
      $city = $json->{'results'}[1]->{'address_components'}[1]->{'long_name'};    
      $locality = $json->{'results'}[1]->{'address_components'}[0]->{'long_name'};   
      $pincode = $json->{'results'}[1]->{'address_components'}[4]->{'long_name'};     
      echo $locality."</br>".$country."</br>".$state."</br>".$city."</br>".$pincode; 

我需要在結果forloop中檢查地址組件中的類型,如果可用則顯示結果。下面

types = country = country name; 
      types = administrative_area_level_1 = state name ; 
      types = administrative_area_level_2 = city name ; 
      types = postal_code = pincode ; 

是我的結果數組...

stdClass Object 
(
    [results] => Array 
     (
      [0] => stdClass Object 
       (
        [address_components] => Array 
         (
          [0] => stdClass Object 
           (
            [long_name] => Kurkheda - Wadsa - Bramhapuri - Nagpur Highway 
            [short_name] => MH MSH 9 
            [types] => Array 
             (
              [0] => route 
             ) 

           ) 

          [1] => stdClass Object 
           (
            [long_name] => Nagpur 
            [short_name] => Nagpur 
            [types] => Array 
             (
              [0] => administrative_area_level_2 
              [1] => political 
             ) 

           ) 

          [2] => stdClass Object 
           (
            [long_name] => Maharashtra 
            [short_name] => MH 
            [types] => Array 
             (
              [0] => administrative_area_level_1 
              [1] => political 
             ) 

           ) 

          [3] => stdClass Object 
           (
            [long_name] => India 
            [short_name] => IN 
            [types] => Array 
             (
              [0] => country 
              [1] => political 
             ) 

           ) 

          [4] => stdClass Object 
           (
            [long_name] => 441204 
            [short_name] => 441204 
            [types] => Array 
             (
              [0] => postal_code 
             ) 

           ) 

         ) 

        [formatted_address] => Kurkheda - Wadsa - Bramhapuri - Nagpur Hwy, Maharashtra 441204, India 
        [geometry] => stdClass Object 
         (
          [bounds] => stdClass Object 
           (
            [northeast] => stdClass Object 
             (
              [lat] => 21.0633475 
              [lng] => 79.1652473 
             ) 

            [southwest] => stdClass Object 
             (
              [lat] => 21.0599518 
              [lng] => 79.1646723 
             ) 

           ) 

          [location] => stdClass Object 
           (
            [lat] => 21.0616013 
            [lng] => 79.1647236 
           ) 

          [location_type] => GEOMETRIC_CENTER 
          [viewport] => stdClass Object 
           (
            [northeast] => stdClass Object 
             (
              [lat] => 21.0633475 
              [lng] => 79.166308780291 
             ) 

            [southwest] => stdClass Object 
             (
              [lat] => 21.0599518 
              [lng] => 79.163610819708 
             ) 

           ) 

         ) 

        [place_id] => ChIJj5wNX6O51DsRz53GLG9aZRM 
        [types] => Array 
         (
          [0] => route 
         ) 

       ) 

      [1] => stdClass Object 
       (
        [address_components] => Array 
         (
          [0] => stdClass Object 
           (
            [long_name] => Kalamana 
            [short_name] => Kalamana 
            [types] => Array 
             (
              [0] => locality 
              [1] => political 
             ) 

           ) 

          [1] => stdClass Object 
           (
            [long_name] => Nagpur 
            [short_name] => Nagpur 
            [types] => Array 
             (
              [0] => administrative_area_level_2 
              [1] => political 
             ) 

           ) 

          [2] => stdClass Object 
           (
            [long_name] => Maharashtra 
            [short_name] => MH 
            [types] => Array 
             (
              [0] => administrative_area_level_1 
              [1] => political 
             ) 

           ) 

          [3] => stdClass Object 
           (
            [long_name] => India 
            [short_name] => IN 
            [types] => Array 
             (
              [0] => country 
              [1] => political 
             ) 

           ) 

          [4] => stdClass Object 
           (
            [long_name] => 441204 
            [short_name] => 441204 
            [types] => Array 
             (
              [0] => postal_code 
             ) 

           ) 

         ) 

        [formatted_address] => Kalamana, Maharashtra 441204, India 
        [geometry] => stdClass Object 
         (
          [bounds] => stdClass Object 
           (
            [northeast] => stdClass Object 
             (
              [lat] => 21.0628156 
              [lng] => 79.164412 
             ) 

            [southwest] => stdClass Object 
             (
              [lat] => 21.0589309 
              [lng] => 79.1617083 
             ) 

           ) 

          [location] => stdClass Object 
           (
            [lat] => 21.0605174 
            [lng] => 79.1629662 
           ) 

          [location_type] => APPROXIMATE 
          [viewport] => stdClass Object 
           (
            [northeast] => stdClass Object 
             (
              [lat] => 21.0628156 
              [lng] => 79.164412 
             ) 

            [southwest] => stdClass Object 
             (
              [lat] => 21.0589309 
              [lng] => 79.1617083 
             ) 

           ) 

         ) 

        [place_id] => ChIJ2yhznKO51DsRGZWqNrtKBD4 
        [types] => Array 
         (
          [0] => locality 
          [1] => political 
         ) 

       ) 

      [2] => stdClass Object 
       (
        [address_components] => Array 
         (
          [0] => stdClass Object 
           (
            [long_name] => 441204 
            [short_name] => 441204 
            [types] => Array 
             (
              [0] => postal_code 
             ) 

           ) 

          [1] => stdClass Object 
           (
            [long_name] => Nagpur 
            [short_name] => Nagpur 
            [types] => Array 
             (
              [0] => administrative_area_level_2 
              [1] => political 
             ) 

           ) 

          [2] => stdClass Object 
           (
            [long_name] => Maharashtra 
            [short_name] => MH 
            [types] => Array 
             (
              [0] => administrative_area_level_1 
              [1] => political 
             ) 

           ) 

          [3] => stdClass Object 
           (
            [long_name] => India 
            [short_name] => IN 
            [types] => Array 
             (
              [0] => country 
              [1] => political 
             ) 

           ) 

         ) 

        [formatted_address] => Maharashtra 441204, India 
        [geometry] => stdClass Object 
         (
          [bounds] => stdClass Object 
           (
            [northeast] => stdClass Object 
             (
              [lat] => 21.139709 
              [lng] => 79.3452018 
             ) 

            [southwest] => stdClass Object 
             (
              [lat] => 20.8714046 
              [lng] => 79.0962536 
             ) 

           ) 

          [location] => stdClass Object 
           (
            [lat] => 20.9903768 
            [lng] => 79.2451149 
           ) 

          [location_type] => APPROXIMATE 
          [viewport] => stdClass Object 
           (
            [northeast] => stdClass Object 
             (
              [lat] => 21.139709 
              [lng] => 79.3452018 
             ) 

            [southwest] => stdClass Object 
             (
              [lat] => 20.8714046 
              [lng] => 79.0962536 
             ) 

           ) 

         ) 

        [place_id] => ChIJKTHfbpOw1DsRGwYyMATAfU4 
        [types] => Array 
         (
          [0] => postal_code 
         ) 

       ) 

      [3] => stdClass Object 
       (
        [address_components] => Array 
         (
          [0] => stdClass Object 
           (
            [long_name] => Nagpur 
            [short_name] => Nagpur 
            [types] => Array 
             (
              [0] => administrative_area_level_2 
              [1] => political 
             ) 

           ) 

          [1] => stdClass Object 
           (
            [long_name] => Maharashtra 
            [short_name] => MH 
            [types] => Array 
             (
              [0] => administrative_area_level_1 
              [1] => political 
             ) 

           ) 

          [2] => stdClass Object 
           (
            [long_name] => India 
            [short_name] => IN 
            [types] => Array 
             (
              [0] => country 
              [1] => political 
             ) 

           ) 

         ) 

        [formatted_address] => Nagpur, Maharashtra, India 
        [geometry] => stdClass Object 
         (
          [bounds] => stdClass Object 
           (
            [northeast] => stdClass Object 
             (
              [lat] => 21.713785 
              [lng] => 79.65179 
             ) 

            [southwest] => stdClass Object 
             (
              [lat] => 20.5841799 
              [lng] => 78.2515599 
             ) 

           ) 

          [location] => stdClass Object 
           (
            [lat] => 21.3170198 
            [lng] => 79.1999949 
           ) 

          [location_type] => APPROXIMATE 
          [viewport] => stdClass Object 
           (
            [northeast] => stdClass Object 
             (
              [lat] => 21.713785 
              [lng] => 79.65179 
             ) 

            [southwest] => stdClass Object 
             (
              [lat] => 20.5841799 
              [lng] => 78.2515599 
             ) 

           ) 

         ) 

        [place_id] => ChIJ691n-cTA1DsRh3HGEikxZ2E 
        [types] => Array 
         (
          [0] => administrative_area_level_2 
          [1] => political 
         ) 

       ) 

      [4] => stdClass Object 
       (
        [address_components] => Array 
         (
          [0] => stdClass Object 
           (
            [long_name] => Maharashtra 
            [short_name] => MH 
            [types] => Array 
             (
              [0] => administrative_area_level_1 
              [1] => political 
             ) 

           ) 

          [1] => stdClass Object 
           (
            [long_name] => India 
            [short_name] => IN 
            [types] => Array 
             (
              [0] => country 
              [1] => political 
             ) 

           ) 

         ) 

        [formatted_address] => Maharashtra, India 
        [geometry] => stdClass Object 
         (
          [bounds] => stdClass Object 
           (
            [northeast] => stdClass Object 
             (
              [lat] => 22.027909 
              [lng] => 80.890924 
             ) 

            [southwest] => stdClass Object 
             (
              [lat] => 15.602412 
              [lng] => 72.6593629 
             ) 

           ) 

          [location] => stdClass Object 
           (
            [lat] => 19.7514798 
            [lng] => 75.7138884 
           ) 

          [location_type] => APPROXIMATE 
          [viewport] => stdClass Object 
           (
            [northeast] => stdClass Object 
             (
              [lat] => 22.027909 
              [lng] => 80.890924 
             ) 

            [southwest] => stdClass Object 
             (
              [lat] => 15.602412 
              [lng] => 72.6593629 
             ) 

           ) 

         ) 

        [place_id] => ChIJ-dacnB7EzzsRtk_gS5IiLxs 
        [types] => Array 
         (
          [0] => administrative_area_level_1 
          [1] => political 
         ) 

       ) 

      [5] => stdClass Object 
       (
        [address_components] => Array 
         (
          [0] => stdClass Object 
           (
            [long_name] => India 
            [short_name] => IN 
            [types] => Array 
             (
              [0] => country 
              [1] => political 
             ) 

           ) 

         ) 

        [formatted_address] => India 
        [geometry] => stdClass Object 
         (
          [bounds] => stdClass Object 
           (
            [northeast] => stdClass Object 
             (
              [lat] => 35.5087008 
              [lng] => 97.395561 
             ) 

            [southwest] => stdClass Object 
             (
              [lat] => 6.7535159 
              [lng] => 68.1623859 
             ) 

           ) 

          [location] => stdClass Object 
           (
            [lat] => 20.593684 
            [lng] => 78.96288 
           ) 

          [location_type] => APPROXIMATE 
          [viewport] => stdClass Object 
           (
            [northeast] => stdClass Object 
             (
              [lat] => 35.5087008 
              [lng] => 97.395561 
             ) 

            [southwest] => stdClass Object 
             (
              [lat] => 6.7535159 
              [lng] => 68.1633666 
             ) 

           ) 

         ) 

        [place_id] => ChIJkbeSa_BfYzARphNChaFPjNc 
        [types] => Array 
         (
          [0] => country 
          [1] => political 
         ) 

       ) 

     ) 

    [status] => OK 
) 
+0

https://github.com/dereuromark/cakephp-geo通過行爲包裝好一點:) – mark

回答

0

我有一個被稱爲工作有些類似的代碼。基本上它可以返回一個結果數組,如果有多個可能的結果,或者只有一個對象,如果只有一個結果被發現。我的用例略有不同,但希望它有幫助。試試這個:

$ch = curl_init(); 
    $geoCodeUrl = 'https://maps.googleapis.com/maps/api/geocode/json?address=' . $zip . ',+United+States&key=' . $googleApiKey; 
    curl_setopt($ch,CURLOPT_URL, $geoCodeUrl); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
    $result = curl_exec($ch); 
    curl_close($ch); 

    $GeoCode = json_decode($result); 
    $GeoLocator = new \stdClass(); 

    if(isset($GeoCode->results[0])){ 
     $GeoLocator->lat = $GeoCode->results[0]->geometry->location->lat; 
     $GeoLocator->lon = $GeoCode->results[0]->geometry->location->lng; 
     foreach($GeoCode->results[0]->address_components as $comp){ 
      if(in_array('locality',$comp->types)){ 
       $GeoLocator->city = trim($comp->short_name); 
      } 
      else if(in_array('administrative_area_level_1',$comp->types)){ 
       $GeoLocator->state = strtoupper(trim(preg_replace('/\d/', '', $comp->short_name))); 
      } 
     } 

    } 
    else if(isset($GeoCode->results) && isset($GeoCode->results->geometry)){ 
     $GeoLocator->lat = $GeoCode->results->geometry->location->lat; 
     $GeoLocator->lon = $GeoCode->results->geometry->location->lng; 
     foreach($GeoCode->results->address_components as $comp){ 
      if(in_array('locality',$comp->types)){ 
       $GeoLocator->city = trim($comp->short_name); 
      } 
      else if(in_array('administrative_area_level_1',$comp->types)){ 
       $GeoLocator->state = strtoupper(trim(preg_replace('/\d/', '', $comp->short_name))); 
      } 
     } 
    } 
相關問題