MySQL 存储高精度经纬度

3

我目前在数据库中存储带有6位小数精度的纬度/经度值。但是,我需要在该数据库中存储一些具有12位小数精度的值。我的数据库目前将纬度和经度设置为FLOAT(10,6)。

是否可以设置存储类型以处理6位或12位小数的纬度/经度值?


一个由12个小数位描述的纬度/经度位置相当于微米级精度。我很好奇有哪些应用需要将地球上的位置描述到微米级别? - TreyA
2个回答

4

请使用DOUBLE数据类型。

您应该能够无损地修改您现有的表以此方式工作。例如,

alter table `mytable` 
   change `LAT` `LAT` double NULL , 
   change `LONG` `LONG` double NULL 

但是要注意不要过分夸大数据的准确性。一个普通的32位浮点数经度/纬度值(最好的精度)的ε在地面上仅为几厘米。一个双精度数的ε是一个微小的距离。你的经纬度信息如此精确几乎难以想象。如果是这样,除非使用复杂的地图投影,否则真的没有关系:计算距离的典型哈弗辛公式假定地球是一个完美的球体。它不是。地球的赤道膨胀足以使球形假设在距离更精确的情况下失效,再次提醒,只有几厘米。

这是Randall Munroe(XKCD)对地理坐标精度的看法:

enter image description here


1
注意:当Ollie表示浮点数的最佳精度为几厘米时,这仅在经纬度点0,0(即本初子午线与赤道相交处)附近成立。在美国,使用浮点数无法以厘米级别的精度描述位置。对于经纬度,最好使用双精度浮点数。 - TreyA

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接