studio programacion lite java geolocation

programacion - La mejor manera de obtener una ubicación geográfica en Java



geoip lite (10)

Aquí hay un ejemplo basado en la API ipdata.co, que es gratuita hasta 1500 solicitudes por día.

Reemplace 8.8.8.8 con la ip que desea buscar

// Maven : Add these dependecies to your pom.xml (java6+) // <dependency> // <groupId>org.glassfish.jersey.core</groupId> // <artifactId>jersey-client</artifactId> // <version>2.8</version> // </dependency> // <dependency> // <groupId>org.glassfish.jersey.media</groupId> // <artifactId>jersey-media-json-jackson</artifactId> // <version>2.8</version> // </dependency> import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.core.Response; import javax.ws.rs.core.MediaType; Client client = ClientBuilder.newClient(); Response response = client.target("https://api.ipdata.co/8.8.8.8?api-key=test") .request(MediaType.TEXT_PLAIN_TYPE) .header("Accept", "application/json") .get(); System.out.println("status: " + response.getStatus()); System.out.println("headers: " + response.getHeaders()); System.out.println("body:" + response.readEntity(String.class));

¿Cuál es la mejor manera de obtener una ubicación geográfica en Java (libremente si es posible)?

Actualización: No desde un dispositivo GPS. Básicamente cómo lo hace Firefox 3.5 / HTML 5


Dice que está de acuerdo con los servicios web, por lo que podría usar mi API http://ipinfo.io . Aquí hay un ejemplo de salida JSON para una dirección IP:

$ curl ipinfo.io { "ip": "24.6.61.239", "hostname": "c-24-6-61-239.hsd1.ca.comcast.net", "city": "Mountain View", "region": "California", "country": "US", "loc": "37.3845,-122.0881", "org": "AS7922 Comcast Cable Communications, LLC", "postal": "94040" }

Vea https://ipinfo.io/developers para más detalles.






Si desea saber cómo Firefox 3.5 (o Google Chrome) obtiene la geolocalización, eche un vistazo aquí: Cómo funciona la API de geolocalización de Google / Firefox

Básicamente, lo que hace Firefox 3.5 (y Chrome) es obtener la lista de redes Wi-Fi cercanas y enviar esa lista utilizando JSON a un servicio web de Google, que luego devolverá las coordenadas aproximadas.

Por cierto, no hay Java involucrado en este proceso. Para obtener la geolocalización de Firefox / Chrome, solo tiene que llamar a algunos métodos de JavaScript. (Realmente espero que sepas que Java es diferente de JavaScript)


Si entiendo lo suficiente, desea obtener la ubicación geográfica de los visitantes de su sitio o aplicación web. Las alternativas que conozco son:

Google Gears tiene algunas funciones para hacer GeoLocation ( http://code.google.com/apis/gears/api_geolocation.html ), pero es necesario instalar Gears

Uso de las funciones de JavaScript que llaman a un servicio en línea como las herramientas de ubicación de IP (www dot iplocationtools dot com). El sitio tiene ejemplos e incluso tiene un video tutorial.


Si necesita una base de datos local, puede consultar lo que IPInfoDB tiene para ofrecer.

Si puede usar un servicio web, hay un número por ahí, pero no estoy seguro de lo que permiten sus Términos de servicio. Una búsqueda en Google del "servicio web de búsqueda de geolocalización ip" muestra algunas cosas, pero muchas de ellas son productos comerciales y usted tendría que leer sus ToS cuidadosamente para asegurarse de que los usa dentro de las pautas.


Una forma sencilla es con GeoLite ( http://dev.maxmind.com/geoip/legacy/geolite/ ). Debido a que utiliza una base de datos local, no se necesitan llamadas de servicio web y es mucho más rápido para geocodificar grandes números de IP.

Aquí es cómo:

Añadir este artefacto Maven:

<dependency> <groupId>com.maxmind.geoip</groupId> <artifactId>geoip-api</artifactId> <version>1.2.11</version> </dependency>

Descargue el archivo de datos de geolocalización de http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

Desembale el archivo en cualquier carpeta. Entonces hazlo:

LookupService cl = new LookupService("/var/geolite/GeoLiteCity.dat", LookupService.GEOIP_MEMORY_CACHE | LookupService.GEOIP_CHECK_CACHE); Location location = cl.getLocation("some ip address");

El resultado estará en el objeto Ubicación en las propiedades de latitud, longitud, ciudad, región y código de país.

Eche un vistazo a sus estimaciones de precisión para asegurarse de que satisfaga las necesidades de su proyecto: http://www.maxmind.com/en/geolite_city_accuracy .