본문 바로가기
TOP BOTTOM
ML/Python

shp 파일[shapefile], 파이썬에서 shp 파일 읽는 법 - geopandas, shapefile, fiona, osgeo

by mola23 2021. 11. 10.

참고 글

 

관련 글(내 블로그)

1. geopandas란

2. geopandas 설치 오류

 

 

1. shp 파일

 shp 파일의 구성

- 5개의 파일로 이루어져 있고, 이 파일들이 모두 있어야 shapefile로 사용할 수 있음
① shp - 지리 사상의 기하학 정보 저장
② shx - 지리 사상의 기하학 정보의 인덱스 저장(shp 파일의 인덱스)
③ dbf - 지리 사상의 속성 정보를 제공하는 dBASE 파일(table)
④ sbx - 지리 사상 공간 인덱스 저장
⑤ sbn - spatial join 등의 기능을 수행하거나, shape 필드에 대한 인덱스를 생성할 때 필요한 파일

- shp (main file), shx (index file), dbf (dBASE file)은 직접 엑세스가 가능

 

2. python에서 shapefile 읽는 방법

1) geopandas

- pandas와 합쳐져셔 dataframe 형태로 처리할 수 있다는 게 매우 편리함
- dependencies가 많아서 설치할 때 어려움

import geopandas as gpd
gpd.read_file(file)

 

2) PyShp ... shapefile

- geopandas를 설치할 수 없었을 때 shp 파일 읽기 쉬워서 사용하게 됨
- geometry를 제외한 정보들을 처리하기 쉽진 않았음

import shapefile

sf_node = shapefile.Reader(file)

files_node = [x[0] for x in sf_node.fields][1:]
print(files_node)

pd.DataFrame([s.points for s in sf_node.shapes()])
# 한글 있으면 UnicodeDecodeError 발생하기도 함
feature = shape.shapeRecords()[0] # UnicodeDecodeError
first = feature.shape.__geo_interface__

 

3) fiona

- 아직 전체 행을 읽는 방법은 모름. 사용해보지 않음

import fiona

shape = fiona.open(file)
shape.next()

 

4) ogr ... osgeo

- 아직 전체 행을 읽는 방법은 모름. 사용해보지 않음

from osgeo import ogr

file2 = ogr.Open(file)
shape = file2.GetLayer(0)

feature = shape.GetFeature(0) # 이 값을 바꾸면 다음 행
feature.ExportToJson()

 

마무리

* Github에 정리함

shp 파일 ... 지리 정보를 이용하다 보니 계속 접하게 됨...
               구역의 경계가 담겨 있어서 파일 크기가 큰 것 같다
               처음엔 shp 파일만 옮겨셔 이용하려고 했는데 5개의 파일이 함께 있어야 한다는 걸 알게 되었다...^^

 

'ML > Python' 카테고리의 다른 글

[Pandas] DataFrame 행/열 출력 개수 지정: set_option  (0) 2021.11.12
[Python] 코드 실행 시간 측정  (0) 2021.11.09
geopandas 설치 오류  (0) 2021.08.06

댓글