将GPS位置存储在数据库varchar字段中

Ala*_*lan 7 sql database

如果有人提出任何建议,我将不胜感激:

如何在可以编制索引的varchar字段中有效地存储gps(或任何浮点数).


背景:

我们开发了一个内容管理系统,可以有效地存储任何类型的文件和一组元数据.此文件/元数据存储如下:

file_table              metadata_table
----------              --------------
file_id         ->      file_id (number)
file_name               metadata_id (number)
file_location           metadata_value (varchar)
...etc
Run Code Online (Sandbox Code Playgroud)

我被要求提供对地理标记文件的支持(即将gps坐标存储为元数据).此外,我们还希望支持具有多个地理标记的文件.

现在据我所知,我有几个选择:

1)将纬度和经度存储在相同的metadata_value varchar中(例如'52.4343242,-1.32324').

我如何查询此字符串?有什么聪明的我可以使用sql,允许我查询字符串的"组件"?我可以将坐标存储为xml字符串 - 这会有帮助吗?如何有效地编入索引?

2)将纬度和经度存储为metadata_table中的单独行.

这个解决方案解决了支持更容易查询的问题(以牺牲复杂性和笨重为代价,特别是当我将为每个文件存储多个地理标记时),但是我仍然面临索引问题.

我可以在查询时将varchars转换为浮点数,但是我不确定这是否会忽略我在metadata_table.metadata_value上的索引并执行表扫描.

3)创建专用浮点字段以存储gps数据.

这是最不可取的选项,因为它违背设计的细节以添加特定元数据的数据库字段.并非所有文件都存储gps数据.

任何帮助或建议表示赞赏.

gue*_*rda 2

对于选项 1,我可以说:使用Gps eXchange Format (GPX)。这是保存 GPS 点的标准方法。有标记航路点、轨迹和兴趣点的选项。
尽管如此,查询起来并不容易。