Summary
- Shapely는 개별 기하 객체(점·선·면)를 생성·조작하는 엔진이고, GeoPandas는 그 위에 속성·파일 입출력·시각화를 더한 종합 분석 도구다
- 대부분의 분석은 GeoPandas로 시작하고, 세밀한 기하 편집이 필요할 때 Shapely 객체를 꺼내 처리한다
unary_union은 GeoPandasdissolve로 대체 가능하지만,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_union | ✅ dissolve() | 특정 열 기준 그룹화까지 가능해 더 강력 |
split | △ overlay() 조합 | 과정이 복잡해 Shapely 직접 사용이 효율적 |
linemerge | ❌ 없음 | 꼭짓점 레벨 저수준 편집이라 Shapely 고유 |
snap | ❌ 없음 | 위상 관계·꼭짓점 조작이라 Shapely 고유 |
dissolve(by='상위_행정구역')은 해당 필드 값이 같은 도형을 하나로 합치며, by를 생략하면 전체를 합쳐 unary_union과 동일한 결과를 낸다. 반면 linemerge·snap처럼 위상 관계와 꼭짓점을 다루는 저수준 편집은 GeoPandas가 대체 메서드를 제공하지 않는다.
Reference