MySQLデータベースに緯度/経度を格納するときに使用する理想的なデータ型は何ですか?


432

緯度/経度のペアで計算を実行することを念頭に置いて、MySQLデータベースでの使用に最適なデータ型は何ですか?


1
私はこのリンクが非常に役立つとわかりました:howto-use-mysql-spatial-ext.blogspot.com/2007/11/…少し古いかもしれませんが、例を含む完全な説明が含まれています。
madc '15

ここのほとんどの人々は何が起こるか理解していません。アプリのコード数値に触れるとすぐに、倍数を使用すると(ほとんどの場合)、その数値は最大で倍精度になります。小数点以下100万桁で保存しても効果はありません。小数(たとえば6)制限して格納すると、その精度の一部が破棄され、データベースに再書き込みされるたびに累積エラーが追加されます。倍精度浮動小数点数は、約16の有効数字、場合によってはすべての小数です。それらのうち10個を廃棄すると、時間の経過とともに累積エラーが発生します。理由は「浮動小数点」です。続き
Stormwind 2017年

続き:外部ソースから取得した図を、変更せずに初めてソース資料として保存する場合、小数点以下6桁で問題ない場合があります。ただし、計算を1回でも実行して再度格納する場合は、特定の10進数形式を適用することで、精度の一部を削除するのは無意味です。サーバー内でのみ計算を実行することは異なる場合があり(サーバーは内部でdouble以外のものを使用する場合としない場合があります)、アプリの計算でdoubleよりも悪い数値表現を使用すると、ストレージ精度の必要性が等しく減少します。
Stormwind 2017年

続き:サーバーがより高い精度で数値を保存している場合、主張された「9.6」(そうであるかどうかはわかりません)にもかかわらず、これはすべて重要ではなく、形式は純粋に便宜上の問題です。精度の問題に対処します。しかし、サーバーが実際にその形式で任意の数値を6桁の精度に丸めても、私は驚かないでしょう。
Stormwind 2017年

Cont:最後に:lat、lon'sの場合、小数点以下6桁はca にスナップする問題です。11センチグリッド。小数点以下6桁で読み取り(タッチ)、計算、および保存するたびに、新しいスナップ(=累積エラー)が発生します。すべてのエラーが偶然同じ方向に進むと、大きなエラーが発生します。その上で一時的な乗算を実行する場合(例:スケールアップ、次に減算およびスケールダウン)、さらに大きくなる可能性があります。良いレーソンなしで精度を捨てないでください!
Stormwind 2017年

回答:


161

MySQLの空間拡張をGISで使用します。


25
例やその他の情報へのリンクはありますか?
Codebeef 2008年

6
MYSQL Spatialは良いオプションですが、それでもかなりの制限と警告があります(6現在)。以下の私の回答を参照してください...
James Schek

1
@James Schekは正しいです。さらに、MySQLはユークリッドジオメトリを使用してすべての計算を行うため、lat / lngの実際の使用例を表すものではありません。
mkuech 2013年

ご参考までに; Mysqlは* .myisamテーブル、つまりISAMエンジンでのみ空間インデックスをサポートしています。リンク:dev.mysql.com/doc/refman/5.0/en/creating-spatial-indexes.html
PodTech.io

最後の更新部分でこの記事を見てください:mysqlserverteam.com/mysql-5-7-and-gis-an-example
Jaspal Singh

150

Googleは、Google Mapsを使用したサンプルの「店舗検索」アプリケーションのPHP / MySQLソリューションを最初から最後まで提供します。この例では、緯度/経度の値を「Float」として長さ「10,6」で保存しています。

http://code.google.com/apis/maps/articles/phpsqlsearch.html


11
GoogleはFLOAT仕様がどのように機能するかを明確に理解していませんFLOAT(10,6)。座標の整数部分には4桁を残します。そして、いいえ、符号はカウントされません-これは、(署名されていない)属性に由来します。
Alix Axel 2013年

2
しかし、[0、180]の整数部分の値を格納する必要がある場合は、それで十分でしょう。
Hrvoje Golcic 2014年

37
@AlixAxel Googleはそれが何をしているか知っていると思う。「Googleマップの現在のズーム機能では、小数点以下6桁の精度で十分です。これにより、フィールドは小数点以下6桁、および小数点前4桁まで保存できます。例:- 123.456789度。」署名されていない場合、パターンは1234,567890になります。だから問題ありません。
1.44mb

