1

我有一个包含地理数据的 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 <= 123.4 AND latitude >= 26.32 AND longitude <= 12.41 AND longitude >= 6.23;

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

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

4

1 回答 1

2

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

SQLite 确实有一个R-tree 模块,但它可能没有被编译到你的 DB 驱动程序中。

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

于 2013-07-25T07:32:00.743 回答