我的MySQL数据库中包含经度和纬度坐标(GPS数据)。
目前存储为:
column type
------------------------
geolat decimal(10,6)
geolng decimal(10,6)
问题:我是否真的需要与decimal(10,6)
一样大的数据类型来正确存储坐标数据?
由于我在经度和纬度上有一个综合索引,因此这个索引大小很大。如果我能在不妥协的情况下将其缩小,那就太棒了。
答案 0 :(得分:35)
WGS84数据通常以完全十进制表示法给出坐标,通常有5位小数,因此对于纬度(-90到+90),您可以使用小数(7,5)(-90.00000到90.00000) ),对于经度,你可以使用小数(8,5)(-180.00000到180.00000)。
.00001 gives an precision of around a meter at the equator
DECIMAL/NUMERIC data type is a fixed precision scaled integer以及范围的正面和负面部分始终可用 - 它们不会影响精度或比例(显然需要存储空间,但您无法选择十进制)
答案 1 :(得分:4)
我一直在小数点后用六位数。我曾经根据军事合同进行GIS工作,这已经足够了。
答案 2 :(得分:3)
请记住,减少数据比增加数据更容易。通常,在重新测量之前,甚至不可能提高数据准确性。重新测量需要付出代价。我不知道你的情况或行业,我会说尽可能多地捕获数据/特异性。
您可以从此集中剔除您实际使用的数据。如果您最终需要更高程度的特异性,您可以随时重新计算而无需重新计算。
另外,我不确定索引原始数据是最好的事情,因为它不是一组离散的元素。创建一个不太准确/较小数据点的表会使索引更小。
答案 3 :(得分:3)
这取决于您进行的调查的准确性。一般来说:
因此,除非进行非常精确的研究(即构造板块运动),否则使用6位数字就足够了。
这是full answer from whuber (GIS stack overflow):
的副本准确度是您的测量与真实值一致的趋势。 精度是您的测量确定实际值的程度。问题在于准确性和准确性之间的相互作用。
作为一般原则,记录测量值并不需要太多的精度。使用过多的精度可能会误导人们,使他们认为精度比实际精度更高。
通常,当降低精度时(即使用较少的小数位),您可能会失去一些精度。但是多少钱?很高兴知道电表最初是由法国人定义的(在法国革命期间,他们抛弃了旧系统,并热情地将它们替换为新系统),因此有一千万个带您将您从赤道带到了一根杆子。那是90度,因此一个纬度覆盖大约10 ^ 7/90 = 111,111米。 (“大约”,因为同时米的长度有所变化。但这无关紧要。)此外,经度(东西向)的长度与纬度大约相同或更小,因为当我们从赤道向任一极移动时,纬度圆会缩小到地球的轴心。因此,始终可以确定,小数点后第六位的小数位具有111,111 / 10 ^ 6 =大约1/9米=大约4英寸的精度。
因此,如果您的准确度要求是,例如给定或接受10米,那么比1/9米就算什么:通过使用六个小数位,您基本上不会失去任何准确度。如果您的精度要求是不到厘米,那么您至少需要保留七个小数位,可能还需要八个小数位,但是更多的东西对您没有好处。
小数点后十三位会将位置固定为111,111 / 10 ^ 13 = 1埃,约为小原子厚度的一半。
利用这些想法,我们可以构建一个表格,以十进制度表示每个数字所表示的含义:
答案 4 :(得分:1)
如果这是用于房地产你真的有这么多的房子,每行节省2个字节是显而易见的吗?除非有充分的理由不这样做,否则我会尽可能保持精确度。
答案 5 :(得分:0)
这取决于您希望定位的准确程度。显然越大越精确,越小,结果越宽。我建议保持你的价值更大,因为它不是真正的数据。
答案 6 :(得分:0)
NMEA Lat / lon输出中的常规GGA声望仅为3十四度,在赤道处的分辨率大约为10米。有些品牌会添加一个自定义额外数字,以提供1米。
4位数mm / mm也很常见。
如果您使用的是高端精密RTK-GPS,则可能需要更多位置才能获得mm精度
答案 7 :(得分:0)
您还可以尝试以不同的单位存储(和/或使用)坐标。我工作的一个项目,我们所有的坐标都以毫秒存储为长(也许是整数,已经过了几年)。这部分是为了速度和存储空间(这是一个嵌入式系统)。但是同样的逻辑也适用于此。
答案 8 :(得分:0)
如果所有坐标都在特定区域,请修复一些中心点(即平均当前点和圆形以获得您可以大声说出的数字),然后将坐标存储为相对于此点。这样你就可以跳过前2-4个最重要的数字,从而节省大笔费用。但请记住只能通过Class或VIEW处理这些数据,这样可以返回真正的WGS84坐标。