업무를 위해 지도에 대한 정보를 알 필요가 있었다. 이전에 자전거 정류소 제안 관련 프로젝트를 진행하면서, 처음으로 공간정보에 대해 배웠었는데, 그나마 익숙한 단어가 나와서 다행인 듯 하다. 이번 포스팅에서는 지도가 어떤 의미를 갖는지, 그리고 그 지도라는 것을 만들기 위해 필요한 각종 용어들에 대해 훑어보는 시간을 가지려 한다.

지도란?

  • 물리적 실체 -> 데이터
  • 지도는 나라의 재산
  • GIS(Geographic Infomation System)
    • 공간 데이터 + 속성 데이터 통합 관리 시스템

측지

  • 지구 타원체
    • 지구의 단면은 타원
    • 장반경 a, 단반경 b라 했을 떄, aba=f{{a-b}\over a} = f f를 편평률이라 한다.
      • a, b가 많이 차이나면 값이 크다 == 많이 찌그러져 있다.
    • 그리고 이렇게 타원체로 만든 것을 지구 타원체라 한다.
    • 타원체를 가정하는 여러 것들이 있다.
      • Bessel
      • GRS80
      • WGS84
  • 고도 측정
    • 기준이 필요
      • 지구를 원으로? 혹은 타원으로 가정할 것인가?
      • 실제 지구는 울퉁불퉁한데 어디를 기준으로 할 것인가?
    • 그래서 해발고도, 표고 이런말이 있는 것.
      • 해발고도
        • 바다가 없음에도 가상의 해수면선을 육지 안에 그은 상태로 측정
        • 이러한 상황에서 특정 위치의 고도를 측정하고자 한다면, 이 해수면성에 수선을 내린 거리를 해발고도라 한다.
        • 왜 그런데 굳이 가상의 해수면을 그려서 판단하나?
          • Geoid
            • 지구의 표면은 해발고도 0미터이다.
            • 즉, 이는 지구 표면을 이야기 한다. (0미터이면 정확히 표면을 의미)
            • 물을 지구에 퍼트렸다고 생각해도 좋다.
            • 그러면 물이 중력에 따라 특정 모양(타원에 가까울 것)을 가지고 분포해있을 것이다.
            • 이 상황에서 이 표면의 특정점을 찍고 접선을 그으면 중력 방향에 수직이 될 것
            • 이러한 가상의 표면(해수면)을 지오이드라 하고, 이를 기준으로 해발고도를 측정한다.
            • 어떠한 기준을 만든 것이라 생각하면 될 듯.
            • EGM96이 Geoid의 표준
            • Geoid는 실제 지구의 표면을 대상으로 만든 것이기 때문에 완전한 타원이 아니다.
            • 오히려 찌그러진 감자에 가깝다.
            • 그런데 우리는 타원체를 가정하고 지도를 만들기 때문에, 우리가 계산한 값과 실제 지오이드를 통해 계산된 고도는 달라질 가능성이 높다.
            • 이러한 문제를 해결하기 위해, 타원체를 이동해서 값을 가져온다. 대신 그 반대편 위치에 있는 국가의 경우 정확도가 많이 달라진다.
  • 측지계 (Datum)
    • 지구상의 위치를 경/위도로 표현하기 위한 기준이 되는 좌표계 + 지구 형상을 규정한 타원체를 총칭
    • 이 때 기준점을 정확하게 측정하여 상수로 정의
    • 기준점이 다르면 같은 타원체를 사용해도 다른 값이 나오게 됨

좌표와 좌표계

  • 좌표계
    • 한점에 대해 유일한 좌표를 부여하기 위한 체계
    • 직교좌표계 (x, y, z)
    • 구면좌표계 (r θ\theta, ϕ\phi)
    • 지리좌표계 (λ\lambda, ϕ\phi)
      • 지표면에만 있다고 가정하고 위, 경도로만 표현하는 것
    • 지심좌표계 (x, y, z)
      • 지표면 안으로 들어간다고 가정했을 때 필요

