本文将介绍GeomGrid SQL所支持的操作符,包括操作符的使用语法、参数以及相关的简单示例。
支持的操作符
操作符 | 说明 |
@> | 查询网格对象代表的空间范围是否包含几何对象。 |
<@ | 查询网格对象代表的空间范围是否被几何对象包含。 |
&&& | 查询地理网格对象代表的空间范围和几何对象是否相交。 |
@@> | 查询地理网格对象代表的空间范围和几何对象是否包含。 |
<@@ | 查询地理网格对象代表的空间范围和几何对象是否被包含。 |
&& | 判断两个GeomGrid/Geometry对象或两个H3Grid/Geometry对象的外包框的空间相交关系。 |
~ | 判断两个GeomGrid/Geometry对象或两个H3Grid/Geometry对象的外包框的空间包含关系。 |
@ | 判断两个GeomGrid/Geometry对象或两个H3Grid/Geometry对象的外包框的空间包含关系。 |
具体的语法以及使用示例如下所示:
@>
查询网格对象代表的空间范围是否包含几何对象。
语法
boolean @>(geomgrid grid, geometry geom);
boolean @>(geometry geom, geomgrid grid);
boolean @>(geomgrid grid1, geomgrid grid2);
参数
参数名称 | 描述 |
grid | 网格对象。 |
geom | 几何对象。 |
注意事项
几何对象空间参考必须是CGC2000(SRID=4490)。
示例
示例一:
SELECT ST_gridfromtext('G001331032213300013') @> ST_geomfromtext('POINT(116.31522216796875 39.910277777777778)',4490) AS t;
返回值:
t --------------- f
示例二:
SELECT ST_gridfromtext('G00133103221330') @> ST_gridfromtext('G001331032213300013') AS t;
返回值:
t ------------- t
<@
查询网格对象代表的空间范围是否被几何对象包含。
语法
boolean <@(geomgrid grid, geometry geom);
boolean <@(geometry geom, geomgrid grid);
boolean <@(geomgrid grid1, geomgrid grid2);
参数
参数名称 | 描述 |
grid | 网格对象。 |
geom | 几何对象。 |
注意事项
几何对象空间参考必须是CGC2000(SRID=4490)。
示例
示例一:
SELECT ST_geomfromtext('POINT(116.31522216796875 39.910277777777778)',4490) <@ ST_gridfromtext('G001331032213300013') AS t;
返回值
t --------------- f
示例二:
SELECT ST_gridfromtext('G001331032213300013') <@ ST_gridfromtext('G001331032213300') AS t;
返回值:
t ------------- t
&&&
查询地理网格对象代表的空间范围和几何对象是否相交。
语法
bool &&&(geometry geom3d, geomgrid gridcode);
bool &&&(geomgrid gridcode, geometry geom3d);
bool &&&(meshgeom geom3d, geomgrid gridcode);
bool &&&(geomgrid gridcode, meshgeom geom3d);
bool &&&(sfmesh geom3d, geomgrid gridcode);
bool &&&(geomgrid gridcode, sfmesh geom3d);
bool &&&(vomesh geom3d, geomgrid gridcode);
bool &&&(geomgrid gridcode, vomesh geom3d);
bool &&&(geomgrid gridcode1, geomgrid gridcode2);
参数
参数名称 | 描述 |
gridcode/gridcode1/gridcode2 | 地理网格对象。 |
geom3d | 三维几何对象。 |
注意事项
几何对象空间参考必须是CGC2000(SRID=4490)。
示例
示例一:
SELECT ST_GridFromText('GZ00262064446046072072') &&& 'srid=4490;POINT(116.31522216796875 39.910277777777778 1001.8)'::geometry;
返回值:
st_3dintersects ----------------- f
示例二:
SELECT ST_GridFromText('GZ00262064') &&& ST_GridFromText('GZ00262063');
返回值:
st_3dintersects ----------------- t
@@>
查询地理网格对象代表的空间范围和几何对象是否包含。
语法
bool @@>(geometry geom3d, geomgrid gridcode);
bool @@>(geomgrid gridcode, geometry geom3d);
bool @@>(meshgeom geom3d, geomgrid gridcode);
bool @@>(geomgrid gridcode, meshgeom geom3d);
bool @@>(sfmesh geom3d, geomgrid gridcode);
bool @@>(geomgrid gridcode, sfmesh geom3d);
bool @@>(vomesh geom3d, geomgrid gridcode);
bool @@>(geomgrid gridcode, vomesh geom3d);
bool @@>(geomgrid gridcode1, geomgrid gridcode2);
参数
参数名称 | 描述 |
gridcode/gridcode1/gridcode2 | 地理网格对象。 |
geom3d | 三维几何对象。 |
注意事项
几何对象空间参考必须是CGC2000(SRID=4490)。
示例
示例一:
SELECT ST_GridFromText('GZ00262064446046072072') @@> 'srid=4490;POINT(116.31522216796875 39.910277777777778 1001.8)'::geometry;
返回值
st_3dcontains ----------------- t
示例二:
SELECT ST_GridFromText('GZ00262064') @@> ST_GridFromText('GZ002620643');
返回值:
st_3dcontains ----------------- t
<@@
查询地理网格对象代表的空间范围和几何对象是否被包含。
语法
bool <@@(geometry geom3d, geomgrid gridcode);
bool <@@(geomgrid gridcode, geometry geom3d);
bool <@@(meshgeom geom3d, geomgrid gridcode);
bool <@@(geomgrid gridcode, meshgeom geom3d);
bool <@@(sfmesh geom3d, geomgrid gridcode);
bool <@@(geomgrid gridcode, sfmesh geom3d);
bool <@@(vomesh geom3d, geomgrid gridcode);
bool <@@(geomgrid gridcode, vomesh geom3d);
bool <@@(geomgrid gridcode1, geomgrid gridcode2);
参数
参数名称 | 描述 |
gridcode/gridcode1/gridcode2 | 地理网格对象。 |
geom3d | 三维几何对象。 |
注意事项
几何对象空间参考必须是CGC2000(SRID=4490)。
示例
SELECT ST_GridFromText('GZ0026206435') <@@ ST_GridFromText('GZ002620643');
返回值:
st_3dwithin
-----------------
t
&&
判断两个GeomGrid/Geometry对象或两个H3Grid/Geometry对象的外包框的空间相交关系,其中GeomGrid或H3Grid会转换为Geometry对象后再进行外包框空间关系判断。
语法
bool &&(GeomGrid A, GeomGrid B);
bool &&(GeomGrid A, Geometry B);
bool &&(Geometry A, GeomGrid B);
bool &&(H3Grid A, H3Grid B);
bool &&(H3Grid A, Geometry B);
bool &&(Geometry A, H3Grid B);
返回值
若满足空间相交关系则返回true,否则返回false。
参数
参数名称 | 描述 |
A | GeomGrid/H3Grid/Geometry对象。 |
B | GeomGrid/H3Grid/Geometry对象。 |
描述
判断两个GeomGrid/Geometry对象或两个H3Grid/Geometry对象的外包框的空间相交关系,相交返回true,不相交返回false。
GeomGrid或H3Grid会转换为Geometry对象后再进行外包框空间关系判断。
默认会将GeomGrid对象转换为4490坐标系的Geometry对象。
默认会将H3Grid对象转换为4326坐标系的Geometry对象。
示例
示例一:
--&&(GeomGrid, GeomGrid) SELECT COUNT(*) from geomgrid_gist_test WHERE 'G00'::GeomGrid && code;
返回值:
------- 5
示例二:
--&&(GeomGrid, Geometry) SELECT COUNT(*) from geomgrid_gist_test WHERE code && 'SRID=4490;POLYGON((80 20,90 20,90 25,80 25,80 20))'::Geometry;
返回值:
------- 5
示例三:
--&&(H3Grid, H3Grid) SELECT COUNT(*) from h3grid_gist_test where code && ST_H3FromLatLng(-17.5, -65.0, 1);
返回值:
------- 1
示例四:
--&&(Geometry, H3Grid) SELECT COUNT(*) from h3grid_gist_test WHERE 'SRID=4490;POLYGON((-70 -20,-60 -20,-60 -10,-70 -10,-70 -20))'::Geometry && code;
返回值:
------- 1
~
判断两个GeomGrid/Geometry对象或两个H3Grid/Geometry对象的外包框的空间包含关系,其中GeomGrid或H3Grid会转换为Geometry对象后再进行外包框空间关系判断。
语法
bool ~(GeomGrid A, GeomGrid B);
bool ~(GeomGrid A, Geometry B);
bool ~(Geometry A, GeomGrid B);
bool ~(H3Grid A, H3Grid B);
bool ~(H3Grid A, Geometry B);
bool ~(Geometry A, H3Grid B);
返回值
若对象A的外包框包含对象B的外包框,则返回true,否则返回false。
参数
参数名称 | 描述 |
A | GeomGrid/H3Grid/Geometry对象。 |
B | GeomGrid/H3Grid/Geometry对象。 |
描述
判断两个GeomGrid/Geometry对象或两个H3Grid/Geometry对象的外包框的空间包含关系,若对象A的外包框包含对象B的外包框,返回true,否则返回false。
GeomGrid或H3Grid会转换为Geometry对象后再进行外包框空间关系判断。
默认会将GeomGrid对象转换为4490坐标系的Geometry对象。
默认会将H3Grid对象转换为4326坐标系的Geometry对象。
示例
示例一:
--~(GeomGrid, GeomGrid) SELECT COUNT(*) from geomgrid_gist_test WHERE 'G00'::GeomGrid ~ code;
返回值:
------- 5
示例二:
--~(Geometry, GeomGrid) SELECT COUNT(*) from geomgrid_gist_test WHERE 'SRID=4490;POLYGON((88 24,88.8 24,88.8 24.5,88 24.5,88 24))'::Geometry ~ code;
返回值:
------- 2
示例三:
--~(H3Grid, H3Grid) SELECT COUNT(*) from h3grid_gist_test where code ~ ST_H3FromLatLng(-17.5, -65.0, 1);
返回值:
------- 0
示例四:
--~(Geometry, H3Grid) SELECT COUNT(*) from h3grid_gist_test WHERE 'SRID=4326;POLYGON((0 30,5 30,5 38,0 38,0 30))'::Geometry ~ code;
返回值:
------- 1
@
判断两个GeomGrid/Geometry对象或两个H3Grid/Geometry对象的外包框的空间包含关系,其中GeomGrid或H3Grid会转换为Geometry对象后再进行外包框空间关系判断。
语法
bool @(GeomGrid A, GeomGrid B);
bool @(GeomGrid A, Geometry B);
bool @(Geometry A, GeomGrid B);
bool @(H3Grid A, H3Grid B);
bool @(H3Grid A, Geometry B);
bool @(Geometry A, H3Grid B);
返回值
若对象A的外包框被对象B的外包框包含,则返回true,否则返回false。
参数
参数名称 | 描述 |
A | GeomGrid/H3Grid/Geometry对象。 |
B | GeomGrid/H3Grid/Geometry对象。 |
描述
判断两个GeomGrid/Geometry对象或两个H3Grid/Geometry对象的外包框的空间包含关系,若对象A的外包框被对象B的外包框包含,返回true,否则返回false。
GeomGrid或H3Grid会转换为Geometry对象后再进行外包框空间关系判断。
默认会将GeomGrid对象转换为4490坐标系的Geometry对象。
默认会将H3Grid对象转换为4326坐标系的Geometry对象。
示例
示例一:
--@(GeomGrid, GeomGrid) SELECT COUNT(*) from geomgrid_gist_test WHERE code @ 'G00'::GeomGrid;
返回值:
------- 5
示例二:
--@(GeomGrid, Geometry) SELECT COUNT(*) from geomgrid_gist_test WHERE code @ 'SRID=4490;POLYGON((88 24,88.8 24,88.8 24.5,88 24.5,88 24))'::Geometry;
返回值:
------- 2
示例三:
--@(H3Grid, H3Grid) SELECT COUNT(*) from h3grid_gist_test where code @ ST_H3FromLatLng(-17.5, -65.0, 1);
返回值:
------- 1
示例四:
--@(H3Grid, Geometry) SELECT COUNT(*) from h3grid_gist_test WHERE code @ 'SRID=4490;POLYGON((0 30,5 30,5 38,0 38,0 30))'::Geometry;
返回值:
------- 1