how to parse a Google Maps geocoding result

后端 未结 2 712
长情又很酷
长情又很酷 2021-01-14 07:57

I want to retrieve Geo address from given latitude and longitude using geocoding, using the given example on the site

http://maps.googleapis.com/maps/api/geocod

2条回答
  •  夕颜
    夕颜 (楼主)
    2021-01-14 08:43

    You can check for 3 variables in the google response (json) to find the current cityname. Hence there is 3 different interpretation of the name:

    Country
         |
    AdministrativeArea
         |
         |_AdministrativeAreaName (cityname)
         |
         |_Locality_LocalityName (cityname)
         | 
         |_SubAdministrativeArea
                     |
                     |_Locality_LocalityName (cityname)
    
    
    
    if ($this->json->Placemark[0]->AddressDetails->Country->AdministrativeArea->Locality->LocalityName != NULL) {
    
      $code['cityname'] = $this->json->Placemark[0]->AddressDetails->Country->AdministrativeArea->Locality->LocalityName;
    
    } elseif ($this->json->Placemark[0]->AddressDetails->Country->AdministrativeArea->SubAdministrativeArea->Locality->LocalityName != NULL) {
    
      $code['cityname'] = $this->json->Placemark[0]->AddressDetails->Country->AdministrativeArea->SubAdministrativeArea->Locality->LocalityName;
    
    } 
    

    If you have more then a Placemark you need to loop through all the array.

       "results" : [
          {
             "address_components" : [
                {
                   "long_name" : "277",
                   "short_name" : "277",
                   "types" : [ "street_number" ]
                },
                {
                   "long_name" : "Bedford Avenue",
                   "short_name" : "Bedford Ave",
                   "types" : [ "route" ]
                },
                {
                   "long_name" : "Williamsburg",
                   "short_name" : "Williamsburg",
                   "types" : [ "neighborhood", "political" ]
                },
                {
                   "long_name" : "Brooklyn",
                   "short_name" : "Brooklyn",
                   "types" : [ "sublocality", "political" ]
                },
                {
                   "long_name" : "Kings",
                   "short_name" : "Kings",
                   "types" : [ "administrative_area_level_2", "political" ]
                },
                {
                   "long_name" : "New York",
                   "short_name" : "NY",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "USA",
                   "short_name" : "US",
                   "types" : [ "country", "political" ]
                },
                {
                   "long_name" : "11211",
                   "short_name" : "11211",
                   "types" : [ "postal_code" ]
                }
             ],
             "formatted_address" : "277 Bedford Avenue, Brooklyn, New York 11211, USA",
             "geometry" : {
                "location" : {
                   "lat" : 40.714232,
                   "lng" : -73.9612889
                },
                "location_type" : "ROOFTOP",
                "viewport" : {
                   "northeast" : {
                      "lat" : 40.7155809802915,
                      "lng" : -73.9599399197085
                   },
                   "southwest" : {
                      "lat" : 40.7128830197085,
                      "lng" : -73.96263788029151
                   }
                }
             },
             "types" : [ "street_address" ]
          },
          {
             "address_components" : [
                {
                   "long_name" : "Grand St/Bedford Av",
                   "short_name" : "Grand St/Bedford Av",
                   "types" : [ "bus_station", "transit_station", "establishment" ]
                },
                {
                   "long_name" : "Williamsburg",
                   "short_name" : "Williamsburg",
                   "types" : [ "neighborhood", "political" ]
                },
                {
                   "long_name" : "Brooklyn",
                   "short_name" : "Brooklyn",
                   "types" : [ "sublocality", "political" ]
                },
                {
                   "long_name" : "Kings",
                   "short_name" : "Kings",
                   "types" : [ "administrative_area_level_2", "political" ]
                },
                {
                   "long_name" : "New York",
                   "short_name" : "NY",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "USA",
                   "short_name" : "US",
                   "types" : [ "country", "political" ]
                },
                {
                   "long_name" : "11211",
                   "short_name" : "11211",
                   "types" : [ "postal_code" ]
                }
             ],
             "formatted_address" : "Grand St/Bedford Av, Brooklyn, New York 11211, USA",
             "geometry" : {
                "location" : {
                   "lat" : 40.714321,
                   "lng" : -73.961151
                },
                "location_type" : "APPROXIMATE",
                "viewport" : {
                   "northeast" : {
                      "lat" : 40.71566998029149,
                      "lng" : -73.95980201970849
                   },
                   "southwest" : {
                      "lat" : 40.7129720197085,
                      "lng" : -73.96249998029151
                   }
                }
             },
             "types" : [ "bus_station", "transit_station", "establishment" ]
          },
          {
             "address_components" : [
                {
                   "long_name" : "Grand St/Bedford Av",
                   "short_name" : "Grand St/Bedford Av",
                   "types" : [ "bus_station", "transit_station", "establishment" ]
                },
                {
                   "long_name" : "Williamsburg",
                   "short_name" : "Williamsburg",
                   "types" : [ "neighborhood", "political" ]
                },
                {
                   "long_name" : "Brooklyn",
                   "short_name" : "Brooklyn",
                   "types" : [ "sublocality", "political" ]
                },
                {
                   "long_name" : "Kings",
                   "short_name" : "Kings",
                   "types" : [ "administrative_area_level_2", "political" ]
                },
                {
                   "long_name" : "New York",
                   "short_name" : "NY",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "USA",
                   "short_name" : "US",
                   "types" : [ "country", "political" ]
                },
                {
                   "long_name" : "11249",
                   "short_name" : "11249",
                   "types" : [ "postal_code" ]
                }
             ],
             "formatted_address" : "Grand St/Bedford Av, Brooklyn, New York 11249, USA",
             "geometry" : {
                "location" : {
                   "lat" : 40.714684,
                   "lng" : -73.961563
                },
                "location_type" : "APPROXIMATE",
                "viewport" : {
                   "northeast" : {
                      "lat" : 40.71603298029149,
                      "lng" : -73.9602140197085
                   },
                   "southwest" : {
                      "lat" : 40.7133350197085,
                      "lng" : -73.96291198029151
                   }
                }
             },
             "types" : [ "bus_station", "transit_station", "establishment" ]
          },
          {
             "address_components" : [
                {
                   "long_name" : "Bedford Av/Grand St",
                   "short_name" : "Bedford Av/Grand St",
                   "types" : [ "bus_station", "transit_station", "establishment" ]
                },
                {
                   "long_name" : "Williamsburg",
                   "short_name" : "Williamsburg",
                   "types" : [ "neighborhood", "political" ]
                },
                {
                   "long_name" : "Brooklyn",
                   "short_name" : "Brooklyn",
                   "types" : [ "sublocality", "political" ]
                },
                {
                   "long_name" : "Kings",
                   "short_name" : "Kings",
                   "types" : [ "administrative_area_level_2", "political" ]
                },
                {
                   "long_name" : "New York",
                   "short_name" : "NY",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "USA",
                   "short_name" : "US",
                   "types" : [ "country", "political" ]
                },
                {
                   "long_name" : "11211",
                   "short_name" : "11211",
                   "types" : [ "postal_code" ]
                }
             ],
             "formatted_address" : "Bedford Av/Grand St, Brooklyn, New York 11211, USA",
             "geometry" : {
                "location" : {
                   "lat" : 40.71471,
                   "lng" : -73.960999
                },
                "location_type" : "APPROXIMATE",
                "viewport" : {
                   "northeast" : {
                      "lat" : 40.7160589802915,
                      "lng" : -73.95965001970849
                   },
                   "southwest" : {
                      "lat" : 40.7133610197085,
                      "lng" : -73.9623479802915
                   }
                }
             },
             "types" : [ "bus_station", "transit_station", "establishment" ]
          },
          {
             "address_components" : [
                {
                   "long_name" : "11211",
                   "short_name" : "11211",
                   "types" : [ "postal_code" ]
                },
                {
                   "long_name" : "Brooklyn",
                   "short_name" : "Brooklyn",
                   "types" : [ "sublocality", "political" ]
                },
                {
                   "long_name" : "New York City",
                   "short_name" : "New York City",
                   "types" : [ "locality", "political" ]
                },
                {
                   "long_name" : "New York",
                   "short_name" : "NY",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "USA",
                   "short_name" : "US",
                   "types" : [ "country", "political" ]
                }
             ],
             "formatted_address" : "Brooklyn, New York 11211, USA",
             "geometry" : {
                "bounds" : {
                   "northeast" : {
                      "lat" : 40.7280089,
                      "lng" : -73.9207299
                   },
                   "southwest" : {
                      "lat" : 40.7008331,
                      "lng" : -73.9644697
                   }
                },
                "location" : {
                   "lat" : 40.7093358,
                   "lng" : -73.9565551
                },
                "location_type" : "APPROXIMATE",
                "viewport" : {
                   "northeast" : {
                      "lat" : 40.7280089,
                      "lng" : -73.9207299
                   },
                   "southwest" : {
                      "lat" : 40.7008331,
                      "lng" : -73.9644697
                   }
                }
             },
             "types" : [ "postal_code" ]
          },
          {
             "address_components" : [
                {
                   "long_name" : "Williamsburg",
                   "short_name" : "Williamsburg",
                   "types" : [ "neighborhood", "political" ]
                },
                {
                   "long_name" : "Brooklyn",
                   "short_name" : "Brooklyn",
                   "types" : [ "sublocality", "political" ]
                },
                {
                   "long_name" : "New York City",
                   "short_name" : "New York City",
                   "types" : [ "locality", "political" ]
                },
                {
                   "long_name" : "Kings",
                   "short_name" : "Kings",
                   "types" : [ "administrative_area_level_2", "political" ]
                },
                {
                   "long_name" : "New York",
                   "short_name" : "NY",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "USA",
                   "short_name" : "US",
                   "types" : [ "country", "political" ]
                }
             ],
             "formatted_address" : "Williamsburg, Brooklyn, New York, USA",
             "geometry" : {
                "bounds" : {
                   "northeast" : {
                      "lat" : 40.7251773,
                      "lng" : -73.936498
                   },
                   "southwest" : {
                      "lat" : 40.6979329,
                      "lng" : -73.96984499999999
                   }
                },
                "location" : {
                   "lat" : 40.7064461,
                   "lng" : -73.95361629999999
                },
                "location_type" : "APPROXIMATE",
                "viewport" : {
                   "northeast" : {
                      "lat" : 40.7251773,
                      "lng" : -73.936498
                   },
                   "southwest" : {
                      "lat" : 40.6979329,
                      "lng" : -73.96984499999999
                   }
                }
             },
             "types" : [ "neighborhood", "political" ]
          },
          {
             "address_components" : [
                {
                   "long_name" : "Kings",
                   "short_name" : "Kings",
                   "types" : [ "administrative_area_level_2", "political" ]
                },
                {
                   "long_name" : "New York",
                   "short_name" : "NY",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "USA",
                   "short_name" : "US",
                   "types" : [ "country", "political" ]
                }
             ],
             "formatted_address" : "Kings, New York, USA",
             "geometry" : {
                "bounds" : {
                   "northeast" : {
                      "lat" : 40.739446,
                      "lng" : -73.83336509999999
                   },
                   "southwest" : {
                      "lat" : 40.5695637,
                      "lng" : -74.0429503
                   }
                },
                "location" : {
                   "lat" : 40.6528762,
                   "lng" : -73.95949399999999
                },
                "location_type" : "APPROXIMATE",
                "viewport" : {
                   "northeast" : {
                      "lat" : 40.739446,
                      "lng" : -73.83336509999999
                   },
                   "southwest" : {
                      "lat" : 40.5695637,
                      "lng" : -74.0429503
                   }
                }
             },
             "types" : [ "administrative_area_level_2", "political" ]
          },
          {
             "address_components" : [
                {
                   "long_name" : "Brooklyn",
                   "short_name" : "Brooklyn",
                   "types" : [ "sublocality", "political" ]
                },
                {
                   "long_name" : "New York City",
                   "short_name" : "New York City",
                   "types" : [ "locality", "political" ]
                },
                {
                   "long_name" : "Kings",
                   "short_name" : "Kings",
                   "types" : [ "administrative_area_level_2", "political" ]
                },
                {
                   "long_name" : "New York",
                   "short_name" : "NY",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "USA",
                   "short_name" : "US",
                   "types" : [ "country", "political" ]
                }
             ],
             "formatted_address" : "Brooklyn, New York, USA",
             "geometry" : {
                "bounds" : {
                   "northeast" : {
                      "lat" : 40.739446,
                      "lng" : -73.83336509999999
                   },
                   "southwest" : {
                      "lat" : 40.551042,
                      "lng" : -74.05663
                   }
                },
                "location" : {
                   "lat" : 40.65,
                   "lng" : -73.95
                },
                "location_type" : "APPROXIMATE",
                "viewport" : {
                   "northeast" : {
                      "lat" : 40.739446,
                      "lng" : -73.83336509999999
                   },
                   "southwest" : {
                      "lat" : 40.551042,
                      "lng" : -74.05663
                   }
                }
             },
             "types" : [ "sublocality", "political" ]
          },
          {
             "address_components" : [
                {
                   "long_name" : "New York City",
                   "short_name" : "New York City",
                   "types" : [ "locality", "political" ]
                },
                {
                   "long_name" : "New York",
                   "short_name" : "NY",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "USA",
                   "short_name" : "US",
                   "types" : [ "country", "political" ]
                }
             ],
             "formatted_address" : "New York City, New York, USA",
             "geometry" : {
                "bounds" : {
                   "northeast" : {
                      "lat" : 40.91525559999999,
                      "lng" : -73.70027209999999
                   },
                   "southwest" : {
                      "lat" : 40.4959961,
                      "lng" : -74.2590879
                   }
                },
                "location" : {
                   "lat" : 40.7143528,
                   "lng" : -74.00597309999999
                },
                "location_type" : "APPROXIMATE",
                "viewport" : {
                   "northeast" : {
                      "lat" : 40.91525559999999,
                      "lng" : -73.70027209999999
                   },
                   "southwest" : {
                      "lat" : 40.496006,
                      "lng" : -74.25573489999999
                   }
                }
             },
             "types" : [ "locality", "political" ]
          },
          {
             "address_components" : [
                {
                   "long_name" : "ニュー・ヨーク=ノーザン・ニュー・ジャージー=ロング・アイランド",
                   "short_name" : "ニュー・ヨーク=ノーザン・ニュー・ジャージー=ロング・アイランド",
                   "types" : [ "political" ]
                },
                {
                   "long_name" : "USA",
                   "short_name" : "US",
                   "types" : [ "country", "political" ]
                }
             ],
             "formatted_address" : "USA, ニュー・ヨーク=ノーザン・ニュー・ジャージー=ロング・アイランド",
             "geometry" : {
                "bounds" : {
                   "northeast" : {
                      "lat" : 41.6018065,
                      "lng" : -71.85621399999999
                   },
                   "southwest" : {
                      "lat" : 39.49853299999999,
                      "lng" : -75.3585939
                   }
                },
                "location" : {
                   "lat" : 40.9590293,
                   "lng" : -74.0300122
                },
                "location_type" : "APPROXIMATE",
                "viewport" : {
                   "northeast" : {
                      "lat" : 41.6018065,
                      "lng" : -71.85621399999999
                   },
                   "southwest" : {
                      "lat" : 39.49853299999999,
                      "lng" : -75.3585939
                   }
                }
             },
             "types" : [ "political" ]
          },
          {
             "address_components" : [
                {
                   "long_name" : "New York",
                   "short_name" : "NY",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "USA",
                   "short_name" : "US",
                   "types" : [ "country", "political" ]
                }
             ],
             "formatted_address" : "New York, USA",
             "geometry" : {
                "bounds" : {
                   "northeast" : {
                      "lat" : 45.015865,
                      "lng" : -71.85626429999999
                   },
                   "southwest" : {
                      "lat" : 40.4959961,
                      "lng" : -79.76214379999999
                   }
                },
                "location" : {
                   "lat" : 43.2994285,
                   "lng" : -74.21793260000001
                },
                "location_type" : "APPROXIMATE",
                "viewport" : {
                   "northeast" : {
                      "lat" : 45.0156269,
                      "lng" : -71.85626429999999
                   },
                   "southwest" : {
                      "lat" : 40.4960191,
                      "lng" : -79.76214379999999
                   }
                }
             },
             "types" : [ "administrative_area_level_1", "political" ]
          },
          {
             "address_components" : [
                {
                   "long_name" : "USA",
                   "short_name" : "US",
                   "types" : [ "country", "political" ]
                }
             ],
             "formatted_address" : "USA",
             "geometry" : {
                "bounds" : {
                   "northeast" : {
                      "lat" : 90,
                      "lng" : 180
                   },
                   "southwest" : {
                      "lat" : -90,
                      "lng" : -180
                   }
                },
                "location" : {
                   "lat" : 37.09024,
                   "lng" : -95.712891
                },
                "location_type" : "APPROXIMATE",
                "viewport" : {
                   "northeast" : {
                      "lat" : 49.38,
                      "lng" : -66.94
                   },
                   "southwest" : {
                      "lat" : 25.82,
                      "lng" : -124.39
                   }
                }
             },
             "types" : [ "country", "political" ]
          }
       ],
       "status" : "OK"
    }
    

提交回复
热议问题