我正在尝试从Google json获取$ street,$ city和$ country字符串。它适用于我的家庭住址:http : //maps.googleapis.com/maps/api/geocode/json?latlng=52.108662,6.307370&sensor=true
$url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=".$lat.",".$lng."&sensor=true"; $data = @file_get_contents($url); $jsondata = json_decode($data,true); if(is_array($jsondata) && $jsondata['status'] == "OK") { $city = $jsondata['results']['0']['address_components']['2']['long_name']; $country = $jsondata['results']['0']['address_components']['5']['long_name']; $street = $jsondata['results']['0']['address_components']['1']['long_name']; }
但是,对于像这样的示例中数组中包含更多数据的其他地址:http : //maps.googleapis.com/maps/api/geocode/json?latlng=52.154184,6.199592&sensor=true, 它不起作用,因为存在json数组中有更多数据,这使该省成为了国家。
如何选择所需的类型(long_name)?
地理编码JSON的示例输出:
{ "results" : [ { "address_components" : [ { "long_name" : "89", "short_name" : "89", "types" : [ "street_number" ] }, { "long_name" : "Wieck De", "short_name" : "Wieck De", "types" : [ "establishment" ] }, { "long_name" : "Industrieweg", "short_name" : "Industrieweg", "types" : [ "route" ] }, { "long_name" : "Zutphen", "short_name" : "Zutphen", "types" : [ "locality", "political" ] }, { "long_name" : "Zutphen", "short_name" : "Zutphen", "types" : [ "administrative_area_level_2", "political" ] }, { "long_name" : "Gelderland", "short_name" : "GE", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "Nederland", "short_name" : "NL", "types" : [ "country", "political" ] }, { "long_name" : "7202 CA", "short_name" : "7202 CA", "types" : [ "postal_code" ] }
我想我自己修复了它,据此是我的代码:
// street foreach ($jsondata["results"] as $result) { foreach ($result["address_components"] as $address) { if (in_array("route", $address["types"])) { $street = $address["long_name"]; } } } // city foreach ($jsondata["results"] as $result) { foreach ($result["address_components"] as $address) { if (in_array("locality", $address["types"])) { $city = $address["long_name"]; } } } // country foreach ($jsondata["results"] as $result) { foreach ($result["address_components"] as $address) { if (in_array("country", $address["types"])) { $country = $address["long_name"]; } } }
您可以将数据转换为关联数组并像这样使用它
$data = array(); foreach($jsondata['results']['0']['address_components'] as $element){ $data[ implode(' ',$element['types']) ] = $element['long_name']; } print_r($data); echo 'route: ' . $data['route'] . "\n"; echo 'country: ' . $data['country political'];