Próbuję uzyskać ciąg $ street, $ city i $ country string z google json. Działa na mój adres domowy: http://maps.googleapis.com/maps/api/geocode/json?latlng=52.108662,6.307370&sensor=trueUzyskiwanie ulicy, miasta i kraju przez odwrotne geokodowanie za pomocą google
$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'];
}
Ale na inny adres z większą liczbą danych w tablicach jak w poniższym przykładzie: http://maps.googleapis.com/maps/api/geocode/json?latlng=52.154184,6.199592&sensor=true to nie działa, ponieważ nie ma więcej danych w tablicy json i czyni to prowincję krajem.
Jak wybrać typ, którego potrzebuję (long_name)?
- na ulicy: long_name gdzie "typów": [ "Trasa"]
- dla miasta: long_name gdzie "typów": [ "stanowisko", "polityczne"]
- dla kraju: long_name gdzie " typy”: [ "Kraj", "polityczny"]
Przykâadowa z JSON Geokodując:
{
"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" ]
}
myślę ustalone to sam, niniejszym mój kod:
// 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"];
}
}
}
To nie zadziała, ponieważ pierwszy komponent jest najbardziej niezawodny, po prostu wykonaj pętle 'cases',' if' i wszystko będzie dobrze. –