使用什么MySQL数据类型适合具有8位小数的纬度/经度?

17 浏览
0 Comments

使用什么MySQL数据类型适合具有8位小数的纬度/经度?

我正在处理地图数据,经度/纬度的精度为8位小数。例如:\n纬度:40.71727401\n经度:-74.00898606\n我在Google文档中看到了以下内容:\n纬度:lat FLOAT(10, 6) NOT NULL\n经度:lng FLOAT(10, 6) NOT NULL\n然而,他们的小数位只有6位。我应该使用FLOAT(10, 8),还是还有其他方法可以考虑,以便存储这些数据并保持精确性。这些数据将用于地图计算。谢谢!

0
0 Comments

在上述内容中,作者提到了使用float数据类型时会进行舍入操作,导致数据被截断。为了解决这个问题,可以使用double数据类型,这个数据类型具有所需的精度。根据作者的说法,两种表示方式都是“不必要地精确”。

因此,针对经纬度数据,需要使用具有足够精度的数据类型来避免数据丢失。

解决方法:使用double数据类型来存储经纬度数据,以确保数据的完整性和精度。

通过使用double数据类型,我们可以确保经纬度数据的小数部分被正确保存,而不会进行舍入操作。这样可以保证数据的准确性,并且能够绘制出能够区分两个点的有用地图。

对于具有8位小数的经纬度数据,应该使用double数据类型进行存储。这样可以避免数据丢失和舍入操作,确保数据的完整性和精度。

0
0 Comments

当在Laravel中进行数据库迁移时,使用了decimal column列类型。使用$table->decimal('latitude', 10, 8);$table->decimal('longitude', 11, 8);来定义经度和纬度的列。关于可用的列类型可以参考这里

在Laravel中还有一个point类型。为什么要使用浮点数或者point类型?我想知道这里的优势是什么。这种数据类型是否支持负数?当我们需要使用千米半径对坐标(经度和纬度)进行筛选时,是否支持?

以上是一个Laravel开发者在论坛上提出的问题。他在数据库迁移中使用了decimal列类型来存储纬度和经度的数据,但他想知道是否有更好的选择。他还提到了Laravel中的point类型,并对其优势和是否支持负数表示疑惑。此外,他还关注如何使用千米半径对坐标进行筛选的问题。

对于这个问题,有几种解决方法。一种是继续使用decimal列类型,因为它可以存储具有8位小数的经度和纬度数据。另一种选择是使用point类型,它是一种专门用于存储空间数据的数据类型,可以更有效地处理地理位置信息。point类型支持负数,并且可以方便地进行千米半径的筛选。

因此,开发者可以根据自己的需求选择合适的数据类型来存储经度和纬度数据。无论是使用decimal列类型还是point类型,都可以满足存储和筛选坐标数据的需求。

0
0 Comments

MySQL数据类型应该使用什么数据类型来存储带有8位小数的纬度/经度?

在MySQL中,支持空间数据类型,可以使用Point作为单值类型。创建一个具有Point类型的列,并为其定义空间索引,然后可以向该列插入包含纬度和经度的坐标值。

DECIMAL数据类型在除法和取余时如何避免"精度错误"?

DECIMAL数据类型并不是绝对精确,它的精度取决于你给出的精度。但是,如果使用DECIMAL(10, 8)或FLOAT(10, 8)计算0.3 / 3,DECIMAL会给出0.100000000000(正确),而float会给出0.100000003974(正确到8位小数,但如果乘以其他数字就会出错)。DECIMAL和FLOAT之间的主要区别在于它们存储数字的方式,DECIMAL存储十进制数字,而FLOAT存储二进制近似值。

为什么需要使用具有8位小数的纬度和经度?8位小数精度相当于1.1毫米,对于纬度和经度来说为什么需要如此高的精度?

Facebook似乎在纬度上使用了12位小数,在经度上使用了13位小数。8位小数相当于1.1毫米,那么7位和6位呢?(我不擅长数学)。我目前正在使用DOUBLE类型,但我想检查是否可以通过更改数据类型来提高距离计算的性能。

关于纬度和经度的不同位数的小数点的精度,这个问题的答案给出了一些信息。

用于表示纬度和经度的DECIMAL数据类型的长度是否包括负号(-90 / -180)?

不确定,但如果减号被计算为数字的一部分,那么我会感到非常惊讶。

Oğuzhan KURNUÇ的答案展示了另一种获得精确值的方法。这种方法的好处是,一个精确的地理值(约1cm精度)只需要4字节的存储空间,而不是5字节。对于数据库来说,这可能是一个微小的差别,但是当值适合4字节时,计算机在存储和性能方面更高效。缺点是需要记录如何使用该值,并在应用程序中将其转换为其他格式进行计算;DECIMAL(gandaliter使用的数据类型)在这种情况下确实是更自然的数据类型。

重要的是要澄清正在讨论的数字位数是否包括小数点左边的数字。"(.., 8)"是指小数点后的8位数字。对于大多数情况来说,DECIMAL(10, 7)的精度(约为1厘米)已经足够。这可以存储+-179.1234567。如果只需要精确到约1米的精度,可以使用DECIMAL(8, 5)或+-179.12345。然而,为了安全起见,通常会多存储1或2位数字,以防出现舍入误差。

在INSERT语句的POINT函数的纬度和经度参数之间需要添加逗号。

客户端可能要求导弹精确命中目标。

这个问题的回答不完整。能做并不意味着应该这样做。那么为什么要使用Point而不是Float?

对于具有纬度和经度的POINT类型,应该使用哪个SRID?

0