Returns true if every point in a 3D geographic grid falls inside a geometry, or false otherwise.
Syntax
bool ST_3DWithin(geometry geom3d, geomgrid gridcode);
bool ST_3DWithin(geomgrid gridcode, geometry geom3d);
bool ST_3DWithin(meshgeom geom3d, geomgrid gridcode);
bool ST_3DWithin(geomgrid gridcode, meshgeom geom3d);
bool ST_3DWithin(sfmesh geom3d, geomgrid gridcode);
bool ST_3DWithin(geomgrid gridcode, sfmesh geom3d);
bool ST_3DWithin(vomesh geom3d, geomgrid gridcode);
bool ST_3DWithin(geomgrid gridcode, vomesh geom3d);
bool ST_3DWithin(geomgrid gridcode1, geomgrid gridcode2);Parameters
| Parameter | Type | Description |
|---|---|---|
gridcode, gridcode1, gridcode2 | geomgrid | A geographic grid object |
geom3d | geometry, meshgeom, sfmesh, or vomesh | A 3D geometry. Choose the type that matches your data: geometry for standard PostGIS points and solids, meshgeom for indexed surface meshes, sfmesh for JSON-encoded surface meshes, and vomesh for volumetric meshes |
Description
ST_3DWithin checks whether the full spatial extent of a geographic grid falls inside a 3D geometry. The function returns true only when every point in the grid lies within the interior or boundary of the geometry.
The geometry must use the China Geodetic Coordinate System 2000 (CGC2000). Set the spatial reference system identifier (SRID) to 4490.Examples
Check whether a grid is within a point geometry
SELECT ST_3DWithin(
'srid=4490;POINT(116.31522216796875 39.910277777777778 1001.8)'::geometry,
ST_GridFromText('GZ00262064446046072072')
);Result:
st_3dwithin
-------------
tCheck whether a grid is within a meshgeom solid
SELECT ST_3DWithin(
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))))))')
);Result:
st_3dwithin
-------------
fCheck whether a grid is within an sfmesh
SELECT ST_3DWithin(
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]}]}'
)
);Result:
st_3dwithin
-------------
fCheck whether a grid is within a vomesh
SELECT ST_3DWithin(
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('GZ002')
);Result:
st_3dwithin
-------------
fCheck whether one grid is within another grid
SELECT ST_3DWithin(
ST_GridFromText('GZ0026206435'),
ST_GridFromText('GZ002620643')
);Result:
st_3dwithin
-------------
t