16
@AlixAxel彼はシーケンスの数を数えています。実際の座標を使用していない...
Andrew Ellis

8
DoubleLaravelのデータ型の使用
FooBar '11 / 11/14

134

基本的には、場所に必要な精度によって異なります。DOUBLEを使用すると、3.5nmの精度になります。DECIMAL(8,6)/(9,6)は16cmになります。FLOATは1.7m ...

この非常に興味深いテーブルには、より完全なリストがあります:http : //mysql.rjweb.org/doc.php/latlng

Datatype               Bytes            Resolution

Deg*100 (SMALLINT)     4      1570 m    1.0 mi  Cities
DECIMAL(4,2)/(5,2)     5      1570 m    1.0 mi  Cities
SMALLINT scaled        4       682 m    0.4 mi  Cities
Deg*10000 (MEDIUMINT)  6        16 m     52 ft  Houses/Businesses
DECIMAL(6,4)/(7,4)     7        16 m     52 ft  Houses/Businesses
MEDIUMINT scaled       6       2.7 m    8.8 ft
FLOAT                  8       1.7 m    5.6 ft
DECIMAL(8,6)/(9,6)     9        16cm    1/2 ft  Friends in a mall
Deg*10000000 (INT)     8        16mm    5/8 in  Marbles
DOUBLE                16       3.5nm     ...    Fleas on a dog

お役に立てれば。


2
私は投稿の内容に焦点を当てた建設的で詳細な解説を書く必要があるので、リックジェームスのウェブサイトから提供された精度表を確認しながら、「犬のノミ」という解決策の説明で穏やかに面白かったと言いますそれは賞賛に値するものだと感じました。技術的に言えば、これは2つの住所間の距離を測定するための座標を格納するときに使用するデータ型を決定するのに役立つ有用な描写でした。@ Simon、共有していただきありがとうございます。
Sam_Butler 2017年

FWIW、そのリンクの「SMALLINT scaled」の使用は、恐ろしく非効率的です。Oguzhanの答えは、4バイトの符号付きintに、小数点以下7桁のlong / latを格納するための優れた方法です。小さいサイズ(4B)で優れた精度(〜1cm)。
ToolmakerSteve

74

MySQLの空間拡張は、空間演算子とインデックスの完全なリストを自由に利用できるため、最適なオプションです。空間インデックスを使用すると、距離ベースの計算をすばやく実行できます。6.0の時点では、Spatial Extensionはまだ不完全であることを覚えておいてください。私はMySQL Spatialを書き下ろすのではなく、これに取り掛かる前に落とし穴を知らせているだけです。

ポイントを厳密に扱い、DISTANCE関数のみを扱う場合は、これで問題ありません。ポリゴン、ライン、またはバッファポイントを使用して計算を行う必要がある場合、「relate」演算子を使用しない限り、空間演算子は正確な結果を提供しません。21.5.6の上部にある警告を参照してください。包含、内部、交差などの関係は、正確なジオメトリ形状ではなくMBRを使用しています(つまり、楕円は長方形のように扱われます)。

また、MySQL Spatialの距離は最初のジオメトリと同じ単位です。つまり、10進度を使用している場合、距離の測定値は10進度になります。これは、赤道から遠方に行くため、正確な結果を得ることが非常に難しくなります。


26
言い換えると、MySQL Spatial Extensionsは、lat / longで表される地球表面上のポイント間の大圏距離の計算には適していません。それらの距離関数などは、デカルト座標、平面座標、座標系でのみ役立ちます。
O.ジョーンズ

71

ARINC424から構築されたナビゲーションデータベースに対してこれを行ったとき、かなりの量のテストを行い、コードを振り返ると、DECIMAL(18,12)(実際は火の鳥なのでNUMERIC(18,12))を使用しました。

floatとdoubleは正確ではなく、非常に悪い丸め誤差を引き起こす可能性があります。問題のある実際のデータを見つけたかどうかは思い出せませんが、floatまたはdoubleに正確に格納できないと問題が発生する可能性があることはかなり確実です

重要なのは、度またはラジアンを使用する場合、値の範囲がわかっていることであり、小数部には最も多くの桁が必要です。

MySQLの空間拡張機能は、彼らが続くので、良い代替されているのOpenGISジオメトリモデル。データベースを移植可能な状態に保つ必要があるため、使用しませんでした。


