javascript - ¿Cómo obtener la ubicación del visitante (es decir, el país) usando geolocalización?
Estoy tratando de extender la función nativa de geolocalización
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
});
}
para que pueda usar el nombre del país del visitante (quizás devolver un arreglo informativo).
Hasta ahora, todo lo que he podido encontrar son funciones que muestran una interfaz de Google Maps, pero ninguna realmente ofrecía lo que quiero, excepto esta biblioteca que funcionó bien en este ejemplo, pero por alguna razón no funcionó en mi computadora. No estoy seguro de por qué salió mal allí.
De todos modos, ¿sabes cómo puedo simplemente devolver un arreglo que contenga información como país, ciudad, etc., a partir de valores de latitud y longitud?
Respuesta #1
Puedes usar mi servicio, http://ipinfo.io, para esto. Te dará la IP del cliente, el nombre de host, información de geolocalización (ciudad, región, país, código de área, código postal, etc.) y el propietario de la red. Aquí hay un ejemplo simple que registra la ciudad y el país:
$.get("https://ipinfo.io", function(response) {
console.log(response.city, response.country);
}, "jsonp");
Aquí tienes un ejemplo más detallado en JSFiddle que también imprime toda la información de la respuesta, para que puedas ver todos los detalles disponibles: http://jsfiddle.net/zK5FN/2/
La ubicación generalmente será menos precisa que los detalles de geolocalización nativos, pero no requiere ningún permiso del usuario.
Respuesta #2
Puedes hacer esto de forma nativa sin depender de servicios de IP. Puedes obtener la zona horaria del usuario así:
Intl.DateTimeFormat().resolvedOptions().timeZone
y luego extraer el país de ese valor. Aquí hay un ejemplo funcional en CodePen.
Respuesta #3
No necesitas localizar al usuario si solo necesitas su país. Puedes buscar su dirección IP en cualquier servicio de IP a ubicación (como maxmind, ipregistry o ip2location). Esto será preciso la mayor parte del tiempo.
Aquí hay un ejemplo del lado del cliente con Ipregistry (descargo de responsabilidad, trabajo para):
fetch('https://api.ipregistry.co/?key=tryout')
.then(function (response) {
return response.json();
})
.then(function (payload) {
console.log(payload.location.country.name + ', ' + payload.location.city);
});
Si realmente necesitas obtener su ubicación, puedes obtener su latitud/longitud con ese método, y luego consultar el servicio de geocodificación inversa de Google o Yahoo.
Respuesta #4
Puedes usar tu dirección IP para obtener tu 'país', 'ciudad', 'ISP', etc...
Solo usa uno de los servicios web que te proporcionan una API sencilla como http://ip-api.com que ofrece un servicio JSON en http://ip-api.com/json. Simplemente envía una solicitud Ajax (o Xhr) y luego analiza el JSON para obtener los datos que necesites.
var requestUrl = "http://ip-api.com/json";
$.ajax({
url: requestUrl,
type: 'GET',
success: function(json)
{
console.log("My country is: " + json.country);
},
error: function(err)
{
console.log("Request failed, error= " + err);
}
});
Respuesta #5
Mira ipdata.co, un servicio que construí que es rápido y tiene un rendimiento confiable gracias a tener 10 puntos de acceso globales, cada uno capaz de manejar más de 10,000 solicitudes por segundo.
Esta respuesta utiliza una Clave API 'de prueba' que es muy limitada y solo está destinada a probar algunas llamadas. Regístrate para obtener tu propia Clave API gratuita y obtén hasta 1500 solicitudes diarias para desarrollo.
Este fragmento devolverá los detalles de su ip actual. Para buscar otras direcciones ip, simplemente agregue la ip a la URL https://api.ipdata.co?api-key=test, por ejemplo.
https://api.ipdata.co/1.1.1.1?api-key=test
La API también proporciona un campo is_eu que indica si el usuario se encuentra en un país de la UE.
$.get("https://api.ipdata.co?api-key=test", function (response) {
$("#response").html(JSON.stringify(response, null, 4));
}, "jsonp");<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre id="response"></pre>Aquí está el fiddle; https://jsfiddle.net/ipdata/6wtf0q4g/922/
También escribí este análisis detallado de 8 de las mejores API de geolocalización IP.
Respuesta #6
Un servicio muy fácil de usar es proporcionado por ws.geonames.org. Aquí hay un ejemplo de URL:
http://ws.geonames.org/countryCode?lat=43.7534932&lng=28.5743187&type=JSON
Y aquí hay un código (jQuery) que he agregado a tu código:
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
$.getJSON('http://ws.geonames.org/countryCode', {
lat: position.coords.latitude,
lng: position.coords.longitude,
type: 'JSON'
}, function(result) {
alert('Country: ' + result.countryName + '\n' + 'Code: ' + result.countryCode);
});
});
}
Pruébalo en jsfiddle.net ...
