Returns true if the spatial range of a 3D geographic grid fully contains a geometry, or if one grid fully contains another grid. Returns false otherwise.
Syntax
bool ST_3DContains(geometry geom3d, geomgrid gridcode);
bool ST_3DContains(geomgrid gridcode, geometry geom3d);
bool ST_3DContains(meshgeom geom3d, geomgrid gridcode);
bool ST_3DContains(geomgrid gridcode, meshgeom geom3d);
bool ST_3DContains(sfmesh geom3d, geomgrid gridcode);
bool ST_3DContains(geomgrid gridcode, sfmesh geom3d);
bool ST_3DContains(vomesh geom3d, geomgrid gridcode);
bool ST_3DContains(geomgrid gridcode, vomesh geom3d);
bool ST_3DContains(geomgrid gridcode1, geomgrid gridcode2);Parameters
| Parameter | Description |
|---|---|
gridcode / gridcode1 / gridcode2 | The geographic grid object. |
geom3d | The 3D geometry. Supported types: geometry, meshgeom, sfmesh, vomesh. |
Description
ST_3DContains returns true when every point of the second argument lies within the spatial range of the first argument, and false when any point falls outside that range.
All geometry inputs must use the CGC2000 spatial reference system. The spatial reference system identifier (SRID) of the geometry must be 4490.
Examples
All examples use ST_GridFromText to construct a geomgrid from a grid code string.
Grid contains a point
The grid GZ00262064446046072072 fully contains the specified 3D point, so the function returns t.
SELECT ST_3DContains(
ST_GridFromText('GZ00262064446046072072'),
'srid=4490;POINT(116.31522216796875 39.910277777777778 1001.8)'::geometry
);
st_3dcontains
---------------
tGrid does not fully contain a meshgeom solid
The grid GZ0026 does not fully contain the meshgeom solid — part of the solid lies outside the grid boundary — so the function returns f.
SELECT ST_3DContains(
ST_GridFromText('GZ0026'),
st_meshgeomfromtext('srid=4490;SOLID=TRUE;MESHGEOM(PATCH(INDEXSURFACE Z (VERTEX(115.966 38.9757000000001 3000,
116 38.9757000000001 3000,116 38.9999999999999 3000,115.966 38.9999999999999 3000,116 38.9999999999999 0,
116 38.9757000000001 0,115.966 38.9757000000001 0,115.966 38.9999999999999 0),
INDEX((0,1,2),(2,3,0),(4,5,6),(6,7,4),(3,7,6),(6,0,3),(0,6,5),(5,1,0),(1,5,4),(4,2,1),(2,4,7),(7,3,2)))))'));
st_3dcontains
---------------
fsfmesh does not fully intersect with a grid (JSON format)
The sfmesh is not fully contained within the grid GZ00262064 — the mesh extends beyond the grid boundary — so the function returns f.
SELECT ST_3DContains(
ST_GridFromText('GZ00262064'),
st_meshfromtext(
'{"version" : 1, "srid" : 4490, "root" : 0,
"meshgeoms" : ["MESHGEOM(PATCH(POLYGON Z ((0 0 0,1 0 0,1 1 0,0 1 0,0 0 0))))"],
"primitives" : [{"meshgeom" : 0}],
"nodes" : [{"primitive" : 0,"matrix" : [0.012,0,0,116,0,0.009,0,39,0,0,1000,0,0,0,0,1]}]}'
)
);
st_3dcontains
---------------
fvomesh is not fully contained within a grid
The vomesh is not fully contained within the grid GZ00262064 — part of the volume lies outside the grid boundary — so the function returns f.
SELECT ST_3DContains(
ST_VOMeshFromText(
'SRID=4490;LOD=2;VOMESH(VERTEX(COORDS(116.012 39 0,116 39.009 0,115.988 39 0,116 38.991 0,116 39 1000)),
FACE(INDEX((0,1,2,3),(1,0,4),(2,1,4),(3,2,4),(0,3,4))),
CELL(INDEX((0,1,2,3,4)),DIRECTION((0,1,1,1,0))))'
),
ST_gridfromtext('GZ00262064')
);
st_3dcontains
---------------
fGrid contains a child grid
The grid GZ00262064 fully contains GZ002620643 because GZ002620643 is a subdivision (child cell) of GZ00262064, so the function returns t.
SELECT ST_3DContains(
ST_GridFromText('GZ00262064'),
ST_GridFromText('GZ002620643')
);
st_3dcontains
---------------
t