3
ありがとう、これは役に立ちました。2008年からこれらすべての質問と回答を読んで奇妙に感じているのは、それがすでに8年前であることに気づいたからです。
aexl 2016年

1
@TheSexiestManinJamaica-IEEE 754-1985以前は、コンピューターの浮動小数点ハードウェアは無秩序でした。(一部の値について)a*b等しくないマシン上にもありましたb*a。次のような例が多数ありました2+2 = 3.9999。この規格は多くの混乱を解消し、事実上すべてのハードウェアとソフトウェアに「迅速に」採用されました。したがって、この議論は2008年以来だけでなく、3世紀にわたって有効です。
リックジェームズ

42

必要な精度に依存します。

Datatype           Bytes       resolution
------------------ -----  --------------------------------
Deg*100 (SMALLINT)     4  1570 m    1.0 mi  Cities
DECIMAL(4,2)/(5,2)     5  1570 m    1.0 mi  Cities
SMALLINT scaled        4   682 m    0.4 mi  Cities
Deg*10000 (MEDIUMINT)  6    16 m     52 ft  Houses/Businesses
DECIMAL(6,4)/(7,4)     7    16 m     52 ft  Houses/Businesses
MEDIUMINT scaled       6   2.7 m    8.8 ft
FLOAT                  8   1.7 m    5.6 ft
DECIMAL(8,6)/(9,6)     9    16cm    1/2 ft  Friends in a mall
Deg*10000000 (INT)     8    16mm    5/8 in  Marbles
DOUBLE                16   3.5nm     ...    Fleas on a dog

送信元:http : //mysql.rjweb.org/doc.php/latlng

要約すると:

  • 利用可能な最も正確なオプションはDOUBLEです。
  • 使用される最も一般的なタイプはDECIMAL(8,6)/(9,6)です。

のとしてのMySQL 5.7、使用することを検討して空間データ型具体的には、(SDT)をPOINT単一の座標を格納するため。5.7より前のSDTはインデックスをサポートしていません(テーブルタイプがMyISAMの場合は5.6を除く)。

注意:

  • POINTクラスを使用する場合、座標を格納するための引数の順序はでなければなりませんPOINT(latitude, longitude)
  • 空間インデックス作成するための特別な構文があります
  • SDTを使用する最大の利点は、空間分析関数にアクセスできることです。たとえば、2つのポイント間の距離を計算し(ST_Distance)、1つのポイントが別のエリア内に含まれているかどうかを判断できます(ST_Contains)。

2
以前の回答の一部を貼り付けてコピーし、そのテーブルを作成した人が推奨していないものを「要約」します。MySQLは非常にうるさいです。したがって、FLOAT / DOUBLEは使用できません。DECIMALがリリースされました。だから、私たちはいくつかのクラッジで立ち往生しています。基本的に、Lat / LngをあるサイズのINTに変換し、PARTITION BY RANGEを使用する必要があります。» AND«FLOATには24ビットの有効ビットがあります。DOUBLEには53があります(PARTITIONには対応していませんが、完全を期すために含まれています。多くの場合、DOUBLEを使用するのはオーバーキルの量とスペースがどれくらいかを知らないためです)。»書き込んだSDTの部分をそのままにしておきます。
Armfoot 2015年

1
@Armfoot編集時を見ると、私からコピーしたもう一つの答えです。重要ではありません。スタックオーバーフローは、「未来の私へのメモ」のようなものです。
Gajus、2015年

1
彼はあなたからコピーしなかったのではなく、彼が2014年に参照したリンクからあなたがしたようにテーブルを貼り付けただけです(あなたの投稿は2015年からです)。ところで、空間データ型をリンクしたときに、「Special」のスペルを間違えたと思います。あなたが書いたこの部分はCREATE TABLE geom (g GEOMETRY NOT NULL, SPATIAL INDEX(g)) ENGINE=MyISAM;Jamesが述べたように、SDTの制限に関する警告のような例をさらに追加した場合、それらを使い始めたい人々にとって実際に役立ちます。 ..
Armfoot

@Gajus-あなたの2人が私の文書を見つけたことを光栄に思います!(いいえ、ノミの大きさはわかりませんが、誰かの注意を引くと感じました。)
リックジェームズ

POINTクラスを使用する場合、座標を格納するための引数の順序はPOINT(経度/ X、緯度/ Y)でなければなりません。
AndreyP


19

