境界ボックスから最適なジオハッシュ精度を計算する


8

ElasticsearchのGeoHashグリッド集約を使用して、クラスターを(リーフレットを使用して)マップにプロットしています。より大きなエリアでは、precision作成/返されるバケットの数を制限するために低い設定を使用する必要があることを理解しています。

リクエストする適切な精度値をどのように決定すればよいですか?

境界ボックスやズームレベルに基づいて最適な精度を計算するための標準または推奨される式はありますか?ズームレベルを精度の値にマッピングするだけの方がいいですか(おそらくそれが最も簡単だと思います)。

回答:


11

あなたがリンクしたページは答えを示唆しています。バウンディングボックスの領域を見つけ、バケット領域で除算します。ただし、精度5の例を示していますが、各geohashバケットのサイズの計算方法は省略しています。

リンクしたページによると、クエリは10000バケットで停止します。

境界ボックスの面積を2乗の度数で計算します(これをkm単位で行わないでください。緯度/経度で維持してください)。

以下のスクリーンショットは、精度2の境界を示しています(色は精度1で分類されています)。

ここに画像の説明を入力してください

ただし、これらは実際にはタイルではありません-geohashは緯度/経度のエラーがあるポイントを表します-これらのエラーは時々経度と緯度で異なります(精度が均一の場合、緯度でエラーが大きくなります)

Pythonを少し使用して(Geohashライブラリを使用)、さまざまな精度の各「タイル」のサイズを推定しました。

from Geohash import geohash

strg = geohash.encode(56.9,-3.2,precision=15)

for prec in range(1,10):
    y,x,yerror,xerror = geohash.decode_exactly(strg[:prec])
    xsize = 2*xerror
    ysize = 2*yerror
    area = xsize*ysize
    print("Precision {}".format(prec))
    print("\tSize approx {} long by {} lat".format(xsize,ysize))
    print("\tArea is {}".format(area))

これは次の出力を与えます

Precision 1
    Size approx 45.0 long by 45.0 lat
    Area is 2025.0
Precision 2
    Size approx 11.25 long by 5.625 lat
    Area is 63.28125
Precision 3
    Size approx 1.40625 long by 1.40625 lat
    Area is 1.9775390625
Precision 4
    Size approx 0.3515625 long by 0.17578125 lat
    Area is 0.061798095703125
Precision 5
    Size approx 0.0439453125 long by 0.0439453125 lat
    Area is 0.0019311904907226562
Precision 6
    Size approx 0.010986328125 long by 0.0054931640625 lat
    Area is 6.034970283508301e-05
Precision 7
    Size approx 0.001373291015625 long by 0.001373291015625 lat
    Area is 1.885928213596344e-06
Precision 8
    Size approx 0.00034332275390625 long by 0.000171661376953125 lat
    Area is 5.893525667488575e-08

したがって、1つのアプローチは、

  • 緯度/経度ベースの境界ボックスの「面積」(平方度)を計算します
  • 精度1から始めてそのテーブルを下に移動し、bbox領域(平方度)をその精度の領域で割ります。
  • 許容可能な最小の除算値を持つ精度値を選択する

「許容範囲」を明確にするために:-

  • 0.001のような非常に低い除算値は、おそらく精度が低すぎることを意味します。多くのバケットをフェッチすることはありませんが、必要のない多くの遠方のポイントを検討します。

  • 10000を超える値の場合、精度が高すぎます。可能なヒットを破棄し、パフォーマンスが低下します。

最良のパフォーマンスが得られる値を見つけるために実験する必要があります。


詳細な回答ありがとうございます。非常に役立ちます。このアプローチは、必要なものを手に入れられるように見えます。
ピーター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.