當前僅使用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是如果該表不是內存表。否則它將被存儲在內存中。