使用DECIMAL(8,6)緯度(90 -90度)およびDECIMAL(9,6)経度のために(180 -180度)。ほとんどのアプリケーションでは、小数点以下6桁で問題ありません。負の値を許容するために、両方に「署名」する必要があります。


DECIMALタイプは、floor/ceil受け入れられない財務計算用です。プレーンはFLOAT大幅に優れていDECIMALます。
Kondybas

1
@Kondybas-データベースの主なコストは行のフェッチであるため、floatとdecimalのパフォーマンスの違いは問題になりません。
リックジェームズ

14

Googleマップによると、緯度と経度の場合はFLOAT(10,6)が最適です。


どこでこの情報を入手しましたか?何かが変わった場合に備えて。
webfacer

1
:@webfacer、それはここでは、「MySQLのテーブルを作成する」セクションにありますdevelopers.google.com/maps/documentation/javascript/...例えば lat FLOAT( 10, 6 ) NOT NULL, lng FLOAT( 10, 6 ) NOT NULL
turrican_34

1
@webfacer、そのFLOAT構文はの時点で廃止されたようですmysql 8.0.17MysqlはFLOAT正確なパラメーターなしでdev.mysql.com/doc/refman/8.0/en/numeric-type-overview.htmldev.mysql.com/doc/refman/5.5/en/floating-point-を
turrican_34

7

緯度/経度X 1,000,000をoraclesデータベースにNUMBERSとして保存し、doubleによる丸めエラーを回避しています。

小数点以下6桁までの緯度/経度が10 cmの精度であるとすれば、それで十分でした。他の多くのデータベースも緯度/経度を小数点第6位まで格納しています。


2
整数演算(例:インデックス検索)は浮動小数点数よりもはるかに高速であるため、大量のデータがある場合は(100万などの)大きな数を掛けることは素晴らしいことです。
Kaitlin Duck Sherwood

@KaitlinDuckSherwood-ビットはビットです-32ビットの浮動小数点数が32ビットの整数よりも(インデックス付きまたはそれ以外の方法で)取得するのが遅い理由を私は知りません。最近の浮動小数点演算でさえ、問題とならないほど高速です。それでも、整数に暗黙の乗数を使用するというコメントに同意します。これにより、32ビットから得られる精度が最大になります。テクノロジーが向上するにつれ、多少の将来性が保証されます。
ToolmakerSteve

6

完全に異なる、より単純な視点で:

これにより、インデックスの番号や、座標をめちゃくちゃにする可能性のあるデータ型に関連する他のすべての問題について心配する必要がなくなります。


駄目だ。OPは、緯度/経度のペアで計算を実行すると述べています-あなたの答えはそれを排除します
Yarin

4
@Yarinこれは、ごく一部の人(または多くの人)が、自分のニーズに応じて座標を保存する方法について答えを必要とする一般的な質問です(多くの人がGoogleマップを使用する場合があります)。あなたの反対票は、この回答が彼らを助けないかもしれないことを示唆しています...座標を文字列に格納することによって、彼らは彼らに提供された元の値を正確に知っています(例えば:Googleによって)。アプリを所有し、それらに対して計算を実行します。その時点では、変換に失敗しなかったという理由だけで、元の生データが残っています。
アームフット

4

アプリケーションによっては、FLOAT(9,6)の使用をお勧めします

空間キーはより多くの機能を提供しますが、生産ベンチマークではフロートは空間キーよりもはるかに高速です。(AVGで0,01対0,001)


1
ここに詳細を記載したテスト結果を提供できますか?
NameNotFoundException

4

MySQLはすべてのフロートにdoubleを使用します...したがって、doubleタイプを使用します。floatを使用すると、ほとんどの状況で予測できない丸められた値が発生します


1
MySQL はで操作を実行しDOUBLEます。MySQLでは、データを4バイトまたは8 バイトとして格納できます。そのため、式を列に格納すると精度が失われる可能性があります。FLOATDOUBLEFLOAT
リックジェームズ

4

すべての操作に最適なわけではありませんが、マップタイルを作成するか、1つの投影のみで多数のマーカー(ドット)を操作する場合(たとえば、Googleマップのようなメルカトルや他の多くの滑りやすいマップフレームワークが期待する)、私は何を見つけました私は「広大な座標系」を本当に便利なものと呼んでいます。基本的に、xとyのピクセル座標を何らかの方法でズームインして保存します-私はズームレベル23を使用します。これにはいくつかの利点があります:

  • ポイントを処理するたびにではなく、高価な緯度/経度からメルカトルピクセルへの変換を1回実行します。
  • ズームレベルが指定されたレコードからタイル座標を取得するには、1右シフトします。
  • レコードからピクセル座標を取得するには、1つの右シフトと1つのビット単位のANDが必要です。
  • シフトは非常に軽量であるため、SQLで行うのが実用的です。つまり、DISTINCTを実行してピクセル位置ごとに1つのレコードのみを返すことができます。これにより、バックエンドから返されるレコード数が削減されます。つまり、フロントエンド。

