Domanda Il modo migliore per ottenere la geo-localizzazione in Java


Qual è il modo migliore per ottenere la geo-localizzazione in Java (liberamente se possibile)?

Aggiornamento: non da un dispositivo GPS. Fondamentalmente come Firefox 3.5 / HTML 5 lo fa


17
2017-09-12 19:02


origine


risposte:


Un modo semplice è con GeoLite (http://dev.maxmind.com/geoip/legacy/geolite/). Poiché utilizza un database locale, non sono necessarie chiamate al servizio Web ed è molto più veloce per la geocodifica di un numero elevato di IP.

Ecco come:

Aggiungi questo artefatto Maven:

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

Scarica il file di dati di geolocalizzazione da http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz 

Scompattare il file in una cartella qualsiasi. Quindi fa:

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

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

Il risultato sarà nell'oggetto Posizione nelle proprietà di latitudine, longitudine, città, regione e paese.

Si prega di dare un'occhiata alle loro stime di accuratezza per garantire che soddisfi le esigenze del tuo progetto: http://www.maxmind.com/en/geolite_city_accuracy .


15
2017-10-18 18:07



Il più grande database di WiFi-to-location è probabilmente SkyHook Wireless, utilizzato da Apple e Google per la loro geolocalizzazione. Ci sono SDK disponibili - vedi http://skyhookwireless.com/developers/.


6
2017-09-12 19:15



La migliore libreria open-source per la geolocalizzazione in Java è ora http://geo-google.sourceforge.net/index.html, basato sull'API di google maps (hai solo bisogno di una chiave API google maps per usarlo)


4
2018-03-12 05:29



Se hai bisogno di un database locale, puoi controllare cosa IPInfoDB ha da offrire.

Se puoi utilizzare un servizio web, ci sono un numero là fuori, ma non sono sicuro di quali siano i loro Termini di servizio. UN Ricerca Google per "servizio di ricerca di geolocalizzazione su IP" gira alcune cose, ma molti di loro sono prodotti commerciali e dovresti leggere attentamente il loro ToS per assicurarti di usarli all'interno delle linee guida.


2
2017-09-12 19:19



Se capisco abbastanza bene, vuoi ottenere la posizione geografica dei visitatori sul tuo sito o applicazione web. Le alternative che conosco sono:

Google Gears ha alcune funzioni per rendere GeoLocation (http://code.google.com/apis/gears/api_geolocation.html), ma è necessario installare Gears

Utilizzo delle funzioni JavaScript che chiamano un servizio online come IP Location Tools (www dot iplocationtools dot com). Il sito ha esempi e persino un video tutorial.


1
2017-09-13 21:58



potresti provare http://code.google.com/p/mygeoloc/


1
2018-05-09 20:56



Raccomando di usare http://jgeocoder.sourceforge.net/ se usi svn jgeocoder - Geocoder Java gratuito


1
2017-12-07 04:03



Se vuoi sapere come Firefox 3.5 (o Google Chrome) ottiene la geolocalizzazione, quindi dai un'occhiata qui: Come funziona l'API di geolocalizzazione di Google / Firefox

Fondamentalmente, ciò che fa Firefox 3.5 (così come Chrome) è quello di ottenere l'elenco delle reti Wi-Fi nelle vicinanze e di inviare quell'elenco usando JSON a un webservice di Google, che restituirà quindi le coordinate approssimative.

A proposito, non c'è Java coinvolto in questo processo. Per ottenere la geolocalizzazione da Firefox / Chrome, basta chiamare alcuni metodi JavaScript. (Spero davvero che tu sappia che Java è diverso da JavaScript)


1
2017-09-12 19:35



Dici che stai bene con i servizi web, quindi potresti usare la mia API http://ipinfo.io. Ecco un esempio di output JSON per un indirizzo 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"
}

Vedere https://ipinfo.io/developers per ulteriori dettagli.


1
2018-01-06 00:17



Ecco un esempio basato sul https://ipdata.co API che è gratuita fino a 1500 richieste / giorno.

Sostituire 8.8.8.8 con l'ip che ti piacerebbe cercare

// 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")
  .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));

0
2017-11-05 18:32