ted*_*dyk 40 mysql database gps rdbms database-design
我在我的MySQL数据库中有经度和纬度坐标(GPS数据).
它目前存储为:
column type
------------------------
geolat decimal(10,6)
geolng decimal(10,6)
Run Code Online (Sandbox Code Playgroud)
问题: 我是否真的需要一个decimal(10,6)
与正确存储坐标数据一样大的数据类型?
由于我在经度和纬度上有一个综合索引,因此这个索引大小很大.如果我可以在不牺牲任何东西的情况下缩小它,那就太好了.
Cad*_*oux 34
WGS84数据通常以完全十进制表示法的坐标给出,通常有5个小数位,因此对于纬度(-90到+90),您可以使用小数(7,5)( - 90.00000到90.00000),经度可以使用十进制(8,5)( - 180.00000至180.00000).
.00001 在赤道上提供大约一米的精度
该DECIMAL/NUMERIC数据类型为固定精度缩放整数和范围的正面和负面的部分总是可用的-它们不影响精度或者比例(显然有它所需的存储,但你没有得到一个选择关于DECIMAL的那个)
这取决于您进行的调查的准确性。一般来说:
因此,除非对构造板块运动进行非常精确的研究,否则使用 6 位数字就足够了。
以下是来自whuber(GIS 堆栈溢出)的完整答案的副本:
准确度是您的测量值与真实值一致的趋势。精度是您的测量确定实际值的程度。问题是关于准确性和精确度的相互作用。
作为一般原则,您在记录测量值时不需要比内置的精度更高的精度。使用过多的精确度会误导人们相信精确度高于实际值。
通常,当您降低精度(即,使用较少的小数位)时,您可能会失去一些准确性。但是多少钱?很高兴知道仪表最初是由法国人定义的(大约在他们革命的时候,当时他们正在抛弃旧系统并用新系统热情地替换它们),以便其中一千万会带你从赤道到一根杆子。那是 90 度,所以一个纬度覆盖大约 10^7/90 = 111,111 米。(“大约”,因为在此期间仪表的长度发生了一些变化。但这并不重要。)此外,经度(东西向)的长度与纬度的长度大致相同或更少,因为当我们从赤道向任一极移动时,纬度圈缩小到地轴。因此,它'
因此,如果您的精度需求是,比如说,给或取 10 米,那么 1/9 米就不算什么:使用六位小数基本上不会损失精度。如果您的精度要求是亚厘米,那么您至少需要七个小数位,可能还有八个小数位,但更多的数字对您没什么好处。
十三个小数位将确定位置为 111,111/10^13 = 约 1 埃,大约是小原子厚度的一半。
使用这些想法,我们可以构建一个表格,其中包含十进制度中每个数字的含义: