ST_Distance
Definición
ST_Distance devuelve la distancia entre dos geometrías. La distancia se mide desde el vértice más cercano de las dos geometrías.
Sintaxis
sde.st_distance (g1 sde.st_geometry, g2 sde.st_geometry)
Tipo de devolución
Precisión doble
Ejemplo
Un oficial de cumplimiento de códigos necesita encontrar si alguno de los edificios en una parcela en particular está dentro de 1 pie de la línea de lote. La columna de building_id de la tabla de edificios identifica exclusivamente cada edificio. La columna lot_id identifica la parcela en la que se encuentra el edificio. El polígono de los edificios almacena la geometría de cada huella del edificio. La tabla de parcelas almacena la APN, que identifica exclusivamente cada lote y es el mismo que la Id. de lote en la clase de entidad de edificios, y la parcela ST_Polygon que contiene la geometría de lote.
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) );
A continuación, el oficial de cumplimiento de códigos consulta las tablas de parcelas y de edificios para obtener una lista de todos los Id. de construcción en la parcela 400 y la distancia a la que se encuentra de la línea de lote. (Las unidades se definen en el sistema de proyección que está utilizando). Ya que hay tres edificios en esta parcela, tres registros se deben devolver.
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