2015-01-14 50 views
3

我正在尋找在某些GIS處理任務中使用嵌入式H2數據庫。我注意到他們的網站上,他們支持JTS的幾何形狀和空間索引:在H2中運行空間查詢的語法是什麼?

http://www.h2database.com/html/grammar.html#create_index http://www.h2database.com/html/datatypes.html#geometry_type

但我一直無法找到利用幾何/邊框查詢。 H2中是否有類似Oracle中的SDO_FILTER(http://docs.oracle.com/cd/A97630_01/appdev.920/a96630/sdo_operat.htm#BJAFBCFC)?如果不是,我誤解了這個功能的目的嗎?

據我所知,H2有一個單獨的空間插件(http://www.h2gis.org/),但可以在沒有這個的情況下進行簡單的空間查詢?

回答

4

當前僅使用h2的空間查詢限於使用幾何邊界框過濾行。

空間特徵

當提供JTS Topology Suite罐子H2能夠處理幾何類型和空間索引。

下載JTS 1.13並將其放置在h2 bin目錄中。

然後編輯h2.sh:

#!/bin/sh 
dir=$(dirname "$0") 
java -cp "$dir/h2-1.4.178.jar:jts-1.13.jar:$H2DRIVERS:$CLASSPATH" org.h2.tools.Console "[email protected]" 

運行SH,Web控制檯將被打開。

這裏SQL創建空間表:

CREATE TABLE GEOTABLE(GID SERIAL, THE_GEOM GEOMETRY); 
INSERT INTO GEOTABLE(THE_GEOM) VALUES ('POINT(500 505)'); 
INSERT INTO GEOTABLE(THE_GEOM) VALUES ('LINESTRING(550 551, 525 512, 565 566)'); 
INSERT INTO GEOTABLE(THE_GEOM) VALUES ('POLYGON ((550 521, 580 540, 570 564, 512 566, 550 521))'); 

爲了創建一個空間索引(RTREE):

CREATE SPATIAL INDEX GEOTABLE_SPATIALINDEX ON GEOTABLE(THE_GEOM); 

&&操作就像PostGIS的一個。它會做一個幾何信封相交測試:

SELECT * FROM GEOTABLE WHERE THE_GEOM && 'POLYGON ((490 490, 536 490, 536 515, 490 515, 490 490))' 

空間索引使用的證據:空間索引存儲在磁盤上

PUBLIC.GEOTABLE_SPATIALINDEX: THE_GEOM && 'POLYGON ((490 490, 536 490, 536 515, 490 515, 490 490))' WHERE INTERSECTS(THE_GEOM, 'POLYGON ((490 490, 536 490, 536 515, 490 515, 490 490))') 

EXPLAIN SELECT * FROM GEOTABLE WHERE THE_GEOM && 'POLYGON ((490 490, 536 490, 536 515, 490 515, 490 490))' 

的resut是如果該表不是內存表。否則它將被存儲在內存中。

相關問題