2016-09-29 2 views
0

Ich möchte Land, Pincode, Staat und Stadt Name von Länge und Breite über Google Maps API - mit PHP. aber manchmal funktioniert es richtig, aber manchmal wird es falsche Informationen und oft gibt es Null-Werte zurück, weil das Ergebnis kommt, ist dynamisch nicht behoben.Land, Region und Stadt Name aus Längen- und Breitengrad (PHP)

so mir jemand vorschlagen, wie diese Dynamik zu machen und innen überprüfen Land Stadt Pincode und Staat sind in jeder der Array-Index von Ergebnis ist ....

unten ist mein Code ...

$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; 

Ich muss Typen in Adresskomponenten wie unten im Ergebnis Forloop überprüfen und wenn verfügbar dann Ergebnis anzeigen.

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

unten ist mein Ergebnis Array ...

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 wickelt es ein bisschen besser über das Verhalten :) – mark

Antwort

0

ich einen ähnlichen Code haben, zu arbeiten, ist bekannt. Grundsätzlich kann ein Ergebnis-Array zurückgegeben werden, wenn mehr als ein Ergebnis möglich ist oder nur ein Objekt, wenn nur ein Ergebnis gefunden wird. Mein Anwendungsfall ist etwas anders, aber hoffentlich hilft es. Versuchen Sie folgendes:

$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))); 
      } 
     } 
    } 
Verwandte Themen