ST_Difference

Définition

La fonction ST_Difference accepte deux objets ST_Geometry et renvoie un objet ST_Geometry qui représente la différence des objets source.

Syntaxe

sde.st_difference (g1 sde.st_geometry, g2 sde.st_geometry)

Type de retour

ST_Geometry

Exemple

L'ingénieur municipal veut connaître la surface totale de terrain à bâtir de la municipalité non couverte par des bâtiments. En fait, elle veut calculer la somme de la surface de terrain après soustraction de la surface des bâtiments.

CREATE TABLE footprints (building_id integer,
footprint sde.st_geometry);

CREATE TABLE lots (lot_id integer,
lot sde.st_geometry);

INSERT INTO footprints (building_id, footprint) VALUES (
1, 
sde.st_polygon ('polygon ((0 0, 0 10, 10 10, 10 0, 0 0))', 0)
);

INSERT INTO footprints (building_id, footprint) VALUES (
2,
sde.st_polygon ('polygon ((20 0, 20 10, 30 10, 30 0, 20 0))', 0)
);

INSERT INTO footprints (building_id, footprint) VALUES (
3,
sde.st_polygon ('polygon ((40 0, 40 10, 50 10, 50 0, 40 0))', 0)
);

INSERT INTO lots (lot_id, lot) VALUES (
1,
sde.st_polygon ('polygon ((-1 -1, -1 11, 11 11, 11 -1, -1 -1))', 0)
);

INSERT INTO lots (lot_id, lot) VALUES (
2,
sde.st_polygon ('polygon ((19 -1, 19 11, 29 9, 31 -1, 19 -1))', 0)
);

INSERT INTO lots (lot_id, lot) VALUES (
3,
sde.st_polygon ('polygon ((39 -1, 39 11, 51 11, 51 -1, 39 -1))', 0)
);

L'ingénieur municipal joint de façon égale la table des emprises et des terrains sur l'identifiant lot_id et calcule la somme des surfaces correspondant aux terrains moins les emprises.

Oracle

SELECT SUM (sde.st_area (sde.st_difference (lot, footprint)))
FROM FOOTPRINTS bf, LOTS
WHERE bf.building_id = lots.lot_id;

SUM(ST_AREA(ST_DIFFERENCE(LOT,FOOTPRINT)))

114

PostgreSQL

SELECT SUM (sde.st_area (sde.st_difference (lot, footprint)))
FROM footprints bf, lots
WHERE bf.building_id = lots.lot_id;

sum

114

7/10/2012