Google maps - получить название страны, региона и города по долготе и широте (PHP) - PullRequest
9 голосов
/ 03 апреля 2012

Я хотел бы получить название страны, региона и города по долготе и широте через API карт Google (V3?) - с помощью 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;
?>

Это прекрасно работает для получения правильных данных из моей страны, но не для других ...

Ответы [ 4 ]

25 голосов
/ 03 апреля 2012

Вы можете использовать второй API (предложенный Томасом) следующим образом:

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

Попробуйте это ..

Редактировать :::::

$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/>';
            }
7 голосов
/ 27 мая 2017

Вот мой подход к проблеме

$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;
6 голосов
/ 05 августа 2015
<?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;
?>
1 голос
/ 03 апреля 2012

Вы пытались использовать их API GeoCoding?

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

Пример: http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=false

Редактировать: я использовал его во многих приложениях, ориентированных на Индию, и онсработал довольно хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...