web-dev-qa-db-ja.com

Javaで位置情報を取得する最良の方法

Java(可能であれば自由に))で位置情報を取得する最良の方法は何ですか?

更新:GPSデバイスからではありません。基本的に、Firefox 3.5/HTML 5の仕組み

20
yxk

簡単な方法は、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 .

16
Marquez

WiFi-to-locationの最大のデータベースはおそらく SkyHook Wireless であり、AppleおよびGoogle利用可能なSDKがあります- http://skyhookwireless.com/developers/ を参照してください。

6
Isaac Waller

JavaのGeolocationに最適なオープンソースライブラリは、Google Maps APIに基づいて http://geo-google.sourceforge.net/index.html になりました(使用するにはGoogleマップAPIキーが必要です)

4
Michael Pereira

ローカルデータベースが必要な場合は、 IPInfoDB が提供するものを確認できます。

Webサービスを使用できる場合、そこには数字がありますが、利用規約で何が許可されているのかわかりません。 A 「ip geolocation lookup web service」のGoogle検索 いくつかのものがありますが、それらの多くは商用製品であり、ガイドライン内でそれらを使用するために、ToSを注意深く読む必要があります。

2
Thomas Owens

試すことができます http://code.google.com/p/mygeoloc/

1

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
Jonathan

私がこれまで使用した最高のクライアントの1つは Ipregistry からです。

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

キャッシングのネイティブサポートがあり、Java 8+で動作し、Maven Centralで依存関係を利用できます。また、エラー処理もうまく設計されています。

1
BonieE

私が十分に理解しているなら、あなたはあなたのサイトまたはウェブアプリケーションへの訪問者の地理的位置を取得したいです。私が知っている選択肢は次のとおりです。

Google GearsにはGeoLocationを作成する機能がいくつかあります( http://code.google.com/apis/gears/api_geolocation.html )が、Gearsをインストールする必要があります

IPロケーションツール(www dot iplocationtools dot com)などのオンラインサービスを呼び出すJavaScript関数を使用します。このサイトには例があり、ビデオチュートリアルもあります。

1
Mig

Firefox 3.5(またはGoogle Chrome)が位置情報を取得する方法を知りたい場合は、こちらをご覧ください: Google/Firefox Geolocation APIの仕組み

基本的に、Firefox 3.5(およびChrome)は、近くのWi-Fiネットワークのリストを取得し、JSONを使用してそのリストをGoogle Webサービスに送信し、おおよその座標を返します。

ところで、このプロセスに関与するJavaはありません。Firefox/ Chromeから位置情報を取得するには、JavaScriptメソッドをいくつか呼び出すだけです。(JavaはJavaScriptとは異なります)

1

あなたはあなたがウェブサービスで大丈夫だと言うので、あなたは私の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 を参照してください。

0
Ben Dowling