javascript - tipos - mapa de latitud y longitud
¿Cómo puedo obtener el nombre de la ciudad desde un punto de latitud y longitud? (6)
Aquí hay una solución moderna que usa una promesa:
function getAddress (latitude, longitude) {
return new Promise(function (resolve, reject) {
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) {
if (request.status == 200) {
var data = JSON.parse(request.responseText);
var address = data.results[0];
resolve(address);
}
else {
reject(request.status);
}
}
};
request.send();
});
};
Y llámalo así:
getAddress(lat, lon).then(console.log).catch(console.error);
La promesa devuelve el objeto de dirección en ''entonces'' o el código de estado de error en ''captura''
¿Hay alguna manera de obtener un nombre de ciudad desde un punto de latitud y longitud con la API de google api para javascript?
Si es así, ¿podría ver un ejemplo?
El siguiente código funciona bien para obtener el nombre de la ciudad (usando Google Map Geo API ):
HTML
<p><button onclick="getLocation()">Get My Location</button></p>
<p id="demo"></p>
<script src="http://maps.google.com/maps/api/js?key=YOUR_API_KEY"></script>
GUIÓN
var x=document.getElementById("demo");
function getLocation(){
if (navigator.geolocation){
navigator.geolocation.getCurrentPosition(showPosition,showError);
}
else{
x.innerHTML="Geolocation is not supported by this browser.";
}
}
function showPosition(position){
lat=position.coords.latitude;
lon=position.coords.longitude;
displayLocation(lat,lon);
}
function showError(error){
switch(error.code){
case error.PERMISSION_DENIED:
x.innerHTML="User denied the request for Geolocation."
break;
case error.POSITION_UNAVAILABLE:
x.innerHTML="Location information is unavailable."
break;
case error.TIMEOUT:
x.innerHTML="The request to get user location timed out."
break;
case error.UNKNOWN_ERROR:
x.innerHTML="An unknown error occurred."
break;
}
}
function displayLocation(latitude,longitude){
var geocoder;
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(latitude, longitude);
geocoder.geocode(
{''latLng'': latlng},
function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
var add= results[0].formatted_address ;
var value=add.split(",");
count=value.length;
country=value[count-1];
state=value[count-2];
city=value[count-3];
x.innerHTML = "city name is: " + city;
}
else {
x.innerHTML = "address not found";
}
}
else {
x.innerHTML = "Geocoder failed due to: " + status;
}
}
);
}
En node.js podemos usar node-geocoder npm module para obtener la dirección de 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);
});
salida:
nodo 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'' } ]
Esto se llama geocodificación inversa
Documentación de Google:
http://code.google.com/apis/maps/documentation/geocoding/#ReverseGeocoding .
Ejemplo de llamada al servicio web de geocodificación de Google:
http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true
Igual que @Sanchit Gupta.
en esta parte
if (results[0]) {
var add= results[0].formatted_address ;
var value=add.split(",");
count=value.length;
country=value[count-1];
state=value[count-2];
city=value[count-3];
x.innerHTML = "city name is: " + city;
}
solo consola la matriz de resultados
if (results[0]) {
console.log(results[0]);
// choose from console whatever you need.
var city = results[0].address_components[3].short_name;
x.innerHTML = "city name is: " + city;
}
Aquí hay una muestra completa:
<!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>