참고 글
1. https://likedalhyang.tistory.com/43
- shp 파일
2. https://gis.stackexchange.com/questions/113799/how-to-read-a-shapefile-in-python
- shp 파일을 python에서 읽는 방법
관련 글(내 블로그)
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 |
댓글