일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- MESH
- Set
- geojson
- 파이썬
- 지하철역좌표
- python최단거리
- pyvista
- 도커 레이어
- 그리드분할
- 귀여운고래
- 좌표거리
- 도커
- 컨테이너
- Python
- 동명이인찾기
- 데이터입수
- 알고리즘
- graph
- GIS
- geopandas
- STL
- 3d데이터
- 이미지빌드
- 3d
- GNN
- 폴더조사
- 패치분할
- GCN
- osmnx
- docker
- Today
- Total
이것저것 기록
[python] 파이썬에서 shape파일을 불러오는 여러 방법들 및 활용 본문
파이썬에서 shape파일을 불러오는 방법은 진짜 다양하다.
어떤 라이브러리(모듈)을 사용하느냐가 관건(?)인데, 이건 뭐... 각자 편한 라이브러리를 쓰면 된다.
1. Fiona
이름이 참 이쁜 라이브러리다. 그러나 메뉴얼은 절대 이쁘지 않다.
쨌든, Fiona로 shape파일을 열어보자.
import fiona #라이브러리 가져오기
file = fiona.open("shape 파일명.shp")
파일을 불러왔으니 이 파일을 가지고 활용할 수 있는 방법을 몇 개 소개해볼 것이다.
우선 이제 이 파일에 몇 개의 객체가 들어있고, 이 객체들의 structure는 어떻게 되는지 알아보자.
file에는 총 773개의 무언가가 들어있고, 랜덤한 인덱스를 넣어보면 file[1]이라는 객체는 'type', 'id', 'properties', 'geometry' 라는 key값을 갖는 dict인 것을 알 수 있다.
이 dict에서 내가 필요한 key만 불러오고 싶다고 하자. 나는 'geometry'라는 key 값만 불러올 것이다.
'geometry'라는 key는 또, 'type', 'coordinates'를 key 값으로 가지는 dict이다.
재밌다. dict 안의 dict!! (나는 이런 걸 인셉션 dict라고 부른다.)
여기서 또 한 번 'coordinates'라는 key 값만 갖고 오고 싶다면?
짠! 보다시피 [(x1, y1), (x2, y2)]라는 두 개의 점으로 이루어진 선분임을 알 수 있다.
위와 같이 인덱스를 주어 각각 다른 변수에 할당해주면 좌표를 분리할 수도 있다.
이외에도 Fiona 라이브러리를 통해서 불러온 shape파일을 사용해서 어떤 처리를 할 수 있는지 알아보는 좋은 방법이 있다.
dir(file (shape파일을 불러온 객체))을 하면 file에 쓸 수 있는 함수, 혹은 받을 수 있는 속성값에 무엇이 있는 지 알려준다. 총 74개가 있다고 한다.
다만 주의할 점은 저기 나온 게 함수인지, 속성값인지까지는 알려주지 않기 때문에 잘 확인해봐야 한다.
write이라는 속성값인 줄 알았는데 함수면, 위처럼 친절하게 알려준다. (bound method Collection.writie. 어쩌구)
이건 '함수인데 속성처럼 잘못 사용하였으니 뒤에 ()를 붙여'라는 뜻이다.
2. GeoPandas
import geopandas as gpd
file = gpd.read_file('shape 파일명.shp')
geopandas라는 라이브러리가 (개인적으로) fiona보다 나은 것 같다.
왜냐하면 시각화가 정말 편하게 되어 있기 때문이다.
fiona처럼 굳이 귀찮은 작업을 거치지 않더라도 이렇게 어떤 컬럼이 있고, 각 컬럼별 내용이 뭔지 확인할 수 있어서 배우 편하다.
이번에도 'geometry' key 값에서 각각의 좌표를 분리해보려고 한다.
3. PyShp
import os
import shapefile
file = shapefile.Reader('shape 파일명.shp')
first = file.shapeRecords()[1] #첫번째 객체 불러오기
element = first.shape.__geo_interface__ #객체를 dict 타입으로 불러오기
shape 파일을 불러와서, 안의 내용물까지 확인하고, 필요한 정보를 뽑아내는 것까지 알아봤다!
속의 속의 속의 속까지 들어가서 필요한 정보만 뽑아와서 쓰는 것이 처음에는 엄청 골치아프다.
왜냐하면 불러온 shape 파일의 구조(?)를 모르니까!
근데 일단 불러온 shape 파일의 컬럼 갯수, 컬럼명 등 정보를 알고 나면 뽑아쓰는 건 매우 쉽다.
끝!
'코린이 > 실무를 위한 코딩 기록' 카테고리의 다른 글
[python] NetworkX를 사용해서 데이터분석 및 시각화 해보기 (5) | 2020.11.02 |
---|---|
[python, folium] 서울 따릉이 대여소 (x,y)좌표 변환 및 지도 시각화 (1) | 2020.10.09 |
[python, openCV] 이미지 파일에서 특정 픽셀값만 추출하기 (0) | 2020.09.21 |
[python, shapely] 이미지(raster)에서 폴리곤(vector) 추출하기 (1) | 2020.09.21 |
[python, PIL] 직사각형에서 정사각형 이미지로 변환하기 (0) | 2020.09.21 |