Java(可能であれば自由に))で位置情報を取得する最良の方法は何ですか?
更新:GPSデバイスからではありません。基本的に、Firefox 3.5/HTML 5の仕組み
簡単な方法は、GeoLiteを使用することです( http://dev.maxmind.com/geoip/legacy/geolite/ )。ローカルデータベースを使用するため、Webサービス呼び出しは不要であり、多数のIPをジオコーディングする場合ははるかに高速です。
方法は次のとおりです。
このMavenアーティファクトを追加します。
<dependency>
<groupId>com.maxmind.geoip</groupId>
<artifactId>geoip-api</artifactId>
<version>1.2.11</version>
</dependency>
http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz からジオロケーションデータファイルをダウンロードします。
ファイルを任意のフォルダーに解凍します。それから:
LookupService cl = new LookupService("/var/geolite/GeoLiteCity.dat",
LookupService.GEOIP_MEMORY_CACHE | LookupService.GEOIP_CHECK_CACHE);
Location location = cl.getLocation("some ip address");
結果は、緯度、経度、都市、地域、countryCodeプロパティのLocationオブジェクトになります。
プロジェクトのニーズを確実に満たすために、精度の見積もりをご覧ください。 http://www.maxmind.com/en/geolite_city_accuracy .
WiFi-to-locationの最大のデータベースはおそらく SkyHook Wireless であり、AppleおよびGoogle利用可能なSDKがあります- http://skyhookwireless.com/developers/ を参照してください。
JavaのGeolocationに最適なオープンソースライブラリは、Google Maps APIに基づいて http://geo-google.sourceforge.net/index.html になりました(使用するにはGoogleマップAPIキーが必要です)
ローカルデータベースが必要な場合は、 IPInfoDB が提供するものを確認できます。
Webサービスを使用できる場合、そこには数字がありますが、利用規約で何が許可されているのかわかりません。 A 「ip geolocation lookup web service」のGoogle検索 いくつかのものがありますが、それらの多くは商用製品であり、ガイドライン内でそれらを使用するために、ToSを注意深く読む必要があります。
試すことができます http://code.google.com/p/mygeoloc/
Svnを使用する場合は http://jgeocoder.sourceforge.net/ を使用することをお勧めします jgeocoder-Free Java Geocoder
ipdata.co APIに基づいた例は、1日あたり最大1500リクエストまで無料です。
置換8.8.8.8
ルックアップしたいIP
// 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つは Ipregistry からです。
https://github.com/ipregistry/ipregistry-Java
キャッシングのネイティブサポートがあり、Java 8+で動作し、Maven Centralで依存関係を利用できます。また、エラー処理もうまく設計されています。
私が十分に理解しているなら、あなたはあなたのサイトまたはウェブアプリケーションへの訪問者の地理的位置を取得したいです。私が知っている選択肢は次のとおりです。
Google GearsにはGeoLocationを作成する機能がいくつかあります( http://code.google.com/apis/gears/api_geolocation.html )が、Gearsをインストールする必要があります
IPロケーションツール(www dot iplocationtools dot com)などのオンラインサービスを呼び出すJavaScript関数を使用します。このサイトには例があり、ビデオチュートリアルもあります。
Firefox 3.5(またはGoogle Chrome)が位置情報を取得する方法を知りたい場合は、こちらをご覧ください: Google/Firefox Geolocation APIの仕組み
基本的に、Firefox 3.5(およびChrome)は、近くのWi-Fiネットワークのリストを取得し、JSONを使用してそのリストをGoogle Webサービスに送信し、おおよその座標を返します。
ところで、このプロセスに関与するJavaはありません。Firefox/ Chromeから位置情報を取得するには、JavaScriptメソッドをいくつか呼び出すだけです。(JavaはJavaScriptとは異なります)
あなたはあなたがウェブサービスで大丈夫だと言うので、あなたは私のAPI http://ipinfo.io を使うことができます。 IPアドレスのJSON出力の例を次に示します。
$ 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"
}
詳細については、 https://ipinfo.io/developers を参照してください。