투영

  • 3D를 어떻게 2D로 만들까?
  • 지구 중심에 광원이 있다고 가정, 그림자를 투영
    • 투영면의 종류에 따라
      • 원통
      • 원추(뿔)
      • 방위(천장 원만 사용)
    • 광원의 위치에 따라
      • 심사(정중앙)
      • 평사(표면)
      • 정사(무한이 먼 광원, 평행)
    • 예시
      • 메르카토르 도법
        • 원통, 심사
        • 정형법: 각도를 유지
          • 모든 면이 같은 면적과 같이 보이기 때문에, 지도에서의 각과, 실제 배를 돌리때의 기수각이 같다는 점에서 이러한 단어가 붙음
          • 지도의 위쪽으로 갈수록 실제 면적이 길게 표현됨
        • 특성상 북극, 남극의 경우 투사가 되지 않아 표현자체가 어렵다는 단점이 존재
      • 골피터스 도법
        • 면적이 유지
        • 즉, 실제 메르카토르 도법으로 왜곡되는 지면적을 반영한 지도
      • 정거 도법
        • 거리를 유지
        • 적도를 기준으로 거리가 항상 일정
      • 방위 도법
        • 방위가 유지
        • 북쪽 끝에서 방향을 가지고 나아갔을 때, 그 방향이 유지
      • 절충 도법
        • 다 적당히 맞는다.
        • 근데 하나라도 맞는 건 없다.
  • 투영 좌표계
    • 메르카토르 도법 기준
      • 원통과 지구가 맞닿는 곳: 적도(횡축 longitudinal)
        • 원점: 아프리카 앞바다 위치
          • Web Mercator
            • WGS84(타원) 좌표계를 사용하지만 투영시 지구를 구형으로 가정하는 좌표계
            • 왜곡이 커지나 연산이 간단
      • 원통과 지구가 맞닿는 축: 경도(종축 transverse)
        • 경선을 X축, 위선을 Y축으로 삼는 원통 투영
        • 이게 유용할 수 있는데, 보통 세로가 긴 국가의 경우(우리)가 그렇다.
        • 세로선을 기준으로 투영하기 때문에, 좌우(적도 방향)으로 많이 멀어지지 않는다면 상대적으로 정확한 지도가 될 수 있다.
        • 한국측지계 2002
          • 실제로 해당 방식이 대한민국 표준으로, 한반도 인근 영역을 경도 2도 단위로 나누어 메르카토르 투영을 한 방식이다.
          • 나누어서 처리하기 때문에, 원점이 여럿정의되고, 좌표가 불연속된다는 문제가 있음
        • TM 128(Katech)
          • 단일 원점을 사용하는 TM 좌표계
        • UTM (Universal TM) 투영
          • 이런 방식을 전세계에 적용해서 6도 기준으로 36존으로 분리하여 좌표계를 만드는 방법이 있다.
          • 이 때, 각각의 존을 투영할 때, 메르카토르 도법 기준이기 때문에 원기둥을 투영면으로 사용하는데, 특이하게 원기둥이 한쪽면에는 접하나, 원쪽 부분이 안으로 들어가있는 형태를 취한다.
            • 구에 원기둥을 접하는 형태로 만들 때, 필연적으로 접하지 않는 부분은 투영하면서 왜곡이 생길 수 밖에 없는데, 이는 접한 면으로부터 거리가 멀어질 수록 그 정도가 심하다.
            • 그래서 아예 원기둥을 구에 완전히 접하는 형태가 아닌, 윗면, 아랫면을 안으로 넣어 이러한 왜곡을 줄이고자 한 것
        • UTM-K 좌표계
          • 그래서 UTM 방식을 사용하려고 해서 보니, 우리나라가 애매하게 걸쳐있음
          • 그래서 임의로 밀고, false easting, false northing과 같이 선형변환을 해버리고 사용
          • 127.5도 N, 38도 E 원점을 사용하는 UTM 좌표계
          • 그래서 우리나라를 커버하면서 오차가 없는 좌표계

좌표계

  • EPSG
    • 무지하게 많은 좌표계들을 한번에 알아볼 수 있는 코드
  • 좌표계 변환 방식
    • 측지계가 같으면 쉽게 변환이 가능
      • 즉 준거타원체와 기준점이 같으면
    • 하지만 측지계가 다르면 복잡한 로직이 필요
      • 즉, 준거타원체도 다르고, 기준점도 다르면
    • 3-Parameter Tarnslation
      • 원점 시프트 (dx, dy, dz)
    • 7-Parameter Transformation (Helmert)
      • 원점 시프트 (dx, dy, dz)
      • 축척(원기둥 투영면 설정시, 윗면 아랫면이 구로 들어가는 정도를 나타내는 변수) 변경 (μ\mu)
      • 회전 (rx, ry, rz)
    • 10-Parameter Transformation (Molodensky-Badekas)
        • 원점 시프트 (dx, dy, dz)
      • 축척 변경 (μ\mu)
      • 회전 (rx, ry, rz)
      • 회전 지점 (px, py, pz)

공간 데이터

  • OGC Simple Feature Access
    • Point
      • 하나의 좌표를 갖는 geometry
    • LineString(Polyline)
      • 두 개 이상의 좌표를 갖는 geometry
      • Line
        • 두개의 좌표인 경우
      • LinearRing
        • 첫 점과 끝점이 같은 경우
      • 분류
        • Simple
        • Non-Simple
          • 선이 교차하는 경우
        • Simple, closed
          • 교차하지 않는 다각형모양을 가진 선
          • LinearRing
        • Non-Simple, closed
          • Not a LinaerRing
    • Polygon
      • hole을 가질 수 있다.
      • 즉, Exterior Ring (n = 1)과 Interior Rings (n >= 0) 일 수 있다.
      • 방향
        • Exterior Ring
          • Counter-clockwise
        • Interior Ring
          • Clockwise
        • 적어도 안쪽 링과 바깥쪽의 방향이 반대여야 함. 그렇지 않으면 유효하지 않음
    • Multi Point
    • Multi LineString
    • Multi Polygon
    • GeometryCollection
    • Box / Bounds
      • 점 2개로 정의
      • 우상단, 좌하단의 점
      • min, max
      • left-bottom, right-top
      • south-west, right-top
  • Feature
    • Geometry 정보 + 속성 정보 (type, name, roadType, lane)
    • 형상과 속성을 갖춘 기본 데이터

