CG_3DIntersection — Réaliser une intersection 3D
geometry CG_3DIntersection(geometry geom1, geometry geom2);
Renvoie une géométrie qui est la partie partagée entre geom1 et geom2.
Disponibilité : 3.5.0
Cette méthode nécessite le backend SFCGAL.
Cette méthode implémente la spécification SQL/MM. SQL-MM IEC 13249-3: 5.1
Cette fonction prend en charge la 3D et ne supprime pas l'indice z.
Cette fonction prend en charge les surfaces Polyhedral.
Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).
3D linestrings and polygons can intersect in a 3D segment.
WITH data AS (
SELECT 'LINESTRING Z (2 2 6,1.5 1.5 7,1 1 8,0.5 0.5 8,0 0 10)'::geometry AS input_linestring,
'POLYGON Z ((0 0 8,0 1 8,1 1 8,1 0 8,0 0 8))'::geometry AS input_polygon
)
SELECT input_linestring AS input_linestring,
input_polygon AS input_polygon,
CG_3DIntersection(input_linestring, input_polygon) AS intersection
FROM data;
LINESTRING Z (2 2 6,1.5 1.5 7,1 1 8,0.5 0.5 8,0 0 10) | POLYGON Z ((0 0 8,0 1 8,1 1 8,1 0 8,0 0 8)) | LINESTRING Z (1 1 8,0.5 0.5 8)
Intersect a cube shell with a vertical polygon.
WITH data AS (
SELECT 'POLYHEDRALSURFACE Z(
((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))
)'::geometry AS input_cube,
'POLYGON Z ((0 0 0,0 0 0.5,0 0.5 0.5,0 0.5 0,0 0 0))'::geometry AS input_polygon
)
SELECT input_cube AS input_cube,
input_polygon AS input_polygon,
CG_3DIntersection(input_cube, input_polygon) AS intersection
FROM data;
POLYHEDRALSURFACE Z (((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))) | POLYGON Z ((0 0 0,0 0 0.5,0 0.5 0.5,0 0.5 0,0 0 0)) | TIN Z (((0 0 0,0 0 0.5,0 0.5 0.5,0 0 0)),((0 0.5 0,0 0 0,0 0.5 0.5,0 0.5 0)))
A smaller solid contained by a larger solid remains volumetric after intersection.
WITH data AS (
SELECT CG_MakeSolid('POLYHEDRALSURFACE Z (
((0 0 0,0 4 0,4 0 0,0 0 0)),
((0 0 0,4 0 0,0 0 4,0 0 0)),
((0 0 0,0 0 4,0 4 0,0 0 0)),
((4 0 0,0 4 0,0 0 4,4 0 0))
)'::geometry) AS outer_solid
), solids AS (
SELECT outer_solid,
ST_Scale(outer_solid, 0.5, 0.5, 0.5) AS inner_solid
FROM data
)
SELECT outer_solid AS input_outer,
inner_solid AS input_inner,
CG_3DIntersection(outer_solid, inner_solid) AS intersection
FROM solids;
POLYHEDRALSURFACE Z (((0 0 0,0 4 0,4 0 0,0 0 0)),((0 0 0,4 0 0,0 0 4,0 0 0)),((0 0 0,0 0 4,0 4 0,0 0 0)),((4 0 0,0 4 0,0 0 4,4 0 0))) | POLYHEDRALSURFACE Z (((0 0 0,0 2 0,2 0 0,0 0 0)),((0 0 0,2 0 0,0 0 2,0 0 0)),((0 0 0,0 0 2,0 2 0,0 0 0)),((2 0 0,0 2 0,0 0 2,2 0 0))) | POLYHEDRALSURFACE Z (((0 0 0,0 2 0,2 0 0,0 0 0)),((0 0 0,0 0 2,0 2 0,0 0 0)),((2 0 0,0 0 2,0 0 0,2 0 0)),((2 0 0,0 2 0,0 0 2,2 0 0)))