Linear Referencing System in GIS and in Spatial Database

Linear Referencing System (선형 참조 체계, LRS) 는 선형 요소 (line element) 를 기반으로 하고, 그 선형 요소위에서 객체들을 정의 및 참조할 수 있는 시스템을 나타낸다. GIS에서 LRS를 사용할 수 있는 개념들로 도로위의 이정표나 표지판 등의 점 정보나, 도로 구간별 제한속도 등의 구간 정보 같은 것들이 있다. 교통 정보뿐 아니라 가스나 오일 파이프 또는 수도관 같은 요소들도 저장할 수 있다. LRS에서 이런 정보를 저장할 때, 기반 선형 요소 (base line element)를 바탕으로 정의하게 된다. 도로의 경우, 도로의 어떤 이정표의 위치나 특정 구간을 나타낼 때, 도로의 특정 지점으로부터 동쪽으로 5m 등의 방법을 통해 정의한다. 이 때, 이러한 위치 표현 방식은 두 가지가 존재한다.

Figure 1. LRS에서의 요소 표현

사진 자료에서는 2가지 방법으로 데이터를 표현하고 있다.

  • 좌표를  직접적으로 표현하는 방법:
    파란색으로 표시된 객체들은 직접 좌표를 통해 표현되고 있다. 사진에서는 (시작점으로 부터) 2 단위 만큼 떨어진 곳이라는 형태로 점을 표현하거나 (역시 시작점으로부터) 11단위 만큼 떨어진 곳부터 18단위 만큼 떨어진 곳 사이라는 형태로 선을 표현하고 있다.
  • 좌표를 상대 거리를 통해 표현하는 방법:
    빨간색 객체들은 특정 기준 점을 바탕으로 상대적으로 표현되고 있다. 사진에서는 특정 점 (여기서는 시작점) 으로 부터 6단위 떨어진 곳이라는 형태로 점을 표현하거나 13위에서 8단위 거리만큼이라는 형태로 선을 표현하고 있다.

기존 spatial data type으로 이런 정보를 표현할 수 없는것은 아니다. 그렇지만, LRS를 사용하면 다양한 장점이 있다. 가장 큰 장점으로는 기반으로 하는 선형 요소를 공유한다는 점이다. 만약 기반 선형 요소의 데이터에 변화가 가해질 경우 그 위에 정의된 여러 요소들은 따로 수정을 하지 않아도 맞춰서 변화가 가해진다고 볼 수 있다. 또는, LRS위의 객체들이 여러 속성을 지녀야 할 경우에도 유용하다. 한 선형 요소 위에 여러 속성들(attributes)이 있을 때, 기존의 spatial geometry types로 저장할 경우 여러객체로 나눠서 저장해야하지만, LRS에서는 쉽게 저장 가능하다. 예를 들어, 어떤 기반 요소인 도로에 대해서 속도, 포장정보(아스팔트 및 콘크리트 등),이정표 속성 등이 있을 경우, (서로 겹치지 않는) 작은 단위들로 나누어서 각 속성들을 저장할 필요가 없다.

LRS in Oracle Spatial

Spatial database인 Oracle Sptial에서도 LRS를 지원한다. LRS의 기반 선형 요소를 오라클에서는 geometric segment 라고 부른다. Geometric segment가 될 수 있는 것들은 직선, 곡선 그리고 폴리곤 등을 포함한다. 1개의 geometric segment는 시작점과 끝점이 정의되어 있어야 한다. (폴리곤의 경우 시작점과 끝점이 같다.) Geometric segment는 점의 sequence로 정의되어 있다. 이 sequence의 시작점과 끝점을 제외하고 나머지를 shape point라고 부른다. Shape point를 포함하여 모든 점들은 좌표정보와 measure라는 값을 가지고 있다. 이 measure는 위에서 서술한 상대적인 거리를 표현할 때 쓰이는 지표이다. 좌표공간상에서 두 점의 거리가 가깝다고 하여도, measure값의 조정을 통해 LRS상에서는 그 거리를 조절할 수 있다.

Geometric segment는 다음과 같은 요소 및 개념들이 있다.

  • direction
    Segment의 direction은 시작점으로부터 끝점까지의 순서를 통해 정의된다. 각 점의 measure값들은 direction에 따라 계속 증가하거나 계속 감소해야한다.
  • measure
    measure는 어떤 점이 시작점으로부터 얼마나 떨어져 있는지 나타내는 척도이다. 각 점에 정의된 measure들을 통해 계산할 수 있다. (linear interpolation)어떤 두 점의 measure 값이 각각 50, 80으로 정의되어있다면, 그 두 점의 정확히 중간에 있는 점의 measure 값은 65가 되는 식이다.
  • offset
    offset은 segment자체의 이동을 뜻한다. 양의 offset일 경우, direction의 왼쪽 방향으로 segment의 이동을 뜻하고, 음의 offset은 그 반대를 뜻한다.
  • projection
    어떤 점에 대해, segemnt위의 가장 가까운 점을 나타낸다.

 이러한 요소 및 개념들은 Oracle Spatial Concept 문서의 사진에서 시각적으로 확인할 수 있다.