공간 연산

  • 관계 연산 (True or False)
    • Equals
      • 두 개가 완전히 동치인 경우
    • Disjoint
      • 두 개가 하나도 겹치지 않는, 즉 서로소인 경우
    • Intersects
      • 교집합
      • 뚫고 지나가는 경우, 겹치는 경우
    • Touches
      • 테두리에 걸리는 경우
    • Crosses
      • 교차할 때
      • 그런데, 비교하고자 하는 두개의 gemoetry가 서로 차원이 다르거나 (점, 선, 면) 혹은 선이어야만 연산이 성립
      • 점 & 선, 선 & 면, 선 & 선만 정의가 가능
    • Within / Contains
      • 완전히 포함될 떄 성립
    • Overlaps
      • 같은 차원끼리 비교 가능
  • 결과 연산 (결과가 Geometry)
    • Intersection
      • 교집합
    • Difference
      • 차집합
    • SymDifference
      • 도넛
    • Union
      • 합집합
    • Buffer
      • 특정 Geometry에서 x만큼 떨어진 geometry를 줌
      • 당연히 음수도 가능
    • ConvexHull
      • 특정 Polygon을 감쌀 수 있는 최소 면적 다각형
    • Envelope
      • 특정 Polygon을 감쌀 수 있는 최소 Box
      • a.k.a
        • Minumun Bounding Rectangle
        • Bounding Box
        • Bounds
        • Envelope
        • BOX
  • DE-9IM
    • Dimensionally Extended 9-Intersection Model
    • 두 지오메트리같의 공간관계를 interesection을 통해 구하는 위상 모델
    • 예시
      • 두개의 Polygon이 있을 때, 연산을 다음과 같이 정의한다.
      • E (Exterior)
        • 해당 Polygon의 바깥쪽 면
      • I (Interior)
        • 해당 Polygon의 안쪽 면
      • B (Border)
        • 경계 LineString
      • dim (dimension)
        • 특정 geometry의 차원 (점: 0, 선: 1, 면: 2)
      • A, B Polygon에 대해서 각 3개의 연산 속성 (E, I, B)를 가질 수 있고 이를 모두 dim 연산을 한다면 3x3 행렬이 도출된다.
      • 이 행렬 관계의 모양을 기반으로 관계 연산의 결과를 알 수 있다.
    • 한번에 2개 이상의 관계를 알아봐야 한다면 연산량 측면에서 해당 모델이 더 좋을 수 있다.

공간 인덱스

  • 점, 선, 면
    • Box로 만든 뒤에 저장
  • 저장은 어떻게?
    • Grid
      • 전체 공간을 Tessellation하여 셀로 나누고, 데이터를 셀에 넣는 방식
        • Tessellation
          • 일정한 형태의 도형들로 평면을 빈틈없이 채우는 것을 말함
          • a.k.a
            • 쪽매맞춤
            • 쪽매붙임
      • 공간을 다 특정도형으로 쪼개고, 또 그 안에서 쪼개는 방식으로 저장하는 것
      • 무조건적으로 다 분할해야 함
    • QuadTree
      • 전체 공간을 재귀적으로 가로/세로 2등분하여 4개의 자식 노드를 가진 트리 구조를 사용하는 공간 인덱스
      • 4개의 노드를 가지도록 분할하여 저장
      • 특정 geometry가 해당 분할 공간에 하나만 있다면, Grid와 달리 세부 분할하여 저장되지 않고 해당 노드에 저장되어 깊이가 더 깊이 안들어감
      • OcTree(3차원)
    • KD-Tree
      • 데이터가 점인 경우 사용할 수 있는 자료구조
      • 각 레벨 마다 하나의 차원을 정렬하는 트리형태의 공간 인덱스
      • Binary Tree인데, 각 Level에 따라서,
        • 짝수 Level: X좌표를 가지고 왼쪽 오른쪽 분할
        • 홀수 Level: Y좌표를 가지고 왼쪽 오른쪽 분할
      • 결국 공간을 항상 2분할 하는 그림이 됨
    • R(Rectangle)-Tree
      • B-tree에 기반한 공간 인덱스
      • 밸런싱, 페이징 같은 B-tree 특성 유지
      • 데이터 베이스에서 주로 사용
  • 탐색 알고리즘
    • 가장 가까운 Geometry를 찾아라.
    • 지금 박스로 추상화했는데, 박스의 중심과 거리를 재는 것이 맞을까?
    • 원하는 결과와 다른 결과가 나올 수 있다.
    • 그래서 k라는 변수를 하나 추가하여 문제를 해결한다.
    • k는 자료구조에서 탐색을 진행할 때, 가장 가까운 녀석으로부터 boundary를 말한다.
    • 만약 3이면 min, next, next까지 총 3개를 보는 것
    • 적당한 k를 찾는 것은 huristic
    • 즉 KNN을 수행후 실제 거리를 구하는 것.

추가 참고자료

출처

profile
Goal, Plan, Execute.

0개의 댓글