ST_Distance 함수

ST_Distance 함수는 입력 매개변수로 두 개의 형상과 선택적으로 단위를 사용하고 첫 번째 형상의 한 점과 두 번째 형상의 한 점 간 최단 거리(기본 단위 또는 제공된 단위로 측정됨)를 리턴합니다.

두 형상 중 어느 하나가 널(NULL)이거나 비어 있는 경우 널(NULL)이 리턴됩니다.

두 번째 Geometry가 첫 번째 Geometry와 동일한 공간 참조 시스템에표시되지 않고 동일한 기반 데이터를 사용하는 경우 이는 다른 공간 참조 시스템으로 변환됩니다.

수치 단위를 제공할 때 이 함수를 메소드로 호출할 수도 있습니다.

구문

Read syntax diagramSkip visual syntax diagramdb2gse.ST_Distance(geometry1,geometry2 ,unit ,intersectsTest )

매개변수

geometry1
geometry2에 대한 거리를 계산하는 데 사용되는 형상을 나타내는 ST_Geometry 유형의 값입니다.
geometry2
geometry1과의 거리를 계산하는 데 사용되는 형상을 나타내는 ST_Geometry 유형의 값입니다.
unit
결과 도량 단위를 식별하는 VARCHAR(128) 값입니다. 지원되는도량 단위는 DB2GSE.ST_UNITS_OF_MEASURE 카탈로그 뷰에 나열되어 있습니다.
intersectsTest
geometry1geometry2의 거리를 계산하는 대신에 교차하는지 여부를 확인하려면 이 플래그를 1로 설정하십시오. intersectsTest가 지정된 경우 이 함수는 형상이 교차하면 1을 리턴하고 교차하지 않으면 0을 리턴합니다.
unit 매개변수를 생략하면 결과에 사용되는 도량 단위를 판별하기 위해 다음과 같은 규칙이 사용됩니다.
  • geometry1이 투영 또는 지구 중심 좌표 시스템에있는 경우, 이 좌표 시스템과 연관된 선형 단위가 기본값입니다.
  • geometry1이 지리 좌표 시스템에 있는 경우, 이 좌표 시스템과 연관된 각도 단위가 기본값입니다.
단위 변환에 대한 제한사항: 다음과 같은조건이 발생하는 경우 오류(SQLSTATE 38SU4)가 리턴됩니다.
  • Geometry가 지정되지 않은 좌표 시스템에 있고 unit 매개변수가 지정됩니다.
  • Geometry가 투영 좌표 시스템에 있고 각도 단위가 지정됩니다.

리턴 유형

DOUBLE

예:

Example 1
다음 SQL문은 SAMPLE_GEOMETRIES1 및 SAMPLE_GEOMETRIES2 테이블을 작성하고 채웁니다.

SET CURRENT FUNCTION PATH = CURRENT FUNCTION PATH, db2gse 

CREATE TABLE sample_geometries1(id SMALLINT, spatial_type varchar(13),
   geometry ST_GEOMETRY)

CREATE TABLE sample_geometries2(id SMALLINT, spatial_type varchar(13),
   geometry ST_GEOMETRY)

