網格模型是在GeoSOT地球空間剖分理論的基礎上發展出的一種離散化、多尺度地區位置標識體系。
概述
您可以通過網格模型為地球空間(從地心至地上)中的各種對象賦予一個全球唯一編碼,任意一個實體物件都可通過此編碼在同一區城範圍內和各種不同的資料建立內在關聯。
快速入門
- 建立擴充
CREATE EXTENSION Ganos_GeomGrid CASCADE;
- 建立具有網格碼的表
CREATE TABLE t_grid(id integer, geom geometry, -- 幾何對象 grid1 geomgrid[], -- 網格碼,精度1 grid2 geomgrid[], -- 網格碼,精度2 grid3 geomgrid[] -- 網格碼,精度3 );
- 計算網格碼
--向表中插入資料。 INSERT INTO t_grid(id, geom) VALUES (1, ST_GeomFromText('POINT(116.31522216796875 39.910277777777778)', 4490)), (2, ST_GeomFromText('POINT(116.31522217796875 39.910277776777778)', 4490)), (3, ST_GeomFromText('POINT(116.31522217797875 39.910277776787778)', 4490)), (4, ST_GeomFromText('POINT(116.31522227796875 39.910277776775778)', 4490)); --建立不同精度的網格碼。 UPDATE t_grid SET grid1 = ST_AsGrid(geom, 10), grid2 = ST_AsGrid(geom, 15), grid3 = ST_AsGrid(geom, 26);
- 建立網格碼索引
--針對不同精度的網格碼建立GIN索引。 CREATE INDEX idx_grid_gin1 ON t_grid USING GIN(grid1); CREATE INDEX idx_grid_gin2 ON t_grid USING GIN(grid2); CREATE INDEX idx_grid_gin3 ON t_grid USING GIN(grid3);
- 查詢
--完全在某個網格中。 SELECT id FROM t_grid WHERE grid2 = ARRAY[ST_GridFromText('G001310322230230')]; --和某個網格相交。 SELECT id FROM t_grid WHERE grid3 @> ARRAY[ST_GridFromText('G00131032223023031031033223')]; --和某些網格相交。 SELECT id FROM t_grid WHERE grid3 && ARRAY[ST_GridFromText('G00131032223023031031211001'), ST_GridFromText('G00131032223023031031211111')]; --和某個幾何對象在網格上相交。 SELECT id FROM t_grid WHERE grid3 && ST_AsGrid( ST_GeomFromText('LINESTRING(116.31522216796875 39.910277777777778, 116.31522217797875 39.910277776787778)', 4490), 26);
- 刪除擴充
DROP EXTENSION Ganos_GeomGrid CASCADE;