상황 :
- 기존 레이어를 복제해서(특성을 그대로 살린채) 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.")
'GIS' 카테고리의 다른 글
qgis에서 숫자가 텍스트로 인식되는 경우 (0) | 2024.08.01 |
---|---|
[QGIS] Random Marker Fill 화면 범위 내에서만 렌더링 되는 문제 해결 (0) | 2024.07.01 |
[QGIS] 많은 데이터 렌더링 속도를 빠르게 하려면 - 공간 인덱스 생성 (0) | 2024.06.29 |
Qgis에서 공시지가 히트맵 만들기 (0) | 2024.05.28 |
QGIS에 삽입된 엑셀 새로고침 (변경된 내용 반영하기) (0) | 2022.12.12 |
댓글