¿Cómo obtener la ubicación del visitante (es decir, el país) usando la geolocalización?

9 minutos de lectura

¿Como obtener la ubicacion del visitante es decir el pais
Galón

Estoy tratando de extender la función de geolocalización nativa

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 (tal vez devolver una matriz informativa).

Hasta ahora, todo lo que he podido encontrar son funciones que muestran una interfaz de Google Maps, pero ninguna me dio 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, ¿sabe cómo puedo simplemente devolver una matriz que contiene información como país, ciudad, etc. a partir de valores de latitud y longitud?

  • $.get("https://api.ipdata.co", function (response) { $("#response").html(JSON.stringify(response, null, 4)); }, "jsonp");

    – Jonathan

    6 de noviembre de 2017 a las 11:13


  • ver el violín jsfiddle.net/6wtf0q4g

    – Jonathan

    6 de noviembre de 2017 a las 11:14

  • Un descargo de responsabilidad rápido, construí el servicio anterior ipdata.co, ¡también es extremadamente escalable con 10 puntos finales globales, cada uno capaz de manejar> 800 millones de llamadas diarias!

    – Jonathan

    18 de febrero de 2018 a las 11:41


  • @SamuelLiew No creo que el duplicado en este caso sea válido. Esta pregunta se refiere específicamente a la geolocalización, mientras que la pregunta duplicada se refiere a la ubicación, una pregunta similar pero distinta (ya que la ubicación no incluye latitud y longitud, ciudad, etc.).

    – Mono hereje

    24 de noviembre de 2020 a las 14:30

1646034910 984 ¿Como obtener la ubicacion del visitante es decir el pais
ben dowling

Puedes usar mi servicio, http://ipinfo.io, para esto. Le dará la IP del cliente, el nombre de host, la 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í hay un ejemplo de JSFiddle más detallado que también imprime la información de respuesta completa, para que pueda ver todos los detalles disponibles: http://jsfiddle.net/zK5FN/2/

La ubicación generalmente será menos precisa que los detalles nativos de geolocalización, pero no requiere ningún permiso del usuario.

  • Esto no funciona para mí, cuando solicito datos, obtengo el sitio web completo como respuesta. ¿Hay un mejor servicio para llamar tal vez?

    – nf071590

    12 dic 2015 a las 20:45

  • Puede forzar una respuesta json agregando /json a la url. ¿Con qué estás haciendo la solicitud? Debería detectar automáticamente que desea json.

    – Ben Dowling

    12 de diciembre de 2015 a las 21:16

  • Pero no admite sitios con “https”. Eso es tan triste.

    – Sabin Chacko

    19 de septiembre de 2016 a las 13:21

  • Tenga en cuenta que en la página de precios: > Si necesita realizar menos de 1000 solicitudes por día a nuestra API y es para uso no comercial, o simplemente desea probar las cosas, regístrese en el plan gratuito. De lo contrario, seleccione uno de los planes pagos a continuación. – ipinfo.io/precios

    – pdeschen

    28/10/2017 a las 21:10


  • En lugar de responder una pregunta técnica, estás publicitando tu empresa, ¿qué pasa? Todas las preguntas de SO se pueden responder de esta manera. : “Llámanos y habla con nuestros asesores”

    – Milad

    17 de agosto de 2020 a las 2:00

¿Como obtener la ubicacion del visitante es decir el pais
Galeno

No necesitas localizar al usuario si solo necesitas su país. Puede buscar su dirección IP en cualquier servicio de IP a ubicación (como mente máxima, registroip o ip2ubicación). Esto será exacto la mayor parte del tiempo.

Aquí hay un ejemplo del lado del cliente con Ipregistry (descargo de responsabilidad, estoy trabajando 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 necesita obtener su ubicación, puede obtener su latitud/longitud con ese método y luego consultar de Google o yahoo servicio de geocodificación inversa.

  • @juanpastas tu no. simplemente hace ping a un servicio y el servicio lo sabrá. o usted mismo escribe el servicio, pero eso está fuera del alcance puro de javascript.

    – tismá

    7 de noviembre de 2014 a las 22:56

  • pero para hacer ping a un servicio, ¿eso estaría en el lado del servidor? ¿Conoces una manera de hacer eso desde el cliente?

    – sitios

    8 de noviembre de 2014 a las 0:14

  • ¿Qué sucede si accedo a Internet a través de un proxy en un país diferente?

    – Liam

    11 oct 2018 a las 16:01

  • ipregistry.co es más generosa que otras alternativas. tiene un nivel gratuito de llamadas API de 100k, el registro es simple y no requiere ingresar una tarjeta de crédito.

    – Maksim Shamihulau

    17/01/2021 a las 18:30

  • Buena recomendación, probé iregistry y la información es bastante sencilla.

    – Mihail Minkov

    19 de febrero de 2021 a las 2:13

Puede usar su dirección IP para obtener su ‘país’, ‘ciudad’, ‘isp’, etc.
Simplemente use uno de los servicios web que le brindan una API simple como http://ip-api.com que le proporcionan un servicio JSON en http://ip-api.com/json. Simplemente envíe una solicitud Ajax (o Xhr) y luego analice el JSON para obtener los datos que necesita.

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);
  }
});

  • Ya que ip-api.com no admite la solicitud https, la mayoría de los navegadores rechazarán la solicitud si se llama desde un contenido/página https. Además, según su sitio web, > Puede usar ip-api.com para uso no comercial. No permitimos el uso comercial sin aprobación previa.

    – pdeschen

    28/10/2017 a las 21:19

  • ip-api es solo un ejemplo de los diferentes servicios que brindan el servicio de ubicación IP. La pregunta no se refiere a https protocolos si usas https sitio web Estoy seguro de que podría implementar la misma lógica, solo con un servicio de ubicación de IP diferente.

    – Gil Epshtain

    29/10/2017 a las 13:10

