database - 在数据库中存储地理坐标数据的最佳方式是什么

标签 database geospatial

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

  1. 我应该使用什么坐标系(纬度/经度、WGS 84、...)
  2. 如果回答 1,您建议使用哪种数据类型。

我可能想做的操作

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

最佳答案

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

如果您问的是决定使用哪个数据,那么这将取决于您打算如何处理数据以及您要处理的位置。例如,如果您只处理基于英国的功能并希望在操作系统 map 上显示点,那么 OSGB36 将最有意义。如果您需要一个世界范围的引用系统并希望使用诸如谷歌地图之类的东西,那么 WGS84 将是最好的。值得注意的是,WGS84 是存储在娱乐和商业 GPS 装置中的坐标的默认标准基准。

然而,所有这些数据都基于纬度和经度的地理坐标系来定义点 - 因此它们都使用相同的“坐标系”。也可以使用 Helmert 变换矩阵在基准面之间进行转换,因此即使某些替代系统更适用于特定情况,您也永远不会陷入困境。

除此之外,如果您使用的是 SQL CE,我建议您使用一个简单的表来存储航路点。像下面这样的东西在很多情况下应该都能很好地工作。您需要确定坐标所需的精度级别。例如

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
)'

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

--

只是添加 - 关于您可能希望执行的各种操作或计算;在 x 距离内,x 和 y 之间的距离等。您再次需要决定您的应用程序需要什么样的精度级别。对于大多数情况,使用简单的余弦球面定律就足够了,但是您可能希望实现更准确的东西,例如 Haversine formula , 或 Vincenty's formulae

关于database - 在数据库中存储地理坐标数据的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6665894/

相关文章:

database - YugaByte DB SQL API 是否支持数组类型

php - JavaScript 无法获取用户的个人资料名称和 ID

mysql - 导出 mysql 数据库时 mysql 表中的日期值发生变化

python - 如何扩展 django 用户默认模型数据库

r - 在 R 中的一个位置处理多个点

database - 在不同项目之间共享微服务

r - 比较空间多边形并保留或删除 R 中的公共(public)边界

python - GeoModel with Google App Engine - 查询

java - geoNear 返回不正确的距离

python - 如何使用 GeoDataFrame 生成 Folium map ?