Get country name from latitude and longitude

15,512

Solution 1

I wrote a function to make it easy. Simply pass in your geo-address which can be a full address, zip code, or in your case latitude and longitude. It will then search through the address component array for the country. In the case that it is unable to find the county it will simply return null, you can change that to an empty string ("") if you need to.

function getGeoCounty($geoAddress) {
    $url = 'http://maps.google.com/maps/api/geocode/json?address=' . $geoAddress .'&sensor=false'; 
    $get     = file_get_contents($url);
    $geoData = json_decode($get);
    if (json_last_error() !== JSON_ERROR_NONE) {
        throw new \InvalidArgumentException('Invalid geocoding results');
    }

    if(isset($geoData->results[0])) {
        foreach($geoData->results[0]->address_components as $addressComponent) {
            if(in_array('administrative_area_level_2', $addressComponent->types)) {
                return $addressComponent->long_name; 
            }
        }
    }
    return null; 
}

Solution 2

Get complete Address from latitude and longitude.

$url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.trim($lat).','.trim($lng).'&sensor=false';
$json = @file_get_contents($url);$data=json_decode($json);
echo $data->results[0]->formatted_address;

Solution 3

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

Solution 4

$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;
Share:
15,512
Funti
Author by

Funti

Updated on June 14, 2022

Comments

  • Funti
    Funti almost 2 years

    I have a latitude and a longitude, and I need to fetch country.

    I am using this:

    $geocode_stats = file_get_contents("http://maps.googleapis.com/maps/api/geocode/json?latlng=".$deal_lat.",".$deal_long . "&sensor=false");
    $output_deals = json_decode($geocode_stats);
    $country = $output_deals->results[2]->address_components[4]->long_name;
    

    Sometimes it gives a correct country name, but sometimes it gives blank values, and sometimes it returns a city name.

    Can anybody help?

  • Harsh Patel
    Harsh Patel almost 9 years
    It is simple code if you need to find city name then replace in_array("country", $cn) to in_array("locality", $cn) if you need to find Zip code then replacein_array("country", $cn) to in_array("postal_code", $cn).
  • Mohammed Abrar Ahmed
    Mohammed Abrar Ahmed over 6 years
    how can i get the city?