INSERT INTO sample_geometries1(id, spatial_type, geometry)
VALUES
  ( 1, 'ST_Point', ST_Point('point(100 100)', 1)),
  (10, 'ST_LineString', ST_LineString('linestring(125 125, 125 175)', 1)),
  (20, 'ST_Polygon', ST_Polygon('polygon
                       ((50 50, 50 150, 150 150, 150 50, 50 50))', 1))

INSERT INTO sample_geometries2(id, spatial_type, geometry)
VALUES
  (101, 'ST_Point', ST_Point('point(200 200)', 1)),
  (102, 'ST_Point', ST_Point('point(200 300)', 1)),
  (103, 'ST_Point', ST_Point('point(200 0)', 1)),
  (110, 'ST_LineString', ST_LineString('linestring(200 100, 200 200)', 1)),
  (120, 'ST_Polygon', ST_Polygon('polygon
                       ((200 0, 200 200, 300 200, 300 0, 200 0))', 1))

Example 2
다음 SELECT문은 SAMPLE_GEOMTRIES1 및 SAMPLE_GEOMTRIES2 테이블의 여러 형상 간 거리를 계산합니다.

SELECT   sg1.id AS sg1_id, sg1.spatial_type AS sg1_type,
         sg2.id AS sg1_id, sg2.spatial_type AS sg2_type,
         cast(ST_Distance(sg1.geometry, sg2.geometry) 
         AS Decimal(8, 4)) AS distance
FROM     sample_geometries1 sg1, sample_geometries2 sg2
ORDER BY sg1.id


결과:

SG1_ID SG1_TYPE      SG1_ID SG2_TYPE      DISTANCE
------ ------------- ------ ------------- ----------
     1 ST_Point         101 ST_Point        141.4213
     1 ST_Point         102 ST_Point        223.6067
     1 ST_Point         103 ST_Point        141.4213
     1 ST_Point         110 ST_LineString   100.0000
     1 ST_Point         120 ST_Polygon      100.0000
    10 ST_LineString    101 ST_Point         79.0569
    10 ST_LineString    102 ST_Point        145.7737
    10 ST_LineString    103 ST_Point        145.7737
    10 ST_LineString    110 ST_LineString    75.0000
    10 ST_LineString    120 ST_Polygon       75.0000
    20 ST_Polygon       101 ST_Point         70.7106
    20 ST_Polygon       102 ST_Point        158.1138
    20 ST_Polygon       103 ST_Point         70.7106
    20 ST_Polygon       110 ST_LineString    50.0000
    20 ST_Polygon       120 ST_Polygon       50.0000
   

Example 3
다음 SELECT문은 서로 간 거리가 100 이하인 모든 형상을 찾는 방법을 보여줍니다.

SELECT   sg1.id AS sg1_id, sg1.spatial_type AS sg1_type,
         sg2.id AS sg1_id, sg2.spatial_type AS sg2_type,
         cast(ST_Distance(sg1.geometry, sg2.geometry) 
         AS Decimal(8, 4)) AS distance
FROM     sample_geometries1 sg1, sample_geometries2 sg2
WHERE    ST_Distance(sg1.geometry, sg2.geometry)  <= 100

결과:

SG1_ID SG1_TYPE      SG1_ID SG2_TYPE      DISTANCE
------ ------------- ------ ------------- ----------
     1 ST_Point         110 ST_LineString   100.0000
     1 ST_Point         120 ST_Polygon      100.0000
    10 ST_LineString    101 ST_Point         79.0569
    10 ST_LineString    110 ST_LineString    75.0000
    10 ST_LineString    120 ST_Polygon       75.0000
    20 ST_Polygon       101 ST_Point         70.7106
    20 ST_Polygon       103 ST_Point         70.7106
    20 ST_Polygon       110 ST_LineString    50.0000
    20 ST_Polygon       120 ST_Polygon       50.0000
 
Example 4
다음 SELECT문은 여러 형상 간 거리를 킬로미터 단위로 계산합니다.

SAMPLE_GEOMTRIES1 and SAMPLE_GEOMTRIES2 tables.
SELECT   sg1.id AS sg1_id, sg1.spatial_type AS sg1_type,
         sg2.id AS sg1_id, sg2.spatial_type AS sg2_type,
         cast(ST_Distance(sg1.geometry, sg2.geometry, 'KILOMETER')
         AS DECIMAL(10, 4)) AS distance
FROM     sample_geometries1 sg1, sample_geometries2 sg2
ORDER BY sg1.id

결과:

SG1_ID SG1_TYPE      SG1_ID SG2_TYPE      DISTANCE
------ ------------- ------ ------------- ------------
     1 ST_Point         101 ST_Point        12373.2168
     1 ST_Point         102 ST_Point        16311.3816
     1 ST_Point         103 ST_Point         9809.4713
     1 ST_Point         110 ST_LineString    1707.4463
     1 ST_Point         120 ST_Polygon      12373.2168
    10 ST_LineString    101 ST_Point         8648.2333
    10 ST_LineString    102 ST_Point        11317.3934
    10 ST_LineString    103 ST_Point        10959.7313
    10 ST_LineString    110 ST_LineString    3753.5862
    10 ST_LineString    120 ST_Polygon      10891.1254
    20 ST_Polygon       101 ST_Point         7700.5333
    20 ST_Polygon       102 ST_Point        15039.8109
    20 ST_Polygon       103 ST_Point         7284.8552
    20 ST_Polygon       110 ST_LineString    6001.8407
    20 ST_Polygon       120 ST_Polygon      14515.8872