Summary

  • Shapely는 개별 기하 객체(점·선·면)를 생성·조작하는 엔진이고, GeoPandas는 그 위에 속성·파일 입출력·시각화를 더한 종합 분석 도구다
  • 대부분의 분석은 GeoPandas로 시작하고, 세밀한 기하 편집이 필요할 때 Shapely 객체를 꺼내 처리한다
  • unary_union은 GeoPandas dissolve로 대체 가능하지만, linemerge·snap은 Shapely 고유 영역이다

GeoPandas와 Shapely의 차이

Shapely는 개별 기하 객체를 생성·조작하는 데 특화된 라이브러리이고, GeoPandas는 Pandas를 공간 정보에 맞게 확장한 라이브러리다.

Shapely — 기하 객체 조작 엔진

Shapely는 점·선·면 같은 기하 객체 그 자체를 다룬다. C++ 기하 엔진 GEOS를 감싼(wrapping) 라이브러리라 연산이 빠르고 안정적이다.

  • 장점: 개별 도형 처리가 직관적이고, 강력한 공간 연산을 제공하며, 개별 객체만 다뤄 가볍다
  • 단점: 속성 정보를 함께 다룰 수 없고, 파일 입출력·시각화 기능이 없다

GeoPandas — 공간 데이터프레임

GeoPandas는 Pandas의 DataFrame에 geometry 열(Shapely 객체 저장)을 더한 형태로, 공간 데이터와 속성 데이터를 함께 다룬다.

  • 장점: 속성+공간 정보를 통합 관리하고, Shapefile·GeoJSON 등 파일 입출력과 좌표계(CRS) 변환, 시각화를 지원한다
  • 단점: 데이터프레임 구조라 상대적으로 무겁고, 세밀한 개별 객체 연산은 Shapely가 더 효율적이다

결론

Shapely는 ‘순수한 기하학적 형태’를 다루는 엔진이고, GeoPandas는 이 엔진에 속성·입출력·시각화를 덧붙인 종합 분석 도구다. 대부분 GeoPandas로 시작하고, 필요할 때 GeoDataFrame에서 Shapely 객체를 꺼내 세밀히 조작한 뒤 다시 반영한다.


GeometryCollection

GeometryCollection은 서로 다른 유형의 기하 객체(점·선·면)를 하나로 묶은 객체다. MultiPolygon처럼 같은 유형만 묶는 것과 달리, 이질적인 유형을 함께 담는다.

from shapely.geometry import Point, LineString, Polygon, GeometryCollection
 
point = Point(0, 0)
line = LineString([(1, 1), (2, 2)])
polygon = Polygon([(3, 3), (4, 3), (4, 4), (3, 4)])
 
collection = GeometryCollection([point, line, polygon])
구분주요 Geometry 객체GeometryCollection
구성동일한 유형만서로 다른 유형 혼합 가능
구조균일·예측 가능이질적·복합적
특징GIS 분석 표준split() 등 연산 결과로 반환

Shapely 핵심 함수

split은 하나의 도형을 다른 도형(주로 선)을 기준으로 자른다. 결과는 잘린 도형들이 담긴 GeometryCollection으로 반환된다.

unary_union은 여러 기하 객체를 하나의 단일 객체로 합친다. 겹치는 경계선을 녹여(dissolve) 하나의 외부 경계를 만든다.

linemerge는 끝점이 맞닿은 여러 선(LineString)을 하나의 연속된 선으로 합친다. 끊기거나 갈래가 나뉘면 MultiLineString을 반환한다.

snap은 한 객체의 꼭짓점을 허용 거리 이내의 다른 객체 꼭짓점에 자석처럼 붙인다. 미세하게 어긋난 데이터를 정합할 때 쓴다.


GeoPandas에서의 대체 가능성

Shapely 함수GeoPandas 대체비고
unary_uniondissolve()특정 열 기준 그룹화까지 가능해 더 강력
splitoverlay() 조합과정이 복잡해 Shapely 직접 사용이 효율적
linemerge❌ 없음꼭짓점 레벨 저수준 편집이라 Shapely 고유
snap❌ 없음위상 관계·꼭짓점 조작이라 Shapely 고유

dissolve(by='상위_행정구역')은 해당 필드 값이 같은 도형을 하나로 합치며, by를 생략하면 전체를 합쳐 unary_union과 동일한 결과를 낸다. 반면 linemerge·snap처럼 위상 관계와 꼭짓점을 다루는 저수준 편집은 GeoPandas가 대체 메서드를 제공하지 않는다.


Reference