私は最近のブログ投稿でこれらすべてについて話しました:http : //blog.webfoot.com/2013/03/12/optimizing-map-tile-generation/


4

私はいくつかの回答/コメントに非常に驚いています。

いったいなぜ、誰かが自発的に精度を「事前に低下」させ、その後、より悪い数値に対して計算を実行しようとするのでしょうか。最終的に愚かに聞こえます。

ソースの精度が64ビットの場合、自発的にスケールをたとえばに固定するのは無意味です。小数点以下6桁、精度を最大9桁の有効桁数に制限します(これは、一般的に提案されている10進数9.6形式で発生します)。

当然、データはソースマテリアルの精度で保存されます。精度を下げる唯一の理由は、限られた保管スペースです。

  • 元の精度でソース図を保存する
  • 計算が行われる精度でソースから計算された数値を保存します(たとえば、アプリケーションコードがdoubleを使用する場合、結果をdoubleとして保存します)

10進数の9.6形式は、グリッドにスナップする現象を引き起こします。それが発生したとしても、それが最後のステップになるはずです。

蓄積されたエラーを巣に招くことはありません。


2
ほとんどのGPSツールとアプリケーションは小数点以下6桁までしか正確でないためです。無意味なツールを測定することができるものよりも大きな精度にデータを格納するgis.stackexchange.com/questions/8650/...
Yarin

1
@Yarinはい、確かに、質問には記載されていない測定値とGPSについて話します。より確かに、より正確な数値が存在します。しかし、GPSについて考えてみましょう。すでに不正確なものが含まれている64ビットfloatのソースデータセットを言います。小数点以下6桁は、緯度を最も近い約11センチメートルに合わせることを意味します。したがって、データ(小数点以下6桁)のみを保存すると、22 cmの不正確さが生じる可能性があります(元は11 cmでも)。自発的に、おそらくそれについて64ビットの計算を行う前に、おそらく3回目を格納する前に-現在は33 cmの不正確なウィンドウ、+-16 cmです。ばかげているね、私見。
Stormwind 2016年

@Rick Jamesおそらく64ビットとして保存します。0.3333333333333333。地理データについて話しますよね?「1/3」は、通常、物事が妥当な精度で測定される自然界ではめったに現れません。
Stormwind、2018年

4

TL; DR

NASA /軍隊で作業しておらず、航空機のナビゲーションシステムを作成していない場合は、FLOAT(8,5)を使用します。


質問に完全に答えるには、いくつかの点を考慮する必要があります。

フォーマット

  • 度分秒:40°26 ′46″ N 79°58′ 56″ W
  • 小数度:40°26.767 ′N 79°58.933′ W
  • 小数度1:40.446°N 79.982°W
  • 小数度2:-32.60875、21.27812
  • 他の自家製フォーマット?誰もがあなた自身のホームセントリック座標系を作ることを禁止し、それをあなたの家からの方位と距離として保存します。これは、あなたが取り組んでいるいくつかの特定の問題に対して意味をなす可能性があります。

したがって、答えの最初の部分は、アプリケーションが使用する形式で座標を保存して、一定の相互変換を回避し、より単純なSQLクエリを作成することです。

ほとんどの場合、GoogleマップまたはOSMを使用してデータを表示し、GMapは「10進度2」形式を使用しています。したがって、座標を同じ形式で格納する方が簡単です。

精度

次に、必要な精度を定義します。もちろん、「-32.608697550570334,21.278081997935146」のような座標を保存できますが、ポイントまでのナビゲーション中にミリメートルを気にすることはありますか?NASAで作業しておらず、衛星、ロケット、飛行機の軌道を使用していない場合は、数メートルの精度で問題ありません。

一般的に使用される形式は、ドットの後に5桁あり、50cmの精度が得られます。

