ST_Distance
定義
ST_Distance は、2 つのジオメトリ間の距離を返します。距離は、2 つのジオメトリの最も近い頂点から測定されます。
構文
sde.st_distance (g1 sde.st_geometry, g2 sde.st_geometry)
戻り値のタイプ
Double precision
例
行政官は、特定の区画上にある建物が区画線の 1 フィート内にあるかどうかを調べる必要があります。buildings テーブルの building_id 列は、各建物を一意に識別します。lot_id 列は、建物のあるパーセルを識別します。buildings のポリゴンは、各建物のジオメトリを格納します。parcels テーブルは、各区画を一意に識別し、buildings フィーチャクラスの区画 ID と同じ値を APN に、区画ジオメトリを含む ST_Polygon を parcel に格納します。
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) );
次に、行政官は buildings テーブルと parcels テーブルにクエリを実行して、パーセル 400 上のすべての建物 ID と区画線からの距離のリストを取得します(単位は、使用している投影座標系で定義されます)。このパーセルには 3 つの建物があるため、3 レコードが返されます。
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