Is there a way to get a city name from a latitude and longitude point using the google maps api for javascript?
If so could I please see an example?
Is there a way to get a city name from a latitude and longitude point using the google maps api for javascript?
If so could I please see an example?
Here is the latest sample of Google's geocode Web Service
https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&key=YOUR_API_KEY
Simply change the YOUR_API_KEY to the API key you get from Google Geocoding API
P/S: Geocoding API is under Places NOT Maps ;)
BigDataCloud also has a nice API for this, also for nodejs users.
they have API for client - free. But also for backend, using API_KEY (free according to quota).
the code looks like:
const client = require('@bigdatacloudapi/client')(API_KEY);
async foo() {
...
const location: string = await client.getReverseGeocode({
latitude:'32.101786566878445',
longitude: '34.858965073072056'
});
}
In case if you don't want to use google geocoding API than you can refer to few other Free APIs for the development purpose. for example i used [mapquest] API in order to get the location name.
you can fetch location name easily by implementing this following function
const fetchLocationName = async (lat,lng) => {
await fetch(
'https://www.mapquestapi.com/geocoding/v1/reverse?key=API-Key&location='+lat+'%2C'+lng+'&outFormat=json&thumbMaps=false',
)
.then((response) => response.json())
.then((responseJson) => {
console.log(
'ADDRESS GEOCODE is BACK!! => ' + JSON.stringify(responseJson),
);
});
};
Following Code Works Fine For Me to Get City, state, country, zipcode (Using Google Map Geo API) :
var url = "https://maps.googleapis.com/maps/api/geocode/json?latlng="+lat+","+long+"&key=KEY_HERE&sensor=false";
$.get(url, function(data) {
var results = data.results;
if (data.status === 'OK')
{
//console.log(JSON.stringify(results));
if (results[0])
{
var city = "";
var state = "";
var country = "";
var zipcode = "";
var address_components = results[0].address_components;
for (var i = 0; i < address_components.length; i++)
{
if (address_components[i].types[0] === "administrative_area_level_1" && address_components[i].types[1] === "political") {
state = address_components[i].long_name;
}
if (address_components[i].types[0] === "locality" && address_components[i].types[1] === "political" ) {
city = address_components[i].long_name;
}
if (address_components[i].types[0] === "postal_code" && zipcode == "") {
zipcode = address_components[i].long_name;
}
if (address_components[i].types[0] === "country") {
country = address_components[i].long_name;
}
}
var address = {
"city": city,
"state": state,
"country": country,
"zipcode": zipcode,
};
console.log(address);
}
else
{
window.alert('No results found');
}
}
else
{
window.alert('Geocoder failed due to: ' + status);
}
});
There are many tools available
other free and paid tools are available also
you can do it with pure php and google geocode api
/*
*
* @param latlong (String) is Latitude and Longitude with , as separator for example "21.3724002,39.8016229"
**/
function getCityNameByLatitudeLongitude($latlong)
{
$APIKEY = "AIzaXXXXXXXXXXXXXXXXXXXXXXXXXXX"; // Replace this with your google maps api key
$googleMapsUrl = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" . $latlong . "&language=ar&key=" . $APIKEY;
$response = file_get_contents($googleMapsUrl);
$response = json_decode($response, true);
$results = $response["results"];
$addressComponents = $results[0]["address_components"];
$cityName = "";
foreach ($addressComponents as $component) {
// echo $component;
$types = $component["types"];
if (in_array("locality", $types) && in_array("political", $types)) {
$cityName = $component["long_name"];
}
}
if ($cityName == "") {
echo "Failed to get CityName";
} else {
echo $cityName;
}
}