no puede obtener la ubicación de la ciudad por ip. aquí puedes obtener el país con jquery:

$.get("http://ip-api.com/json", function(response) {
console.log(response.country);}, "jsonp");

  • Eso es falso. El servicio es gratuito hasta 45.000 solicitudes al mes. El plan más pequeño es de $10 y el error mencionado se devuelve para evitar abusos. Tenga en cuenta que también va acompañado de un correo electrónico para advertirle que ha agotado todas sus solicitudes.

    – Jonathan

    29 de marzo de 2020 a las 11:08


  • mi comentario no es falso

    – tfa

    1 de abril de 2020 a las 18:16

  • Su comentario es inherentemente falso y engañoso.

    – Jonathan

    1 mayo 2020 a las 15:55

Un servicio muy fácil de usar es proporcionado por ws.geonames.org. Aquí hay una URL de ejemplo:

http://ws.geonames.org/countryCode?lat=43.7534932&lng=28.5743187&type=JSON

Y aquí hay un código (jQuery) que he agregado a su 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);
        });
    });
}​

Intentalo jsfiddle.net

Se proporciona un servicio gratuito y fácil de usar en Webtechriser (haga clic aquí para leer el artículo) (llamado wipmanía). este es un JSONP servicio y requiere llanura javascript codificando con HTML. También se puede utilizar en JQuery. Modifiqué un poco el código para cambiar el formato de salida y esto es lo que he usado y encontré que funciona: (es el código de mi página HTML)

<html>
    <body>
        <p id="loc"></p>


        <script type="text/javascript">
            var a = document.getElementById("loc");

  	            function jsonpCallback(data) { 
	            a.innerHTML = "Latitude: " + data.latitude + 
                              "<br/>Longitude: " + data.longitude + 
                              "<br/>Country: " + data.address.country; 
 	            }
        </script>
        <script src="http://api.wipmania.com/jsonp?callback=jsonpCallback"
                     type="text/javascript"></script>


    </body>
</html>

TENGA EN CUENTA: Este servicio obtiene la ubicación del visitante. sin incitando al visitante a elegir si desea compartir su ubicación, a diferencia del API de geolocalización HTML 5 (el código que has escrito). Por lo tanto, la privacidad se ve comprometida. Por lo tanto, debe hacer un uso judicial de este servicio.

Quería localizar los precios del lado del cliente para algunos países sin usar ninguna API externa, así que usé el objeto Date local para buscar el país usando la nueva Date()).toString().split(‘(‘)[1].separar(” “)[0]

    document.write((new Date()).toString().split('(')[1].split(" ")[0])

Básicamente, este pequeño fragmento de código extrae la primera palabra del objeto Fecha. Para verificar varias zonas horarias, puede cambiar la hora de su máquina local.

En mi caso, nuestro servicio solo incluía tres países, por lo que pude obtener la ubicación usando el siguiente código.

const countries = ["India", "Australia", "Singapore"]
const countryTimeZoneCodes = {
  "IND": 0,
  "IST": 0,
  "AUS": 1,
  "AES": 1,
  "ACS": 1,
  "AWS": 1,
  "SGT": 2,
  "SIN": 2,
  "SST": 2
} // Probable three characters from timezone part of Date object
let index = 0
try {
  const codeToCheck = (new Date()).toString().split('(')[1].split(" ")[0].toUpperCase().substring(0, 3)
  index = countryTimeZoneCodes[codeToCheck]

} catch (e) {

  document.write(e)
  index = 0
}

document.write(countries[index])

Esto fue solo para mejorar la experiencia del usuario. No es una solución de prueba completa para detectar la ubicación. Como alternativa por no detectar correctamente, agregué un menú desplegable en la barra de menú para seleccionar el país.

  • Esto es solo para mejorar la experiencia del usuario, en lugar de pedirle al nuevo usuario que seleccione el país del menú desplegable, podemos proporcionar una selección automática para algunos. Y para su parte este, ya sea que sea de EE. UU. O de Canadá. Referir en.wikipedia.org/wiki/Eastern_Time_Zone

    – ak100

    13 de junio de 2021 a las 1:38

  • Esto no está funcionando en mi extremo.

    – Diego Fortés

    30 de enero a las 23:37

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad