【问题标题】:sqlite, index for geographical coordinates?sqlite,地理坐标的索引?
【发布时间】:2013-07-24 20:59:52
【问题描述】:

我有一个包含地理数据的 SQLite 数据库。我的表是这样定义的:

     CREATE TABLE GEO_OBJECTS (ID VARCHAR(30) PRIMARY KEY     NOT NULL,
                LATITUDE       NUMERIC(6,3)      NOT NULL,  
                LONGITUDE      NUMERIC(6,3)      NOT NULL)  

接下来,我的软件 (Java) 使用如下简单的 SQL 请求查找 GEO_OBJECTS:

SELECT * FROM GEO_OBJECTS WHERE latitude = 26.32 AND longitude = 6.23;

如果我在纬度和经度上创建一个索引,它会提高性能吗?

接下来,当我得到这个查询的结果时,我正在使用半正弦公式来查找大圆距离内的对象。

【问题讨论】:

  • 当然。它会提高性能。
  • 您最好使用 SpatiaLite,它是空间数据的 SQLite 扩展。使用 PostGIS 会更好,但那是完全不同的蠕虫……
  • 我添加了纬度/经度索引,性能更好。我会(再次)尝试整合空间元素

标签: java sqlite geospatial


【解决方案1】:

普通索引可能有助于某些一维区间查询,但在二维或更多维度中,您需要为此类查询设计的索引,例如 R-tree。

SQLite 确实有一个R-tree module,但它可能没有编译到您的数据库驱动程序中。

你可以考虑SpatiaLite,它是从SQLite派生出来的,有很多有用的功能(比如计算大圆距离)。

【讨论】:

  • 我已经尝试过使用spatialite,但无法使用。我无法成功加载扩展以使用它。我正在使用 Xerial JDBC 驱动程序与 sqlite (3.7.15) 一起使用,并且我的进程正在 Mac OS X (Mountain lion) 上运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 2014-03-24
  • 2016-07-19
相关资源
最近更新 更多