postgres には地理座標を格納するためのデータ型があることは知っています。しかし、RDBMS にとらわれないソリューションを探しています。現在、MySQL で Decimal(25,20) を使用しています。このデータを使用して、後で特定の場所からの特定の距離に基づいてこれらの場所を検索することがあります。この種のデータを保存するための最良の方法はどれですか?
6 に答える
もう 1 つの適切な手法は、値に定数を掛けて、整数値として格納することです。整数のみを使用すると、計算の高速化にも役立ちます。
精度が非常に必要でない限り、実際には小数点の後に 5 つ以上の値を格納するだけでよいはずです。
この緯度経度データ ストレージ仕様は、精度と小数点以下の桁数を示すグラフを提供します。
# decmal places, example, precision
5 51.22135 ± 0.8 m
6 50.895132 ± 0.08 m
7 は 8mm、つまり約 0.314 インチになります。
私の知る限り、MS SQL Server 2008 は GeoLocations を DataType としてサポートしています。あなたがMySQLを使用していることは知っていますが、この質問で言及したいと思いました。
vfilby の回答はおそらく最良の回答ですが、多くの RDBMS は、密な整数 (または浮動小数点) フィールドのインデックス作成よりも、文字フィールドのインデックス作成をより適切にサポートしています。
この理由だけでも、最初にデータを変換することをお勧めします。別の値に「近い」値を見つけたい場合は、おそらくbase36に変換し_
て小数点にパディングすることで、これを保持する関数がさらに必要になりますが、完全一致だけが必要な場合は、ほぼすべての高速ハッシュ関数で十分です。
繰り返しますが、大量のデータがない場合、またはこのような RDBMS を使用していない場合は、vfilby が提案したことを実行してください。
@ vfilby の回答に従って、数値の 2 つの半分を 2 つの別々の int 型として保存してみませんか?
精度の誤差は、使用するデバイスの精度よりもはるかに小さいため、緯度と経度を保存するために常に 4 バイトの浮動小数点列を使用してきました。これはアプリケーションには当てはまらないかもしれませんが、そうである場合、float よりも RDBMS にとらわれないものを取得することはできません。