2017-07-13 11 views
0

ch.hsr.geohashを使用して近くの場所を検索する方法の明確な例はどこからでも探しています。つまり、次のような状況を実装するだけです。Geohash-Java Search近くのLatLongs

1 - 私は長い緯度と長い経度を持っています。 2 - この緯度/経度をハッシュに変換します。 (私はそれが "GeoHash.withBitPrecision(緯度、経度、64)"を使用して行われると信じていますが、ここでどのような精度があるのか​​よく分かりません)64ビットは同じ精度を持つと仮定します 3 - 100キロの距離内/経度(私もジオハッシュを使用して、それを起動する方法は考えている) 4 - 。クエリは、緯度/経度のリストを結果として使用してオブジェクトを客観

しかし、私はlibにどちらも明確な程度の任意のドキュメントを見つけることができません例: 誰かがアドバイスを受けることができますか、それとも私にそれを検索するための出発点を与えることができますか?同じ結果を得るために既にこのライブラリを使用していた人はいますか?

答えて

1

私はw i次のアプローチ:

Geohash geohash = Geohash。 withCharacterPrecision(緯度、経度、12)。 String geohashString = geohash.toBase32();

次に、私が望む距離に応じてgeohashStringを使って作業しました。つまり、文字列の接頭辞をその精度に従って照合します。例えば、

データベース:

Name | geohash | id 

Model 1 | gc7x9813vx2r | 1 
Model 2 | gc7x8840suhr | 2 
Model 3 | gc30psvp0zgr | 3 

は、その後、私はこの時点(53.244664、-6.140530)の100キロ半径内のすべてのモデルを取得したいです。

Geohash geohash = Geohash. withCharacterPrecision(53.244664, -6.140530, 12); 
String geohashString = geohash.toBase32().substring(0, 3); //3 characters for around 100km of precision 

ofy().load().type(Model.class).filter("geohash >=", geoHashString).filter("geohash <", geoHashString + "\uFFFD"); 

は、次にそれが一致するだけで、彼らは約100キロの半径内にあるように、「GC7」で始まるモデル1とモデル2。

精度については、この表の後に:私はまだパフォーマンステストをしませんでしたが、私はそれはないと思う

String geohashString = Geohash. withCharacterPrecision(53.244664, -6.140530, 3).toBase32(); 

https://en.wikipedia.org/wiki/Geohash

私は実際に手順を簡素化することができはるかに遅くなる。とにかく、パフォーマンステストが "失敗"した場合、私は同じことを実装しますが、代わりにbinaryStringを使用します。

関連する問題