GIS
[QGIS] 여러 shp 파일 한번에 불러오기 (기존 레이어 복제후 연결)
visualy
2024. 7. 18. 17:04
상황 :
- 기존 레이어를 복제해서(특성을 그대로 살린채) shp 파일을 연결하고자 한다. shp파일 수만큼 레이어가 복제될 것이다. 기존 복제할 레이어명은 "1". 아래 작업은 시도별 shp 파일을 모두 한번에 불러오는 경우에 편리하게 쓸 수 있다.
- shp파일은 지정한 폴더에 하위폴더로 여러 폴더 안에 들어있고 다수이다.
아래 코드를 QGIS 파이썬 창에서 실행시킨다.
import os
from qgis.core import (
QgsProject,
QgsVectorLayer,
QgsDataSourceUri
)
# Shapefile이 저장된 디렉토리 경로 (raw string 사용)
directory_path = 'C:/Users/Username/Documents/지도/shp/'
# 경로가 존재하는지 확인
if not os.path.exists(directory_path):
print(f"The directory path '{directory_path}' does not exist.")
else:
# 모든 하위 디렉토리까지 포함한 Shapefile 불러오기
shapefiles = []
for root, dirs, files in os.walk(directory_path):
for file in files:
if file.endswith('.shp'):
shapefiles.append(os.path.join(root, file))
# QGIS 프로젝트 인스턴스 가져오기
project = QgsProject.instance()
# "1" 레이어 찾기
original_layer = None
for layer in project.mapLayers().values():
if layer.name() == "1":
original_layer = layer
break
if original_layer is None:
print("Layer '1' not found!")
else:
# Shapefile별로 "1" 레이어 복제 및 데이터 연결
for shapefile in shapefiles:
layer_name = os.path.splitext(os.path.basename(shapefile))[0]
print(f"Processing Shapefile: {shapefile}")
# "1" 레이어 복제
clone_layer = original_layer.clone()
clone_layer.setName(layer_name)
# 복제된 레이어의 데이터 소스 변경
clone_layer.setDataSource(shapefile, layer_name, 'ogr')
# 프로젝트에 추가
project.addMapLayer(clone_layer)
print(f"Layer {layer_name} loaded successfully.")
print("All shapefiles have been processed.")