5

postgres には地理座標を格納するためのデータ型があることは知っています。しかし、RDBMS にとらわれないソリューションを探しています。現在、MySQL で Decimal(25,20) を使用しています。このデータを使用して、後で特定の場所からの特定の距離に基づいてこれらの場所を検索することがあります。この種のデータを保存するための最良の方法はどれですか?

4

6 に答える 6

6

もう 1 つの適切な手法は、値に定数を掛けて、整数値として格納することです。整数のみを使用すると、計算の高速化にも役立ちます。

精度が非常に必要でない限り、実際には小数点の後に 5 つ以上の値を格納するだけでよいはずです。

この緯度経度データ ストレージ仕様は、精度と小数点以下の桁数を示すグラフを提供します。

# decmal places, example, precision
5    51.22135    ± 0.8 m
6   50.895132   ± 0.08 m

7 は 8mm、つまり約 0.314 インチになります。

于 2008-11-16T15:44:53.037 に答える
1

規格はこちら。あなたのような単純なユースケースには多すぎますが、MySQLでさえ、多くのデータベースが最近持っている OGC 準拠のパッケージを使用することが実際に最善である理由について、いくつかのアイデアを与えるかもしれません。

それに失敗し、距離計算のアルゴリズムを実装すると仮定すると、必要な精度を持つ任意の浮動小数点数が機能します。

于 2008-11-16T15:42:01.917 に答える
1

私の知る限り、MS SQL Server 2008 は GeoLocations を DataType としてサポートしています。あなたがMySQLを使用していることは知っていますが、この質問で言及したいと思いました。

于 2008-11-16T16:05:47.550 に答える
1

vfilby の回答はおそらく最良の回答ですが、多くの RDBMS は、密な整数 (または浮動小数点) フィールドのインデックス作成よりも、文字フィールドのインデックス作成をより適切にサポートしています。

この理由だけでも、最初にデータを変換することをお勧めします。別の値に「近い」値を見つけたい場合は、おそらくbase36に変換し_て小数点にパディングすることで、これを保持する関数がさらに必要になりますが、完全一致だけが必要な場合は、ほぼすべての高速ハッシュ関数で十分です。

繰り返しますが、大量のデータがない場合、またはこのような RDBMS を使用していない場合は、vfilby が提案したことを実行してください。

于 2008-11-16T16:54:00.727 に答える
0

@ vfilby の回答に従って、数値の 2 つの半分を 2 つの別々の int 型として保存してみませんか?

于 2008-11-16T15:58:23.773 に答える
0

精度の誤差は、使用するデバイスの精度よりもはるかに小さいため、緯度と経度を保存するために常に 4 バイトの浮動小数点列を使用してきました。これはアプリケーションには当てはまらないかもしれませんが、そうである場合、float よりも RDBMS にとらわれないものを取得することはできません。

于 2008-11-16T16:38:21.103 に答える