2015-05-20 38 views
1

我目前使用Google Maps API从用户的街道,街道号码和邮政编码获取经度和纬度。Google Maps API - 使用PHP检索城市和州

我还想从Maps API结果中获取他们的城市和州。尽管XML文档格式很奇怪,但我不确定我应该如何引用它(这与我抓住多头和拉特的方式不同)。

这是怎么了加载Maps API:

$map_address = str_replace($address."+".$zip); 
$map_api_url = "https://maps.googleapis.com/maps/api/geocode/json?address=".$map_address."&key=myKey"; 
$resp_json = file_get_contents($map_api_url); 
$resp = json_decode($resp_json, true); 

然后我得到了龙和纬度:

$lati = $resp['results'][0]['geometry']['location']['lat']; 
$longi = $resp['results'][0]['geometry']['location']['lng']; 

但我怎么抢城市和国家?

{ 
    "results" : [ 
    { 
    "address_components" : [ 
     { 
      "long_name" : "3840", 
      "short_name" : "3840", 
      "types" : [ "street_number" ] 
     }, 
     { 
      "long_name" : "Fake Street", 
      "short_name" : "Fake St", 
      "types" : [ "route" ] 
     }, 
     { 
      "long_name" : "Wilson Heights", 
      "short_name" : "Wilson Heights", 
      "types" : [ "neighborhood", "political" ] 
     }, 
     { 
      "long_name" : "North York", 
      "short_name" : "North York", 
      "types" : [ "sublocality_level_1", "sublocality", "political" ] 
     }, 
     { 
      "long_name" : "Toronto", 
      "short_name" : "Toronto", 
      "types" : [ "locality", "political" ] 
     }, 
     { 
      "long_name" : "Toronto Division", 
      "short_name" : "Toronto Division", 
      "types" : [ "administrative_area_level_2", "political" ] 
     }, 
     { 
      "long_name" : "Ontario", 
      "short_name" : "ON", 
      "types" : [ "administrative_area_level_1", "political" ] 
     }, 
     { 
      "long_name" : "Canada", 
      "short_name" : "CA", 
      "types" : [ "country", "political" ] 
     }, 
     { 
      "long_name" : "M6H", 
      "short_name" : "M6H", 
      "types" : [ "postal_code_prefix", "postal_code" ] 
     } 
    ], 
    "formatted_address" : "3840 Fake Street, Toronto, ON M6H, Canada", 
    "geometry" : { 
     "location" : { 
      "lat" : 43.5399244, 
      "lng" : -78.43486559999999 
     }, 
     "location_type" : "ROOFTOP", 
     "viewport" : { 
      "northeast" : { 
       "lat" : 43.5412733802915, 
       "lng" : -78.43351661970848 
      }, 
      "southwest" : { 
       "lat" : 43.7385754197085, 
       "lng" : -79.43621458029151 
      } 
     } 
    }, 
    "place_id" : "ChIJPVDxjGgyK4gRt3O7zOSmIF4", 
    "types" : [ "street_address" ] 
    } 
], 
"status" : "OK" 
} 

回答

0

刚刚通过循环运行代码回答了我自己的问题。请让我知道如果你有更好的方法!

foreach($resp['results'][0]['address_components'] as $address_componenets) { 
    if($address_componenets["types"][0]=="country") { 
     $country = $address_componenets["long_name"]; 
    } 
    if($address_componenets["types"][0]=="administrative_area_level_1") { 
     $state = $address_componenets["long_name"]; 
    } 
    if($address_componenets["types"][0]=="locality") { 
     $city = $address_componenets["long_name"]; 
    } 
}