ST_Distance

Definition

ST_Distance gibt die Entfernung zwischen zwei Geometrien zurück. Die Entfernung wird von den nächsten Stützpunkten der beiden Geometrien gemessen.

Syntax

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

Rückgabetyp

Doppelte Genauigkeit

Beispiel

Ein Mitarbeiter der Bauaufsichtsbehörde muss herausfinden, ob Gebäude auf einem bestimmten Grundstück weniger als 1 Fuß von der Grundstücksgrenze entfernt sind. Die Spalte "building_id " der Tabelle "buildings" identifiziert jedes Gebäude eindeutig. Die Spalte "lot_id" identifiziert das Flurstück (parcel), auf dem sich das Gebäude befindet. Das Polygon "buildings " enthält die Geometrie der Grundflächen der einzelnen Gebäude. Die Tabelle "parcels" enthält die APN, die jedes Grundstück eindeutig identifiziert und mit dem Wert des Feldes "lot_ID" der Feature-Class "buildings" identisch ist, sowie das Flurstück (parcel) vom Typ ST_Polygon mit der Grundstücksgeometrie.

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

CREATE TABLE parcels (apn integer unique, parcel sde.st_geometry);

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

INSERT INTO buildings (building_id, lot_id, footprint) VALUES (
2,
400,
sde.st_polygon ('polygon ((12 3, 12 6, 15 6, 15 3, 12 3))', 0)
); 

INSERT INTO buildings (building_id, lot_id, footprint) VALUES (
3,
400,
sde.st_polygon ('polygon ((20 0, 20 10, 30 10, 30 0, 20 0))', 0)
);

INSERT INTO buildings (building_id, lot_id, footprint) VALUES (
4,
402,
sde.st_polygon ('polygon ((40 0, 40 10, 50 10, 50 0, 40 0))', 0)
);

INSERT INTO parcels (apn, parcel) VALUES (
400,
sde.st_polygon ('polygon ((-1 -1, -1 11, 11 11, 19 11, 31 11, 31 -1, 19 -1, 11 -1, -1 -1))', 0)
);

INSERT INTO parcels (apn, parcel) VALUES (
402,
sde.st_polygon ('polygon ((39 -1, 39 11, 51 11, 51 -1, 39 -1))', 0)
);

Als Nächstes fragt der Mitarbeiter der Bauaufsichtsbehörde die Tabellen "buildings" und "parcels" ab, um eine Liste aller Gebäude-IDs auf Flurstück 400 und deren Abstand von der Grenzlinie zu erhalten. (Die Einheiten werden in dem von Ihnen verwendeten Projektionssystem definiert.) Da sich auf diesem Flurstück drei Gebäude befinden, sollten drei Datensätze zurückgegeben werden.

Oracle

SELECT UNIQUE p.apn, b.building_id, sde.st_distance(b.footprint, sde.st_boundary(p.parcel)) DISTANCE
FROM BUILDINGS b, PARCELS p
WHERE b.lot_id = p.apn
AND p.apn = 400
ORDER BY DISTANCE;

APN		BUILDING_ID      DISTANCE

400		           1					1
400   			  3					1
400    			  3					4

PostgreSQL

SELECT DISTINCT p.apn, b.building_id, sde.st_distance(b.footprint, sde.st_boundary(p.parcel)) AS Distance
FROM buildings b, parcels p
WHERE b.lot_id = p.apn
AND p.apn = 400
ORDER BY Distance;

apn	     building_id		distance

400            1				1
400            3				1
400     	   2				4

3/6/2012