2012-08-08 26 views
5

En muchos sitios vi imprimir mi ciudad actual donde estoy (por ejemplo, "Hola a Berlín"). ¿Cómo hacen eso? ¿Qué se necesita para eso? Supongo que la parte principal es aquí javascript, pero ¿qué necesito para implementar algo como esto en mi propia aplicación? (¿o hay alguna joya para Rails?)¿Cómo obtener la geolocalización del usuario?

Además, me gustaría preguntar una cosa aún: soy interesante en la lista de estados (generalmente en el cuadro de selección), donde el usuario selecciona su estado (digamos Alemania), de acuerdo con el valor del estado se encuentran en otro seleccione mostrar todas las regiones en Alemania y después de elegir una región se muestran ciudades respectivas en la región seleccionada.

¿Es posible en cualquier lugar obtener esta enorme base de datos de estados/ciudades/regiones? Sería interesante tener algo similar en nuestra aplicación, pero no sé, dónde se obtienen esas listas ...

Respuesta

3

necesita un navegador que soporta la API de geolocalización para obtener la ubicación de el usuario (sin embargo, necesita el consentimiento del usuario (un ejemplo here) para hacerlo (la mayoría de los navegadores más nuevos admiten esa función, incluidos IE9 + y la mayoría de los navegadores de OS móvil, incluido Windows Phone 7.5+).

todo lo que tiene a no se esté usando JavaScript para obtener la ubicación:

if (window.navigator.geolocation) { 
    var failure, success; 
    success = function(position) { 
     console.log(position); 
    }; 
    failure = function(message) { 
     alert('Cannot retrieve location!'); 
    }; 
    navigator.geolocation.getCurrentPosition(success, failure, { 
     maximumAge: Infinity, 
     timeout: 5000 
    }); 
} 

El objeto position llevará a cabo latitud y longitud de la posición del usuario (sin embargo, esto puede ser muy impreciso en las zonas menos densamente pobladas en los navegadores de escritorio, ya que no tienen un dispositivo GPS incorporado). Para seguir explicando: aquí en Leipzig, obtengo una precisión de unos 300 metros en una computadora de escritorio; obtengo una precisión de unos 30 metros con el dispositivo GPS de mi teléfono celular.

Luego puede continuar y usar las coordenadas con Google Maps API (ver here for reverse geocoding) para buscar la ubicación del usuario. Hay un few gems for Rails, si lo desea. Nunca sentí la necesidad de usarlos, pero a algunas personas parece gustarles.

En cuanto a una lista de países/ciudades, utilizamos los datos que se pueden obtener de Geonames una vez en un proyecto, pero primero tuvimos que convertirlo para nuestras necesidades.

0

Los proveedores de servicios de Internet compran grandes cantidades de direcciones IP, por lo que lo más probable es que rastree su IP a un ISP conocido. Tienen una base de datos con ISP y su ubicación en el mundo, por lo que pueden tratar de ver de dónde eres. Podría intentar usar un sitio como http://www.ipaddresslocation.org/ para hacer su trabajo. Si miras a tu alrededor, es probable que haya un sitio que te permita ingresar una dirección IP y obtener una ubicación, por lo que solo debes enviar una solicitud POST a ese sitio con la dirección IP de visitante y borrar la ubicación de la respuesta.

Alternativamente, podría tratar de buscar una base de datos de ISP que tenga la ubicación y los fragmentos del rango de IP que se les haya asignado. Probablemente puedas encontrar uno por dinero, pero uno gratuito puede ser más difícil de encontrar. alternativa, echa un vistazo a esta base de datos libre http://www.maxmind.com/app/geolite

1

He encontrado getCurrentPosition() a menudo ser inexacto, ya que no pasa mucho tiempo esperando que el GPS adquiera una buena precisión.Escribí un pequeño fragmento de JavaScript que imita a getCurrentPosition(), pero en realidad usa la posición del reloj y monitorea los resultados que regresan hasta que tienen una mayor precisión.

Así es como se ve:

navigator.geolocation.getAccurateCurrentPosition(onSuccess, onError, {desiredAccuracy:20, maxWait:15000}); 

Código es aquí - https://github.com/gwilson/getAccurateCurrentPosition

1

sintaxis Correc sería:

navigator.geolocation.getCurrentPosition(successCallBack, failureCallBack); 

Uso:

navigator.geolocation.getCurrentPosition(
     function(position){ 
      var latitude = position.coords.latitude; 
      var longitude = position.coords.longitude; 
      console.log("Latitude : "+latitude+" Longitude : "+longitude); 
     }, 
     function(){ 
      alert("Geo Location not supported"); 
     } 
    );   
0

he estado u canta geoip.maxmind.com por bastante tiempo y funciona al 100%. Se puede acceder a través de solicitudes HTTP.

0

Si prefiere utilizar ES6 y promete aquí es otra versión

function getPositionPromised() { 
    function successCb(cb) { 
    return position => cb(position); 
    } 

    function errorCb(cb) { 
    return() => cb('Could not retrieve geolocation'); 
    } 

    return new Promise((resolve, reject) => { 
    if (window.navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(successCb(resolve), errorCb(reject)); 
    } else { 
     return reject('No geolocation support'); 
    } 
    }) 
} 

y se puede utilizar de esta manera:

getPositionPromised() 
    .then(position => {/*do something with position*/}) 
    .catch(() => {/*something went wrong*/}) 
Cuestiones relacionadas