:X、21.278081 8とX、21.278081 9の間には1cmの距離がありますます。したがって、ドットの後の7桁は1 / 2cmの精度を提供し、ドットの後の5桁は1/2メートルの精度を提供します(異なる点間の最小距離は1mであるため、丸め誤差はその半分を超えることはできません)。ほとんどの民事目的にはそれで十分です。

度の小数形式(40°26.767 ′N 79°58.933′ W)は、ドットの後の5桁とまったく同じ精度を提供します

スペース効率の良いストレージ

10進形式を選択した場合、座標はペアになります(-32.60875、21.27812)。明らかに、2 x(符号は1ビット、度は2桁、指数は5桁)で十分です。

だからここで私はFLOAT(10,6)に保存するためのGoogleの提案が本当に余分であると言っているコメントからAlix Axelをサポートしたいと思い ます。 90に、経度は180に制限されます)。1 / 2m精度のFLOAT(8,5)または50 / 2cm精度のFLOAT(9,6)を簡単に使用できます。または、latにはFLOAT(7,5)で十分なので、latとlongを別々の型で格納することもできます。MySQL float型のリファレンスを参照してください。それらのいずれも通常のFLOATのようになり、いずれにしても4バイトになります。

通常、今日の容量は問題ではありませんが、何らかの理由でストレージを本当に最適化したい場合は(免責事項:事前最適化を行わないでください)、lat(91 000以下の値+符号)+ long(no 181 000を超える値+符号)から21ビットに、2xFLOAT(8バイト== 64ビット)を大幅に下回る



1
  1. 緯度の範囲は-90〜+90(度)なので、DECIMAL(10、8)で十分です。

  2. 経度の範囲は-180〜+180(度)なので、DECIMAL(11、8)が必要です。

注:最初の数値は保存されている桁数の合計で、2番目の数値は小数点以下の数値です。

要するに: lat DECIMAL(10, 8) NOT NULL, lng DECIMAL(11, 8) NOT NULL



-2

Lat Long計算には精度が必要なため、ある種の10進数型を使用し、数学計算を実行するために格納する数値よりも精度を少なくとも2高くします。私のsqlデータ型はわかりませんが、SQLサーバーでは、10進数の代わりにfloatまたはrealを使用することが多く、これらは実数ではなく推定値であるため、問題が発生します。したがって、使用するデータ型が浮動小数点型ではなく、真の10進数型であることを確認してください。問題はありません。


1
浮動小数点型と10進数型の両方に場所があります。経験則として、フロートは物理変数を意味し、小数はカウント可能なエンティティ(主にお金)を意味します。lat / longに10進数を使用する理由がわかりません
Javier

1
floatはlat / longでも問題ないと思います。少なくともSQL Server(4バイト、7桁)。
DragoljubĆurčić2009年

フロートは正確ではありません、推定されます。緯度が長い正確な湖は致命的です!それはあなたを地球上の完全に異なる場所に向けることができます。
HLGEM 2009年

2
floatデータ型の最大エラーは十分に小さいので、これは問題になりません。つまり、どちらの実装でも、エラーの乗算/累積に注意する必要があります。
Spidey 2012

@HLGEM- 小数点以下の桁数を丸めると、地球上の別の場所に移動します。問題は、その別の場所がそれほど重要ではないほど近いかどうかです。
リックジェームズ

-3

A FLOATは必要な精度をすべて提供し、各座標を文字列などとして保存するよりも比較関数に適しています。

ただし、MySQLバージョンが5.0.3より前の場合は、特定の浮動小数点比較エラーに注意する必要があります。

MySQL 5.0.3より前では、DECIMALカラムは文字列として表されるため、正確な精度で値を格納しますが、DECIMAL値の計算は浮動小数点演算を使用して行われます。5.0.3以降、MySQLは10進数64桁の精度でDECIMAL操作を実行します。これにより、DECIMALカラムに関して最も一般的な不正確な問題が解決されます。


2
簡単に計算するには、実際の緯度/経度の座標データ型が必要です。「select * from Stores where distance(stores.location、mylocation)<5 miles」のようなものの便利さを想像してみてください
Kirk Strauser

1
以前は空間拡張について聞いたことがありませんが、それは非常に便利に聞こえます。以前は、地理関連の計算のかなりの部分を行う継承されたアプリに取り組んでいたので、チェックする必要があります。
ConroyP 2008年

@ConroyP-いいえ。その引用はDECIMAL、浮動実装の使用による特定のエラー(5.0.3より前)があったことを指摘しています。
リックジェームズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.