How can I get city name from a latitude and longitude point?
This is called Reverse Geocoding
Documentation from Google:
http://code.google.com/apis/maps/documentation/geocoding/#ReverseGeocoding.
Sample Call to Google's geocode Web Service:
Here is a complete sample:
<!DOCTYPE html><html> <head> <title>Geolocation API with Google Maps API</title> <meta charset="UTF-8" /> </head> <body> <script> function displayLocation(latitude,longitude){ var request = new XMLHttpRequest(); var method = 'GET'; var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='+latitude+','+longitude+'&sensor=true'; var async = true; request.open(method, url, async); request.onreadystatechange = function(){ if(request.readyState == 4 && request.status == 200){ var data = JSON.parse(request.responseText); var address = data.results[0]; document.write(address.formatted_address); } }; request.send(); }; var successCallback = function(position){ var x = position.coords.latitude; var y = position.coords.longitude; displayLocation(x,y); }; var errorCallback = function(error){ var errorMessage = 'Unknown error'; switch(error.code) { case 1: errorMessage = 'Permission denied'; break; case 2: errorMessage = 'Position unavailable'; break; case 3: errorMessage = 'Timeout'; break; } document.write(errorMessage); }; var options = { enableHighAccuracy: true, timeout: 1000, maximumAge: 0 }; navigator.geolocation.getCurrentPosition(successCallback,errorCallback,options); </script> </body></html>
In node.js we can use node-geocoder npm module to get address from lat, lng.,
geo.js
var NodeGeocoder = require('node-geocoder');var options = { provider: 'google', httpAdapter: 'https', // Default apiKey: ' ', // for Mapquest, OpenCage, Google Premier formatter: 'json' // 'gpx', 'string', ...};var geocoder = NodeGeocoder(options);geocoder.reverse({lat:28.5967439, lon:77.3285038}, function(err, res) { console.log(res);});
output:
node geo.js
[ { formattedAddress: 'C-85B, C Block, Sector 8, Noida, Uttar Pradesh 201301, India', latitude: 28.5967439, longitude: 77.3285038, extra: { googlePlaceId: 'ChIJkTdx9vzkDDkRx6LVvtz1Rhk', confidence: 1, premise: 'C-85B', subpremise: null, neighborhood: 'C Block', establishment: null }, administrativeLevels: { level2long: 'Gautam Buddh Nagar', level2short: 'Gautam Buddh Nagar', level1long: 'Uttar Pradesh', level1short: 'UP' }, city: 'Noida', country: 'India', countryCode: 'IN', zipcode: '201301', provider: 'google' } ]