将地理坐标数据存储在数据库中的最佳方法是什么

时间:2011-07-12 14:33:20

标签: database geospatial

我正在构建一个移动地图应用程序,我想将GPS Track数据,航点等存储在数据库中(SQL CE 4.0)。这意味着我只能访问基本数据类型(http://msdn.microsoft.com/en-us/library/ms172424(SQL.110).aspx

  1. 我应该使用什么样的坐标系(Lat / Long,WGS 84,...)
  2. 给出1的答案,您建议采用什么数据类型。
  3. 我可能想做的操作

    • 找到x距离内的所有兴趣点
    • 计算点x和y之间的距离
    • 找到最近的航点到点x

1 个答案:

答案 0 :(得分:3)

WGS84是大地测量系统(基准面),而不是坐标系 - 字面上(W)orld(G)eodetic(S)系统19(84)。所以我不是100%肯定你在问什么。

如果您要询问决定使用哪个数据,那么这取决于您打算对数据和您正在处理的位置做什么。例如,如果您只是处理基于英国的功能并希望在OS地图上显示点,那么OSGB36将是最有意义的。如果您需要全球参考系统并希望使用诸如谷歌地图之类的东西,那么WGS84将是最好的。值得注意的是,WGS84是存储在娱乐和商用GPS装置中的坐标的默认标准数据。

然而,所有这些基准都基于纬度和经度的地理坐标系定义点 - 因此它们都使用相同的“坐标系”。使用Helmert转换矩阵在基准之间进行转换也是可能的,因此即使某些替代系统在特定情况下更适用,您也不会被卡住。

除此之外,如果您使用的是SQL CE,我建议使用一个简单的表来存储航点。在很多情况下,类似下面的东西应该可以正常工作。您需要确定坐标所需的精度水平。 e.g。

CREATE TABLE 'waypoints' (
 'id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
 'name' VARCHAR( 60 ) NOT NULL ,
 'type' VARCHAR( 30 ) NOT NULL ,
 'latitude' FLOAT( 10, 6 ) NOT NULL ,
 'longitude' FLOAT( 10, 6 ) NOT NULL
)'

显然,您可能不需要“名称”和“类型”等字段,它们只是用于显示人们如何以人类可读的方式区分航路点。