网格模型是在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;