web-dev-qa-db-fra.com

Meilleure façon d'obtenir la géolocalisation dans Java

Quelle est la meilleure façon d'obtenir la géolocalisation dans Java (librement si possible)?

Mise à jour: pas depuis un appareil GPS. Fondamentalement, comment Firefox 3.5/HTML 5 le fait

20
yxk

Un moyen simple est avec GeoLite ( http://dev.maxmind.com/geoip/legacy/geolite/ ). Parce qu'il utilise une base de données locale, aucun appel de service Web n'est nécessaire et il est beaucoup plus rapide pour géocoder un grand nombre d'adresses IP.

Voici comment:

Ajoutez cet artefact Maven:

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

Téléchargez le fichier de données de géolocalisation à partir de http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

Décompressez le fichier dans n'importe quel dossier. Alors fais:

LookupService cl = new LookupService("/var/geolite/GeoLiteCity.dat",
                    LookupService.GEOIP_MEMORY_CACHE | LookupService.GEOIP_CHECK_CACHE);

Location location = cl.getLocation("some ip address");

Le résultat sera dans l'objet Location dans les propriétés latitude, longitude, ville, région et countryCode.

Veuillez consulter leurs estimations de précision pour vous assurer qu'elles répondent aux besoins de votre projet: http://www.maxmind.com/en/geolite_city_accuracy .

16
Marquez

La meilleure bibliothèque open-source pour la géolocalisation en Java est maintenant http://geo-google.sourceforge.net/index.html , basée sur l'API Google Maps (vous avez juste besoin d'une clé API google maps pour l'utiliser)

4
Michael Pereira

Si vous avez besoin d'une base de données locale, vous pouvez vérifier ce que IPInfoDB a à offrir.

Si vous pouvez utiliser un service Web, il y en a un certain nombre, mais je ne suis pas sûr de ce que leurs conditions d'utilisation permettent. A La recherche Google pour "service Web de recherche de géolocalisation ip" révèle certains éléments, mais bon nombre d'entre eux sont des produits commerciaux et vous devrez lire attentivement leurs conditions d'utilisation pour vous assurer de les utiliser conformément aux directives.

2
Thomas Owens
1

Je recommande d'utiliser http://jgeocoder.sourceforge.net/ si vous utilisez svn jgeocoder - Free Java Geocoder

1

Voici un exemple basé sur l'API ipdata.co qui est gratuite jusqu'à 1500 requêtes/jour.

Remplacer 8.8.8.8 avec l'ip que vous souhaitez rechercher

// 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));
1
Jonathan

L'un des meilleurs clients que j'ai utilisé jusqu'à présent est de Ipregistry :

https://github.com/ipregistry/ipregistry-Java

Il a un support natif pour la mise en cache, fonctionne avec Java 8+ et les dépendances sont disponibles sur Maven Central. En outre, la gestion des erreurs est bien conçue.

1
BonieE

Si je comprends bien, vous souhaitez obtenir la position géographique des visiteurs de votre site ou application Web. Les alternatives que je connais sont:

Google Gears a quelques fonctions pour faire de la géolocalisation ( http://code.google.com/apis/gears/api_geolocation.html ), mais il faut installer Gears

Utiliser des fonctions JavaScript qui appellent un service en ligne tel que les outils de localisation IP (www dot iplocationtools dot com). Le site contient des exemples et même un didacticiel vidéo.

1
Mig

Si vous voulez savoir comment Firefox 3.5 (ou Google Chrome) obtient la géolocalisation, veuillez jeter un œil ici: Comment fonctionne l'API de géolocalisation Google/Firefox

Fondamentalement, Firefox 3.5 (ainsi que Chrome) fait pour obtenir la liste des réseaux Wi-Fi à proximité et envoyer cette liste à l'aide de JSON à un service Web Google, qui renverra ensuite les coordonnées approximatives.

Soit dit en passant, il n'y a pas Java impliqué dans ce processus. Pour obtenir la géolocalisation à partir de Firefox/Chrome, vous n'avez qu'à appeler quelques méthodes JavaScript. (J'espère vraiment que vous savez que Java est différent de JavaScript)

1
Denilson Sá Maia

Vous dites que vous êtes d'accord avec les services Web, vous pouvez donc utiliser mon API http://ipinfo.io . Voici un exemple de sortie JSON pour une adresse 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"
}

Voir https://ipinfo.io/developers pour plus de détails.

0
Ben Dowling