如果有人提出任何建议,我将不胜感激:
如何在可以索引的varchar字段中有效地存储gps(或任何浮点数).
背景:
我们开发了一个内容管理系统,可以有效地存储任何类型的文件和一组元数据.此文件/元数据存储如下:
file_table Metadata_table ---------- -------------- file_id -> file_id (number) file_name Metadata_id (number) file_location Metadata_value (varchar) ...etc
我被要求为地理标记文件提供支持(即将gps坐标存储为元数据).此外,我们还希望支持具有多个地理标记的文件.
现在据我所知,我有几个选择:
1)将纬度和经度存储在相同的Metadata_value varchar中(例如’52.4343242,-1.32324′).
我如何查询此字符串?有什么聪明的我可以使用sql,允许我查询字符串的“组件”?我可以将坐标存储为xml字符串 – 这会有帮助吗?如何有效地编制索引?
2)将纬度和经度存储为Metadata_table中的单独行.
这个解决方案解决了支持更容易查询的问题(以牺牲复杂性和笨重为代价,特别是当我将每个文件存储多个地理标记时),但是我仍然面临着索引的问题.
我可以在查询时将varchars转换为浮点数,但是我不确定这是否会忽略我在Metadata_table.Metadata_value上的索引并执行表扫描.
3)创建专用浮点字段以存储gps数据.
这是最不可取的选项,因为它违背了设计的细节,为特定元数据添加数据库字段.并非所有文件都存储gps数据.
任何帮助或建议表示赞赏.
解决方法
您可以使用Oracle定位器. Oracle Spatial的免费子集可以执行各种不同的地理操作和空间数据索引:
http://www.oracle.com/technology/products/spatial/index.html
通过使用列类型mdsys.sdo_geometry,您可以在数据库中存储点,点云,线,多边形和3D事物.