Get location from latitude and longitude in PHP

49,363

Solution 1

Try Below one:

<?php 
$geolocation = $latitude.','.$longitude;
$request = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.$geolocation.'&sensor=false'; 
$file_contents = file_get_contents($request);
$json_decode = json_decode($file_contents);
if(isset($json_decode->results[0])) {
    $response = array();
    foreach($json_decode->results[0]->address_components as $addressComponet) {
        if(in_array('political', $addressComponet->types)) {
                $response[] = $addressComponet->long_name; 
        }
    }

    if(isset($response[0])){ $first  =  $response[0];  } else { $first  = 'null'; }
    if(isset($response[1])){ $second =  $response[1];  } else { $second = 'null'; } 
    if(isset($response[2])){ $third  =  $response[2];  } else { $third  = 'null'; }
    if(isset($response[3])){ $fourth =  $response[3];  } else { $fourth = 'null'; }
    if(isset($response[4])){ $fifth  =  $response[4];  } else { $fifth  = 'null'; }

    if( $first != 'null' && $second != 'null' && $third != 'null' && $fourth != 'null' && $fifth != 'null' ) {
        echo "<br/>Address:: ".$first;
        echo "<br/>City:: ".$second;
        echo "<br/>State:: ".$fourth;
        echo "<br/>Country:: ".$fifth;
    }
    else if ( $first != 'null' && $second != 'null' && $third != 'null' && $fourth != 'null' && $fifth == 'null'  ) {
        echo "<br/>Address:: ".$first;
        echo "<br/>City:: ".$second;
        echo "<br/>State:: ".$third;
        echo "<br/>Country:: ".$fourth;
    }
    else if ( $first != 'null' && $second != 'null' && $third != 'null' && $fourth == 'null' && $fifth == 'null' ) {
        echo "<br/>City:: ".$first;
        echo "<br/>State:: ".$second;
        echo "<br/>Country:: ".$third;
    }
    else if ( $first != 'null' && $second != 'null' && $third == 'null' && $fourth == 'null' && $fifth == 'null'  ) {
        echo "<br/>State:: ".$first;
        echo "<br/>Country:: ".$second;
    }
    else if ( $first != 'null' && $second == 'null' && $third == 'null' && $fourth == 'null' && $fifth == 'null'  ) {
        echo "<br/>Country:: ".$first;
    }
  }
?>

Solution 2

Use Google Geocode API to get the location from latitude and longitude.

Here the simple PHP script for that.

$latitude = 'Insert Latitude';
$longitude = 'Insert Longitude';

$geocodeFromLatLong = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?latlng='.trim($latitude).','.trim($longitude).'&sensor=false'); 
$output = json_decode($geocodeFromLatLong);
$status = $output->status;
$address = ($status=="OK")?$output->results[1]->formatted_address:'';

The above source code is found from here - Get Address from Latitude and Longitude using Google Maps API and PHP

Share:
49,363

Related videos on Youtube

Zarif
Author by

Zarif

Updated on July 09, 2022

Comments

  • Zarif
    Zarif almost 2 years

    I want to get address, city, state and country in different variables so that I can display it separately but due to different latlong, somewhere I am getting whole address and somewhere only state and country, so I am not able to get a specific address due to changing latlong.

    Here is my code:

    $geoLocation=array();
    $URL = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=8.407168,6.152344&sensor=false';
    $data = file_get_contents($URL);
    $geoAry = json_decode($data,true);
    for($i=0;$i<count($geoAry['results']);$i++){
       if($geoAry['results'][$i]['types'][0]=='sublocality_level_1'){
         $address=$geoAry['results'][$i]['address_components'][0]['long_name'];
         $city=$geoAry['results'][$i]['address_components'][1]['long_name'];
         $state=$geoAry['results'][$i]['address_components'][3]['long_name'];
         $country=$geoAry['results'][$i]['address_components'][4]['long_name'];
         break;
      }
      else {
         $address=$geoAry['results'][0]['address_components'][2]['long_name'];
         $city=$geoAry['results'][0]['address_components'][3]['long_name'];
         $state=$geoAry['results'][0]['address_components'][5]['long_name'];
         $country=$geoAry['results'][0]['address_components'][6]['long_name'];
      }
    }
    $geoLocation = array(
      'city'=>$city,
      'state'=>$state,
      'country'=>$country,
      'address'=>$address
    );
    print_r($geoLocation);
    
  • Mr. Tomar
    Mr. Tomar about 6 years
    @SHAZ Its work with API key and SSL otherwise it works one or two times and then gives error "You have exceeded your daily request quota for this API."
  • Mr. Tomar
    Mr. Tomar about 6 years
    @SHAZ what u think?
  • Shahzad Barkati
    Shahzad Barkati about 6 years
    Yes, API key needed means you have to login into google's developer account and enable map service and get key for project u created. Also sensor deprecated now by google
  • Muhammed Shihabudeen Labba A
    Muhammed Shihabudeen Labba A almost 4 years
    file_get_contents() has been disabled for security reasons.
  • Shahzad Barkati
    Shahzad Barkati almost 4 years
    @MuhammedShihabudeenLabbaA you can use "CURL" instead of "file_get_contents()"