2012-04-03 25 views
9

Me gustaría obtener el nombre del país, la región y la ciudad de longitud y latitud sobre Google maps API (V3?) - con PHP. Simplemente no puedo conseguirlo para todos los condados, logré obtener este código pero no funciona en otros condados porque el resultado devuelto es diferente (la única información correcta es el país pero incluso eso se devuelve en nombre local no nombre Inglés):Google maps - obtener el nombre del país, la región y la ciudad de longitud y latitud (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; 
?> 

Esto funciona muy bien para obtener la información correcta de mi país, pero no para otros ...

+0

¿Qué coordenadas no funcionan para usted? – cloakedninjas

+0

Funciona perfectamente para mí. Sin embargo, mi aplicación lo usa solo en India. – srbhbarot

+0

debe proporcionar más acerca de las coordenadas que ha intentado. – srbhbarot

Respuesta

23

Puede utilizar la API segundo (sugerido por Thomas) de esta manera:

$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; 

Prueba esto ..

Editar :::::

$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

Esto funciona, pero los datos no son los que necesito. Bueno, podría obtener el país y el área (pero el área también contiene el número de publicación) desde aquí, pero no puedo obtener la dirección solo para la ciudad. ¿Cómo puedo obtener el nombre del país, ciudad/pueblo y área (sin número zip)? –

+0

revise mi respuesta editada – srbhbarot

+0

Esto es todo, muchas gracias. Marcado como respuesta correcta. Gracias. –

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 un código simple si necesita encontrar el nombre de la ciudad y luego reemplace in_array ("país", $ cn) por in_array ("localidad", $ cn) si necesita encontrar el código postal y luego replacein_array ("país", $ cn) a in_array ("postal_code", $ cn) –

6

Aquí es mi enfoque al problema

$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; 
Cuestiones relacionadas