🖥️ IT, 컴퓨터/🐍 Python
[Python] shp파일 내 피처를 shp 파일로 내보내기 / 전국 시군별, 시도별로 파일 만들기 :: 지오판다스 이용
김 홍시
2024. 10. 28. 13:44
반응형
문제상황
이와 같이 시/군별로 피처들이 있는데,
이것을 지역별로 별도의 shp를 만들고 싶음
해결방법
시군구 or 시군 등 shp파일 준비
필자는 아래의 shp 파일을 사용함
지오판다스가 기본적으로 설치되어 있어야 함
python에서 아래 코드 입력
import geopandas as gpd
import os
# 원본 shp 파일 경로
input_file = "shp파일이있는경로.shp"
# 개별 shp 파일이 저장될 경로
output_folder = "결과물을저장할경로"
# 폴더가 없다면 생성
os.makedirs(output_folder, exist_ok=True)
# 원본 shp 파일 불러오기
gdf = gpd.read_file(input_file)
# 도시별로 분리 및 저장
for city in gdf['SGG_NM'].unique(): # 'city_name_column'을 도시 이름 컬럼명으로 대체
city_gdf = gdf[gdf['SGG_NM'] == city]
output_file = os.path.join(output_folder, f"{city}.shp")
city_gdf.to_file(output_file, driver='ESRI Shapefile')
print("도시별 shapefile 파일 생성 완료!")
여기에서
input_file
output_folder
경로는 수정할 것
그러면 아래와 같이 지역별로 shp파일 내보내기가 완료됨
+) 만약 시도별로 나누고 싶다면
import geopandas as gpd
import os
# 원본 shp 파일 경로
input_file = "shp파일이있는경로.shp"
# 개별 shp 파일이 저장될 경로
output_folder = "결과물을저장할경로"
# 폴더가 없다면 생성
os.makedirs(output_folder, exist_ok=True)
# 원본 shp 파일 불러오기
gdf = gpd.read_file(input_file)
# sd 컬럼을 정수형으로 변환 (필요시)
gdf['sd'] = gdf['sd'].astype(int)
# sd와 name 매핑 정보
sd_name_map = {
11: "서울특별시",
26: "부산광역시",
27: "대구광역시",
28: "인천광역시",
29: "광주광역시",
30: "대전광역시",
31: "울산광역시",
36: "세종특별자치시",
41: "경기도",
51: "강원특별자치도",
43: "충청북도",
44: "충청남도",
52: "전북특별자치도",
46: "전라남도",
47: "경상북도",
48: "경상남도",
50: "제주특별자치도"
}
# sido별로 분리 및 저장
for sd_value in gdf['sd'].unique():
# sd 값에 해당하는 데이터 필터링
sido_gdf = gdf[gdf['sd'] == sd_value]
# 파일 이름 설정
city_name = sd_name_map.get(sd_value) # 매핑된 이름을 가져옴
if city_name: # 이름이 존재할 경우에만 저장
output_file = os.path.join(output_folder, f"{city_name}.shp")
# shapefile 저장
sido_gdf.to_file(output_file, driver='ESRI Shapefile')
else:
print(f"sd 값 {sd_value}에 해당하는 이름을 찾을 수 없습니다.")
print("sido별 shapefile 파일 생성 완료!")
본 코드를 사용한다.
그 결과 아래처럼 된다.
반응형