MySQLにlng / latを保存するためのデータ型


14

MySQLデータベースにlnt / latポイントの大きなリストを保存しています。現時点では、これらは英国のMの投影点ですが、長期的には世界中の点の座標を保存できるようにしたいと思います。どのデータ型を使用する必要がありますか?

私は使い始めましdecimal(18,12)たが、この精度が必要かどうか、または単にfloat。他に考慮すべきことがある場合に備えて、コードを含めました。

CREATE TABLE UKTest
(
lat FLOAT,
lng FLOAT
)

私はSQLが初めてなので、クエリを実行するときにデータ型が重要かどうかわかりません。全体のメモリは変数のタイプに応じて変わると思いました。この種の作業に基本的なMySQLデータベースよりも空間データベースを使用する利点はありますか?

回答:


16

この質問はStackOverlowでも尋ねられました

一番上の答えは、MySQL Spatial Extensionsを示唆していますここでこれらの拡張働くことのリンクの負荷があります

空間タイプを使用したくなく、GPSユニットまたはジオコーディングサービスから値を取得している場合は、小数点以下の精度をデータソースに一致させることができます。一般的な経験則は、データをアプリケーションで表示するよりも2桁高い精度でデータを保存することです。

Googleからのコード例で地図上のポイントを表示し、彼らが述べます:

MySQLテーブルを作成するときは、lat属性とlng属性に特に注意を払う必要があります。Googleマップの現在のズーム機能を使用すると、小数点以下6桁の精度しか必要ありません。

テーブルに必要なストレージスペースを最小限に抑えるために、lat属性とlng属性がサイズ(10,6)の浮動小数点数であることを指定できます。これにより、フィールドは、小数点以下6桁と小数点以下4桁までを格納できます(例:-123.456789度)

数値型間のパフォーマンスの違いについて心配する必要はありません。まともなインデックスは、はるかに大きな効果があります。


+1で良い答えが得られます!これは私が言ってやったことです。
OptimizePrime

答えてくれてありがとう-MySQL Spatial Extensionsのドキュメントを読みましたが、どうやって使い始めますか?GoDaddyにデフォルトのMySQL DBがあります。どこから始めればいいのかわかりません。
djq


1
そして、その答えは、より多くのリンクへのリンクを更新
geographika

なぜ4桁の整数なのですか?
アリックスアクセル

6

他の理由でMySQLに縛られていない限り、これらの詳細を処理するためにPoint(およびLine、Polygonなど)オブジェクトを持つpostgisのような空間的に有効なデータベースの使用を本当に検討する必要があります。また、全世界にその変更を加える際の投影サポートも受けられます。

2019:コメントも読まない私のような人々のために-MySQLは、証拠なしで、おそらく遅い、空間データ型をサポートします。


注:新規で上記を読んでいる人のために、MySql 5.7+はSpatial Indexesで動作するようになりました。
HopeKing

それでも遅い
Ian Turton

どれだけ遅いかを示すリソースを手伝ってくださいませんか?100万件未満のレコードを持つプロジェクトで使用することを検討しています。ありがとう。
HopeKing

個人的な経験公開データなし。無効なジオメトリなどの問題が多すぎる
Ian Turton

ありがとう。私の必要性は、データベースレコードに基づくポイント間の距離だけです(ポリゴンのような複雑な要件はありません)。したがって、現時点ではmysqlを使用しても安全でしょう。
HopeKing
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.