2013-07-24 61 views
1

我有一個包含地理數據的SQLite數據庫。我的表是這樣定義的: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緯度< = 123.4,緯度> = 26.32和經度< = 12.41和經度> = 6.23;

如果我在經度和緯度上創建INDEX,它會提高性能嗎?

接下來,當我得到這個查詢的結果時,我使用了haversine算法來查找大圓距離的對象。

感謝您的意見,

塞巴斯蒂安。

+0

Ofcourse.It將提高性能。 – Phani

+1

SpatiaLite是空間數據的SQLite擴展。使用PostGIS,你會變得更加美好,但這是另一種蠕蟲...... – Spacedman

+0

我已經添加了緯度/經度指標,性能更好。我會嘗試(再次)集成空間 – sebastien

回答

2

正常索引可能有助於某些一維間隔查詢,但是在兩個或多個維度中,您需要爲此類查詢設計的索引,例如R樹。

SQLite確實有R-tree module,但它可能沒有被編譯到您的數據庫驅動程序中。

你可能會考慮SpatiaLite,它是從SQLite派生而來的,並且有許多有用的功能(例如計算大圓距)。

+0

我已經嘗試使用空間,但我無法使其工作。我無法成功加載擴展名來使用它。我使用Xerial JDBC驅動程序與sqlite(3.7.15)一起使用,我的進程在Mac OS X(Mountain lion)上運行。 – sebastien