306

私は地図データを扱っており、Latitude/Longitude小数点以下8桁まで拡張されています。例えば:

Latitude 40.71727401
Longitude -74.00898606

以下を使用するGoogleドキュメントで見ました :

lat FLOAT( 10, 6 ) NOT NULL,  
lng FLOAT( 10, 6 ) NOT NULL

ただし、小数点以下の桁数は 6 までしかありません。このデータを正確に保存するために別の方法を
使用する必要がありますか、または別の方法を検討する必要があります。FLOAT(10, 8)マップ計算で使用されます。ありがとう!

4

11 に答える 11

672

MySQLは空間データ型をサポートしてPointおり、使用できる単一値型です。例:

CREATE TABLE `buildings` (
  `coordinate` POINT NOT NULL,
  /* Even from v5.7.5 you can define an index for it */
  SPATIAL INDEX `SPATIAL` (`coordinate`)
) ENGINE=InnoDB;

/* then for insertion you can */
INSERT INTO `buildings` 
(`coordinate`) 
VALUES
(POINT(40.71727401 -74.00898606));
于 2012-09-19T23:39:41.177 に答える
22

floatさらに、値が丸められていることがわかります。

// 例: 与えられた値 41.0473112,29.0077011

float(11,7) | 10 進数 (11,7)
---------------------------
41.0473099 | 41.0473112
29.0077019 | 29.0077011

于 2015-05-24T19:01:06.650 に答える
10

float を使用しないでください...座標が丸められ、奇妙なことが起こります。

小数を使用

于 2018-02-27T01:13:18.827 に答える
7

この質問が出されてから、MySQL は空間データ型をサポートするようになりました。したがって、現在受け入れられている答えは間違っていませんが、特定のポリゴン内のすべてのポイントを見つけるなどの追加機能を探している場合は、 POINT データ型を使用してください。

地理空間データ型と空間分析関数に関する Mysql ドキュメントを確認してください

于 2019-03-16T13:37:44.030 に答える
6

データ型を符号付き整数として設定できます。座標を SQL に保存する場合、lat*10000000 および long*10000000 として設定できます。距離/半径で選択すると、ストレージ座標が 10000000 に分割されます。私は 300K 行でテストしましたが、クエリの応答時間は良好です。(2 x 2.67GHz CPU、2GB RAM、MySQL 5.5.49)

于 2016-05-09T23:59:40.977 に答える