在服务器上存储GPS坐标(轨迹)的最佳方式

5

如何在服务器上(MySQL或Oracle或任何文件)存储GPS坐标(轨迹)的最佳方法?例如,GoogleMaps是如何实现的?我想保存和比较相同部分的轨迹。

P.S. 我已经拥有所有必要的数据。

1个回答

9

如果我是你,我会使用TRACK和POINT表。

TRACK表将包含每个不同轨道的一行。

  TRACK_ID      int not null  (PK)
  NAME          varchar(40)
  DESCRIPTION   varchar(255)
  other identifying information

POINT表将包含每个轨迹中的多个点的多行记录

  POINT_ID     int not null  (PK)
  TRACK_ID     int not null  (FK to TRACK)
  LAT          float  degrees  .. positive means north
  LONG         float  degrees  .. positive means east, negative means west
  ALT          float (elevation if you have it)
  TS           timestamp of point

关于这个问题,有几点需要注意。首先,将POINT表的行保持较短;因为你会有很多这样的行,所以你需要能够快速处理它们。其次,不要诱惑自己使用double而不是float;对于典型的点来说,float数据格式具有足够的精度(除非你是一名土地测量员并且了解通用横轴墨卡托投影等相关知识)。


不要在Lat/Long中使用float。对于简单的小数,您不需要浮点数,否则您最终会得到奇怪的舍入错误,例如56.56837000000000001(即使这不是您插入数据库的内容)。如果您的数据库支持,请使用decimal(9,6)。 - NickG
@NickG,我非常尊重您的意见。您对于像金钱这样的数字是正确的,但GPS数据本质上是基于测量的,也就是说,它受到自己特定的epsilon精度限制的影响。https://en.wikipedia.org/wiki/Machine_epsilon FLOAT具有商业GPS所需的适当精度。 - O. Jones
1
那么我们将不得不同意不同意见 :) 你永远不需要的最大数字是180,而最小的数字(考虑到GPS的固有不准确性)约为7个小数位,因此浮点表示是不必要的。请参阅:https://dev59.com/5Wgu5IYBdhLWcg3w2KXM - NickG

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