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