MySQLデータベースに経度と緯度の両方の座標(GPSデータ)があります。
現在、次のように保存されています。
_column type
------------------------
geolat decimal(10,6)
geolng decimal(10,6)
_
質問:座標データを適切に格納するには、本当にdecimal(10,6)
と同じ大きさのデータ型が必要ですか?
私は経度と緯度の複合インデックスを持っているので、このインデックスのサイズは巨大です。何も妥協することなく小さくできるといいですね。
WGS84 データムは通常、小数点以下5桁の完全な10進表記の座標として与えられるため、緯度(-90〜+90)にはdecimal(7、5)(-90.00000〜90.00000)を使用できます。 )、経度の場合、decimal(8、5)(-180.00000〜180.00000)を使用できます。
.00001 赤道で約1メートルの精度を提供します
DECIMAL/NUMERICデータ型は固定精度のスケーリングされた整数です であり、範囲の正と負の両方の部分が常に利用可能です-精度やスケールには影響しません(明らかにストレージが必要ですが、 DECIMALの場合、その選択肢はありません)
私は常に小数点以下6桁で作業してきました。以前は軍事契約の下でGIS作業を行っていましたが、これで十分でした。
それはあなたが行っている調査の正確さに依存します。一般に:
したがって、非常に正確な研究、つまり構造プレートの動きを除いて、6桁の使用で十分です
これはwhuberからの 完全な回答のコピーです(GISスタックオーバーフロー):
精度は、測定値が真の値と一致する傾向です。 Precisionは、測定値が実際の値を特定する度合いです。問題は、精度と精度の相互作用についてです。
一般的な原則として、測定値の記録には、精度が組み込まれている以上の精度は必要ありません。精度を使いすぎると、精度が実際よりも高いと人々に誤解させる可能性があります。
一般に、精度を下げる、つまり小数点以下の桁数を少なくすると、精度がいくらか失われる可能性があります。しかし、どのくらいですか?メーターが最初に定義されたことを知っておくのは良いことです(フランスが、革命の頃に古いシステムを捨て、熱心に新しいシステムに置き換えたとき)、1千万個が赤道からポール。それは90度なので、1度の緯度は約10 ^ 7/90 = 111,111メートルをカバーします。 (「約」、その間メーターの長さが少し変わったためです。しかし、それは問題ではありません。)さらに、経度(東西)の長さは、緯度とほぼ同じかそれ以下です。なぜなら、赤道からいずれかの極に向かって移動すると、緯度の円が地球の軸に向かって縮むからです。したがって、小数点以下1桁の6桁目が111,111/10 ^ 6 =約1/9メートル=約4インチの精度であると考えるのは常に安全です。
したがって、たとえば10メートルの精度を必要とする場合、1/9メートルではなく、小数点以下6桁を使用しても本質的に精度を失うことはありません。精度の必要性がサブセンチメートルである場合、少なくとも7桁、おそらく8桁の小数点以下が必要ですが、それ以上の場合はあまり役に立ちません。
小数点以下13桁は、位置を111,111/10 ^ 13 =約1オングストロームに固定し、小さな原子の厚さの約半分になります。
これらのアイデアを使用して、10進度の各桁が意味するものの表を作成できます。
データを増やすよりデータを減らす方が簡単であることに注意してください。通常、データの正確性を高めることは、再測定ができない限り不可能です。そして、再測定にはコストがかかります。あなたの状況や業界について他に何も知らないので、できるだけ多くのデータ/特異性をキャプチャします。
実際に使用するデータは、このセットから選別できます。より高い特異度が必要になる場合は、再測定せずにいつでも再計算できます。
また、生データは個別の要素のセットではないため、インデックスを付けるのが最善の方法かどうかはわかりません。精度が低い/小さいデータポイントのテーブルを作成すると、インデックスがはるかに小さくなります。
これが不動産用である場合、実際には家が非常に多く、1行あたり2バイトの節約が顕著になるでしょうか。正当な理由がない限り、できる限り精度を維持します。
NMEA緯度/経度出力の通常のGGAセンチメントは、赤道でおよそ10mの解像度でわずか3桁です。一部のブランドは、1mを与えるためにカスタムの余分な数字を追加します。
4桁deg.mm mm/1000も一般的です。
ハイエンドの精度のRTK-GPSを使用している場合、mmの精度を得るにはさらに場所が必要になる場合があります
これは、配置可能性をどの程度正確にしたいかによって異なります。明らかに、大きいほど精度が高くなり、小さいほど結果の幅が広がります。いずれにせよ、あまりデータではないので、値を大きくすることをお勧めします。
すべての座標が特定の領域にある場合は、いくつかの中心点を修正し(つまり、現在の平均点と四捨五入して、大声で言うことができる数を取得)、この点を基準として座標を保存します。そうすれば、最初の2〜4桁の最上位桁をスキップできるため、大幅な節約につながります。ただし、このデータは、真のWGS84座標を返すクラスまたはVIEWを介してのみ処理することを忘れないでください。
座標をさまざまな単位で保存(または操作)することもできます。私が取り組んだ1つのプロジェクトでは、すべての座標はlongとして保存されたミリ秒単位でした(おそらくint、それは数年前です)。これは、速度とストレージスペースのために部分的に行われました(これは組み込みシステムでした)。ただし、同じロジックをここで適用できます。