2. 공간 데이터 모델#
모든 지리공간 벡터 데이터는 기본적인 기하학적 객체의 집합으로 설명할 수 있습니다. 예를 들어 점, 선 및 다각형은 공간 데이터의 기본 구성 요소입니다.
Python에서 이러한 공간 객체를 활용해 다양한 기하학적 작업을 수행하기 위해 사용되는 표준 라이브러리로 shapely가 있습니다. 지리정보 데이터셋(레이어; layers)을 처리하는 geopandas(Ⅱ. GeoPandas로 공간 데이터 관리 참조)와 같은 라이브러리를 제대로 사용하기 위해서도 shapely 라이브러리가 어떻게 작동하는지에 대한 기본적인 이해가 가장 중요합니다.
Shapely는 다른 지리공간 소프트웨어와 마찬가지로 Open Geospatial Consortium의 Simple Feature Access 표준에 제시된 공간 데이터 모델을 따릅니다. 이 단원에서 사용되는 용어들도 shapely에서 사용될뿐만 아니라, 일반적인 개념이므로 훨씬 더 광범위하게 사용할 수도 있습니다.
2.1. 좌표 튜플(Coordinate Tuples)로 구성되는 기하학적 객체#
기본적인 기하학적 객체를 구성하는 가장 작은 구성 단위는 좌표 튜플(coordinate tuples) 입니다. 즉, 좌표 튜플은 점, 선 및 다각형을 정의하는 데 사용됩니다. 이러한 좌표 튜플은 일반적으로 2차원 (x, y)
또는 3차원 (x, y, z)
으로 정의됩니다.
튜플 (Tuples)
튜플(Tuple)은 쉼표(,
)로 구분된 여러 값 또는 단일 값으로 구성된 Python의 기본적인 데이터 구조입니다. 위 좌표 튜플(coordinate tuples)은 튜플로 표시됩니다. 예를 들어, (60.192059, 24.945831)
은 두 개의 값을 가진 튜플이고, (1,)
은 하나의 값을 가진 튜플입니다. 그리고 함수 tuple([1, 2, 3])
은 리스트(list
)인 [1, 2, 3]
을 튜플(tuple
) (1, 2, 3)
으로 변환(캐스트; casts)하는 역할을 합니다.
튜플은 Python의 시퀀스(sequence) 데이터 유형에 속합니다. 튜플 외에 다른 시퀀스 데이터 유형은 리스트(list)와 range가 있습니다. 튜플은 리스트 및 range와 많은 유사점이 있지만 종종 다른 목적을 위해 사용됩니다. 튜플과 리스트의 가장 큰 차이점은, 튜플의 경우 변경할 수 없다(immutable)는 점입니다. 예를 들어, 리스트는 리스트에 값을 추가하거나 제거하여 변경할 수 있지만(mutable), 튜플은 불가능합니다.
2.2. 점 (Points)#
점(Point)은 2차원 또는 3차원 유클리드 공간에서 하나의 점을 가리킵니다. 따라서, 점은 단일 좌표 튜플로 정의됩니다.
2.3. 선 (LineStrings) & 선형 링 (LineRings)#
선(LineString)과 선형 링(LineRing)은 점의 시퀀스(sequence)로 정의된 선(lines)의 종류를 가리킵니다. 점을 순서대로 연결하면 선(LineString)이 형성되며, 만약 첫 번째 점과 마지막 점이 동일하면 선형 링(LineRing)이 됩니다. 따라서, 선(LineString)을 정의하려면 최소 2개의 점이 필요하고, 선형 링(LinearRing)의 경우 최소 3개가 필요합니다.
2.4. 다각형 (Polygons)#
다각형(Polygon)은 영역을 나타냅니다. 다각형은 하나의 선형 링(LinearRing)과 공백 영역을 나타내는 여러 개의 선형 링(LinearRing)들로 정의됩니다. 따라서 다각형을 정의하려면 최소한 3개의 좌표 튜플들이 필요합니다.
2.5. 기하학적 객체 집합#
복잡한 형태의 공간 특성을 표현하기 위해 기본적인 기하학적 객체들을 결합해 사용할 수 있습니다. 예를 들어, 불연속 지역으로 구성된 행정 구역(예. 서울특별시의 강북과 강남 지역)을 표현하는 경우가 있습니다.
다중 점(MultiPoint) : 점들의 집합
다중 선(MultiLineString) : 선들의 집합
다중 다각형(MultiPolygon) : 다각형들의 집합
기하 집합(GeometryCollection) : 점, 선, 다각형뿐만 아니라 다중 점, 다중 선, 다중 다각형의 집합