【问题标题】:MySQL store latitude, longitude with high level precisionMySQL以高精度存储纬度,经度
【发布时间】:2012-03-03 07:44:34
【问题描述】:

我目前将 lat/lng 值存储在具有 6 个小数位精度的数据库中。但是,我需要存储在此数据库中的某些值具有 12 位小数精度。我的数据库当前设置了经纬度

浮点数 (10, 6)

是否可以设置存储类型,使其可以处理 6 位十进制或 12 位十进制 lat/lng 值?

【问题讨论】:

  • 由 12 位小数描述的纬度/经度位置等同于微米精度。我很好奇什么应用程序需要将地球上的位置描述到微米级别?

标签: mysql types storage latitude-longitude


【解决方案1】:

使用DOUBLE 数据类型。

您应该能够以非破坏性方式更改现有表以使其工作。例如,

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

但请注意不要夸大数据的准确性。一个普通的float 32 位浮点 lat/long 值(可能的最佳精度)的 epsilon 是地面几厘米。 double 的 epsilon 是一个很小的距离。您的纬度/经度信息如此精确几乎是不可想象的。如果是这样,除非您使用复杂的制图投影,否则这真的无关紧要:用于计算距离的典型半正弦公式假设地球是一个完美的球体。它不是。地球的赤道隆起大到足以使球面假设在比几厘米更精确的距离上失效。

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

【讨论】:

  • 注意:当 Ollie 声明浮点数的最佳可能精度为几厘米时,这仅在纬度/经度点 0,0(本初子午线与赤道相交处)附近是正确的。在美国,不可能用浮点数来描述精确到厘米的位置。最好使用双精度表示纬度/经度。
【解决方案2】:

你想看看使用空间扩展.. 看看这个链接

MYSQL and using Spatial Extensions

【讨论】:

    猜你喜欢
    • 2015-08-31
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2011-09-18
    • 2012-03-22
    相关资源
    最近更新 更多