2012-04-03 15 views
9

Ich möchte Land, Region und Stadt Name von Länge und Breite über Google Maps API (V3?) - mit PHP. Ich schaffte es nicht, es für jeden Bezirk zu bekommen, ich schaffte es, diesen Code zu bekommen, aber es funktioniert nicht in anderen Landkreisen, weil das zurückgegebene Ergebnis anders ist (die einzige korrekte Information ist das Land, aber selbst das wird nicht im lokalen Namen zurückgegeben) Englisch Name):Google Maps - Land, Region und Stadt aus Längen- und Breitengrad (PHP)

<? 
    $lok1 = $_REQUEST['lok1']; 
    $lok2 = $_REQUEST['lok2']; 

    $url = 'http://maps.google.com/maps/geo?q='.$lok2.','.$lok1.'&output=json'; 
    $data = @file_get_contents($url); 
    $jsondata = json_decode($data,true); 

    if(is_array($jsondata)&& $jsondata ['Status']['code']==200) 
    { 
      $addr = $jsondata ['Placemark'][0]['AddressDetails']['Country']['CountryName']; 
      $addr2 = $jsondata ['Placemark'][0]['AddressDetails']['Country']['Locality']['LocalityName']; 
      $addr3 = $jsondata ['Placemark'][0]['AddressDetails']['Country']['Locality']['DependentLocality']['DependentLocalityName']; 
    } 
    echo "Country: " . $addr . " | Region: " . $addr2 . " | City: " . $addr3; 
?> 

Dies funktioniert gut korrekte Daten aus meinem Land zu bekommen, aber nicht für andere ...

+0

Welche Koordinaten funktionieren nicht für Sie? – cloakedninjas

+0

Es funktioniert perfekt für mich. Jedoch meine Anwendung, die es nur in Indien verwendet. – srbhbarot

+0

sollten Sie mehr über Koordinaten angeben, die Sie ausprobiert haben. – srbhbarot

Antwort

23

können Sie zweite api verwenden (vorgeschlagen von Thomas) wie folgt aus:

$geocode=file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?latlng=48.283273,14.295041&sensor=false'); 

     $output= json_decode($geocode); 

echo $output->results[0]->formatted_address; 

die Sie interessieren ..

bearbeiten :::::

$geocode=file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?latlng=48.283273,14.295041&sensor=false'); 

     $output= json_decode($geocode); 

    for($j=0;$j<count($output->results[0]->address_components);$j++){ 
       echo '<b>'.$output->results[0]->address_components[$j]->types[0].': </b> '.$output->results[0]->address_components[$j]->long_name.'<br/>'; 
      } 
+0

Das funktioniert, aber die Daten sind nicht die, die ich brauche. Nun, ich könnte Land und Gebiet (aber Gebiet enthält auch Postnummer) von hier, aber kann nicht die Stadt - nur Adresse. Wie kann ich den Namen des Landes, der Stadt oder des Dorfes (ohne Postleitzahl) erhalten? –

+0

Überprüfen Sie meine bearbeitete Antwort – srbhbarot

+0

Das ist es, vielen Dank. Als richtige Antwort markiert. Vielen Dank. –

5
<?php 
$deal_lat=30.469301; 
$deal_long=70.969324; 
$geocode=file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?latlng='.$deal_lat.','.$deal_long.'&sensor=false'); 

     $output= json_decode($geocode); 

    for($j=0;$j<count($output->results[0]->address_components);$j++){ 
       $cn=array($output->results[0]->address_components[$j]->types[0]); 
      if(in_array("country", $cn)) 
      { 
      $country= $output->results[0]->address_components[$j]->long_name; 
      } 
      } 
      echo $country; 
?> 
+0

Es ist einfacher Code, wenn Sie den Namen der Stadt suchen müssen, dann in_array ("Land", $ cn) in in_array ("Ort", $ cn) ersetzen, wenn Sie Postleitzahl suchen müssen, dann replacein_array ("country", $ cn) zu in_array ("postal_code", $ cn) –

6

Hier meine Annäherung an das Problem

$lat = "22.719569"; 
$lng = "75.857726"; 
$data = file_get_contents("http://maps.google.com/maps/api/geocode/json?latlng=$lat,$lng&sensor=false"); 
$data = json_decode($data); 
$add_array = $data->results; 
$add_array = $add_array[0]; 
$add_array = $add_array->address_components; 
$country = "Not found"; 
$state = "Not found"; 
$city = "Not found"; 
foreach ($add_array as $key) { 
    if($key->types[0] == 'administrative_area_level_2') 
    { 
    $city = $key->long_name; 
    } 
    if($key->types[0] == 'administrative_area_level_1') 
    { 
    $state = $key->long_name; 
    } 
    if($key->types[0] == 'country') 
    { 
    $country = $key->long_name; 
    } 
} 
echo "Country : ".$country." ,State : ".$state." ,City : ".$city; 
Verwandte Themen