WGS84にたくさんのポイントがあるデータベースがあります。現在、KDtreeを使用して、NNと範囲クエリのポイントを実行するキャッシュを構築しています。重要な点は、検索半径はメートル単位で提供されることと、緯度/経度はこれらの幾何学的クエリに適したSRSではないことです。
全世界に適用でき、距離を維持できる幾何学的なSRSを探しています。10分の2メートルの誤差は気にしません。
WGS84にたくさんのポイントがあるデータベースがあります。現在、KDtreeを使用して、NNと範囲クエリのポイントを実行するキャッシュを構築しています。重要な点は、検索半径はメートル単位で提供されることと、緯度/経度はこれらの幾何学的クエリに適したSRSではないことです。
全世界に適用でき、距離を維持できる幾何学的なSRSを探しています。10分の2メートルの誤差は気にしません。
回答:
「Spherical Spatial Index」のグーグルをいくつか行いました。球の三角形分解、またはボロノイタイリングを使用して、可能な方法がたくさんあります。ただし、簡単に実装できるように見える1つの方法は、ここの「3Dバウンディングボックス」セクションのように、データを3Dで考慮することです。
http://lin-ear-th-inking.blogspot.co.uk/2007/09/geodetic-data-in-postgis-spherical.html
次に、何らかの3D空間インデックスが必要です。1km以内のすべてのポイントをすばやく見つけることができます。これは1kmの3D検索半径であるため、地球の表面に沿った1kmの半径とわずかに異なりますが、小さな検索半径の場合、実質的に同じになります(計算を行って修正を行います)。
絶対精度が必要な場合は、これを最初のステップとして使用し、大円を介して距離を計算して、それらをさらに遠ざけます(球に沿った距離は常に球を通る距離よりも大きくなります)。
SRS / Mapプロジェクションでは、常にトレードオフになります。世界のすべての場所に適したものは本当にありません。地球が球体であると仮定することもできます。
全世界に適合するSRSを探す代わりに、距離計算アルゴリズムを探すほうがいいと思います。例としては、球面三角法に基づく大圏の距離があります。次のように仮定します。
式は次のとおりです。
D = 1.852 * 60 * ARCOS ( SIN(L1) * SIN(L2) + COS(L1) * COS(L2) * COS(DG)
どこ:
L1 = latitude at the first point (degrees)
L2 = latitude at the second point (degrees)
G1 = longitude at the first point (degrees)
G2 = longitude at the second point (degrees)
DG = longitude of the second point minus longitude of the first point (degrees)
DL = latitude of the second point minus latitude of the first point (degrees)
D = computed distance (km)
最初にデータでテストして、結果を確認することもできます。ところで、PostGISのような空間データベースを使用していますか?