2012-04-03 70 views
9

Tôi muốn lấy tên quốc gia, vùng và thành phố từ kinh độ và vĩ độ trên API bản đồ của Google (V3?) - với PHP. Tôi không thể quản lý nó cho mọi quận, tôi quản lý để lấy mã này nhưng nó không hoạt động trên các quận khác bởi vì kết quả trả về là khác nhau (thông tin chính xác duy nhất là quốc gia nhưng thậm chí cả tên địa phương không được trả về tên tiếng Anh):Google maps - lấy tên quốc gia, vùng và thành phố từ kinh độ và vĩ độ (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; 
?> 

này hoạt động tuyệt vời để có được dữ liệu chính xác từ đất nước của tôi, nhưng không phải cho người khác ...

+0

Tọa độ nào không hoạt động đối với bạn? – cloakedninjas

+0

Nó hoạt động hoàn hảo cho tôi. Tuy nhiên ứng dụng của tôi chỉ sử dụng nó ở Ấn Độ. – srbhbarot

+0

bạn nên cung cấp thêm về các tọa độ mà bạn đã thử. – srbhbarot

Trả lời

23

Bạn có thể sử dụng api thứ hai (được đề xuất bởi Thomas) như thế này:

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

Hãy thử điều này ..

Sửa :::::

$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

Tính năng này hoạt động nhưng dữ liệu không phải là dữ liệu tôi cần. Vâng, tôi có thể nhận được quốc gia và khu vực (nhưng khu vực cũng chứa số bài) từ đây, nhưng không thể có được địa chỉ thành phố - chỉ. Làm cách nào tôi có thể nhận tên quốc gia, thành phố/làng và khu vực (không có số zip). –

+0

kiểm tra câu trả lời đã chỉnh sửa của tôi – srbhbarot

+0

Đây là nó, cảm ơn bạn rất nhiều. Đánh dấu là câu trả lời đúng. Cảm ơn bạn. –

1

bạn đã thử sử dụng API mã hóa địa lý của họ?

https://developers.google.com/maps/documentation/geocoding/#ReverseGeocoding

Ví dụ: http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=false

Edit: Tôi đã sử dụng nó trong nhiều ứng dụng nhắm mục tiêu Ấn Độ và nó đã làm việc khá tốt.

+0

Bạn có thể giúp tôi có được quốc gia, thành phố và khu vực từ quốc gia đó trong PHP không? –

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

Đó là mã đơn giản nếu bạn cần tìm tên thành phố rồi thay thế in_array ("quốc gia", $ cn) thành in_array ("địa phương", $ cn) nếu bạn cần tìm mã Zip sau đó replacein_array ("quốc gia", $ cn) tới in_array ("postal_code", $ cn) –

6

Đây là cách tiếp cận của tôi cho vấn đề

$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; 
Các vấn đề liên quan