2009-09-12 13 views
16

Javaでジオロケーションを取得する最善の方法は(可能な場合は自由に)ですか?Javaでジオロケーションを取得する最良の方法

更新:GPSデバイスからではありません。基本的にFirefox 3.5/HTML 5の動作方法

+0

を検索したいIPで8.8.8.8を置き換えますか? GPSデバイスから座標を取得するか、IPアドレスに基づいて位置を見つけるか、データベースなどの特定の目的地の座標を検索しますか? – Wolfgang

+0

オフラインで行う必要があるデスクトップアプリケーション用ですか?または、Webサービスを使用しても問題ありませんか? –

+0

Webサービスは大丈夫 – yxk

答えて

6

WiFiとロケーションの最大のデータベースはおそらくSkyHook Wirelessで、AppleとGoogleのジオロケーションに使用されています。利用可能なSDKがあります - http://skyhookwireless.com/developers/を参照してください。

+0

C++のようですが、Java版はありますか? – yxk

+0

これを使用する場合は、おそらくJNIを使​​用してネイティブC++コードを呼び出すことができますが、Javaアプリケーションのクロスプラットフォーム機能が低下する可能性があります。 –

+3

最近、JNI –

2

ローカルデータベースが必要な場合は、IPInfoDBが提供するものをチェックすることができます。

ウェブサービスを使用できる場合は、番号がありますが、利用規約に許可されている内容がわかりません。 Google search for "ip geolocation lookup web service"はいくつかのものを示していますが、それらの多くは商用製品であり、ガイドライン内でそれらを使用するために注意深くToSを読まなければなりません。

+0

の代わりにJNAを使用する必要があります。「国レベルで99.5%以上、25マイル圏内で米国の都市レベルで約80%」このAPIに使用されるデータベースは、無料のMaxmind CSVデータベース(Geolite City)であり、多くのスクリプトで再編成されています。 市は正しい街を得ているようですが、Googleマップはそれをかなり正確に行います。 – yxk

+0

もちろん、CSVファイルまたはSQLファイルをIPInfoDBで定期的に更新する必要があります。しかしそれはすべてのトレードオフです。 IPデータベースの手動更新と照会でそれを打ち消すことができます。 –

1

あなたは、Firefox 3.5(またはGoogle Chromeは)ジオロケーションを取得する方法を知りたい場合は、ここで見てみてください。How Google/Firefox Geolocation API works

を基本的には、何のFirefox 3.5(だけでなく、クロム)がないことのリストを取得することです付近のWi-Fiネットワークのリストを取得し、そのリストをJSONを使用してGoogle Webサービスに送信します。これにより、およその座標が返されます。

ところで、このプロセスに関係するJavaはありません。 Firefox/Chromeからジオロケーションを取得するには、いくつかのJavaScriptメソッドを呼び出します。 (JavaがJavaScriptと異なることをあなたが知っていることを本当に願っています)

+0

この回答に追加されたリンクは現在死んでいます – SpringLearner

+0

@SpringLearner:ありがとう!私は本当に私のブログをオンラインに戻すべきです。その間、私はWayback Machineへのリンクを更新しました。 –

+0

ちょっと@ DenilsonSaMaia私は引数としてIPを取るjavaメソッドを使用してまったく同じソリューションをしたい。あなたはいくつかのポインタを提供できますか?あなたがjavascriptの実装を提供することができれば、それも助けになるでしょう。 –

1

私が十分理解していれば、あなたのサイトやWebアプリケーションへの訪問者の地理的位置を取得したいと思っています。私が知っている選択肢は以下のとおりです。

GoogleのGearsがジオロケーション(http://code.google.com/apis/gears/api_geolocation.html)を作るためにいくつかの機能がありますが、(WWWドットiplocationtoolsは、ドットコム、このようなIPロケーションツールなどのオンラインサービスを呼び出すJavaScript関数を使用して歯車

をインストールする必要があります)。このサイトには例があり、ビデオチュートリアルもあります。

+0

ちょっと@Migこのリンクは死んでいるようです。他のポインターとまったく同じソリューションですか? –

4

Javaで地理位置情報のための最高のオープンソースのライブラリがGoogleマップAPIに基づいて、今http://geo-google.sourceforge.net/index.htmlある

+0

悲しいことに、ここにはGeoLocationのサポートはありません。ジオコーディングのみ。 – Reno

15

するSubversionを使用する場合の簡単な方法は、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

からジオロケーション・データ・ファイルをダウンロードし、任意のフォルダにファイルを解凍します。次に、結果はLatitude、longitude、city、regionおよびcountryCodeプロパティのLocationオブジェクトに格納されます。

プロジェクトのニーズを満たしているかどうかの正確な見積もりを確認してください:http://www.maxmind.com/en/geolite_city_accuracy

0

あなたはウェブサービスでOKだから、私のAPI http://ipinfo.ioを使うことができます。

$ 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を参照してください:ここではIPアドレスの例JSON出力です。

0

ここでは1500リクエスト/日まで無料のhttps://ipdata.co APIに基づく例を示します。

はあなたが正確に何を意味する

// 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)); 
関連する問題