Handling a geometric segment

Geometric segment는 SQL 또는 PL/SQL을 통해 객체를 생성할 수 있다. Geometric segment는 다른 spatial geometry type과 같이 SDO_GEOMETRY라는 object type에 저장된다. 2차원 좌표계에서의 geometric segment는 measure까지 합하여 한 점당 3차원의 정보를 저장한다. 따라서, SDO_GEOMETRY의 SDO_GTYPE값이 3302으로 설정된다. 이는 3차원이며, LRS의 (2차원) geometry이고, line 타입 (02) 을 나타낸다.

SDO_GEOMETRY(
  3302,  -- line string, 3 dimensions: X,Y,M
  NULL,
  NULL,
  SDO_ELEM_INFO_ARRAY(1,2,1), -- one line string, straight segments
  SDO_ORDINATE_ARRAY(
    2,2,0,   
    2,4,2,   
    8,4,8,   
    12,4,12, 
    12,10,NULL,
    8,10,22,
    5,14,27
  )
)

3번째 원소의 값이 각 점의 measure값이다. 비어있을 경우 (NULL) 자동으로 계산하여 채워주게 된다.  이렇게 생성한 geometric segment를 생성, 제어, 및 탐색 등을 지원하기 위해 Oracle Spatial에서는 PL/SQL Package (MDSYS.SDO_LRS) 를 제공한다. 공식 문서에서분류한 방법으로 PL/SQL Package 안의 subprogram을 하는 일으로 분류해보면 다음과 같다.

  • Geometric segment를 생성하고 수정
  • Geometric segment에 관한 정보 조회 및 검증
  • SDO_GEOMETRY와 LRS geometric segment 간의 변환

이 중 몇개의 subprogram을 골라 이 글에서 소개해 보려고 한다.

Geometric segment의 생성 및 수정

여기에 속한 subprogram들을 바탕으로 할 수 있는 일들은 다음과 같다.

  • Geometric segment의 clipping:
    2개의 measure 값을 입력으로 받아 해당하는 부분의 geometric segment를 반환한다.
  • Intersection:
    2개의 LRS geometric segment 또는 geometric segment와 SDO_GEOMETRY 사이에서 (topologically) 겹치는 SDO_GEOMETRY를 반환한다. geometric segment는 기본적으로 선의 집합일 것이므로, 반환되는 SDO_GEOMETRY는점, 선 또는 선집합(linestring or multiline)일 것이다.
  • Offset:
     위에서 서술한 offset를 반환한다. 두 개의 measure값을 받아서, 그 measure사이의 (sub) geometric segment에 대해서 offset한 geometric segment를 반환한다. 두 mesaure 값을 각각 시작점과 끝점으로 한다면 전체 segment에 대해 offset변환한 객체가 반환된다.
  • 기타 Split을 통해 2개로 나누던가, Reverse등을 통해 방향을 바꿀 수 있다.

조회 및 검증

여기에 속한 subprogram들을 사용하여 데이터들의 조회 및 검증이 가능하다.

  • LOCATE_PT:
    Geometric segment와 measure값을 입력으로 받아, 그 위치의 점을 SDO_GEOMETRY 형태로 반환한다.
  • 기타 valid 여부를 검증 하는 함수나 간단한 값을 조회하는 subprogram들이 존재한다.

변환

SDO_GEOMETRY의 객체를  LRS geometric segment로 변환하거나 그 역이 가능하다.

LRS in another spatial database

PostGIS

PostGIS에서도 LRS 에 관한 여러 함수를 지원한다. 예를 들어, ST_LineInterpolatePoint는 선 형태의 geometry 타입 (ST_geometry 또는 OGC geometry) 과 실수 값 (0과 1사이)을 받아, 선 형태의 geometry의 시작점에서 실수 값 만큼 떨어진 점을 반환한다. ST_LineSubstring 를 사용하면, 어떤 선 형태의 geometry 상에서 특정 부분을 잘라낼 수 있다. 즉, 인자로 들어가는 두 실수가 각각 1/3, 2/3 이라면, 3등분 한 선 중 가운데 부분의 geomtry를 반환한다. Oracle Spatial과 마찬가지로 기반 선형 요소(base line element)에 measure을 추가하여 임의의 거리관계를 정의할 수 있다. LRS에 관한 다른 함수들은 공식 문서에서 찾을 수 있다.

마치며

교통사고 정보 같은 선(도로)를 따라 일어나는 정보가 많이 입력으로 들어오고 선의 부분에 대한 여러 속성을저장해야 할 때 유용하게 사용할 수 있는 LRS에 대해 공부한 내용을 공유해 보았다.