안녕하세요? 이번 글은 QGIS 파이썬 콘솔(PyQGIS)에서 연속지적도형을 제어하는 과정을 정리해 보겠습니다.
연속지적도형과 같은 주제도에서 반복 작업을 하는 경우, PyQGIS가 업무 자동화에 도움이 되실 것 같습니다.
먼저, 연속지적도형을 하나 받아보겠습니다. 국가공간정보포털 '국가중점데이터'에 접속합니다.
부동산 개방데이터 목록 중 '연속지적도형정보(SHP)'를 클릭합니다.
시도는 '세종특별자치시', 구분은 '전체데이터'를 선택한 후 '조회' 버튼을 클릭해 보겠습니다. 'SHP'를 다운로드합니다.
QGIS를 실행하고 상단 메뉴 바 중 '플러그인 > 파이썬 콘솔'을 클릭합니다.
이제 콘솔 창에서 코드를 실행해 보시면 되겠습니다.
PyQGIS Developer Cookbook이 코드 작성의 기본이 됩니다. 자, 그럼 시작해볼까요?!
먼저, 연속지적도형 레이어를 추가합니다.
# 연속지적도형 레이어 추가
cadLyr = QgsVectorLayer('D:/GEODATA/AL_36_D002_20210323.shp', 'AL_36_D002_20210323', 'ogr')
if cadLyr.isValid():
QgsProject.instance().addMapLayer(cadLyr)
'채우기 색상'도 코드로 제어가 가능한데요, 색상 확인은 아래 코드를 실행하시면 됩니다.
# 색상 확인
QColor().colorNames()
저는 'whitesmoke' 색상을 채우기 색상으로 적용해 보겠습니다.
# 색상 적용
renderer = cadLyr.renderer()
symbol = renderer.symbol()
symbol.setColor(QColor('whitesmoke'))
cadLyr.triggerRepaint()
iface.layerTreeView().refreshLayerSymbology(cadLyr.id())
연속지적도형 속성 테이블은 아래와 같은데요,
여기서 "A5" 필드값이 '23-247천'과 일치하는 객체를 선택하고 '선택 객체 범위로 확대'해 보겠습니다.
# 속성으로 객체 선택
cadLyr.selectByExpression("\"A5\"='23-247천'")
iface.actionZoomToSelected().trigger()
선택한 객체를 ESRI Shapefile로 저장하는 코드는 아래와 같습니다.
인코딩('utf-8')과 좌표계(4326)를 함께 지정한 것을 확인하실 수 있습니다.
# ESRI Shapefile로 저장
newLyr = QgsVectorFileWriter.writeAsVectorFormat(cadLyr,
r'D:\GEODATA\NewSHP.shp', 'utf-8',
QgsCoordinateReferenceSystem(4326), 'ESRI Shapefile', bool(True))
이번에는 선택한 객체를 AutoCAD DXF로 저장해 보겠습니다. 코드는 다음과 같습니다.
# AutoCAD DXF로 저장
newLyr = QgsVectorFileWriter.writeAsVectorFormat(cadLyr,
r'D:\GEODATA\NewCAD.dxf', 'utf-8',
QgsCoordinateReferenceSystem(4326), 'DXF', onlySelected=True, skipAttributeCreation=True)
DXF는 EPSG:4326으로 저장되었지만 레이어 좌표계는 정의되지 않음을 확인하실 수 있습니다.
레이어 좌표계를 지정해 줘야 할 텐데요, CRS 설정을 PyQGIS로 간단히 처리하실 수 있습니다.
아래와 같이 EPSG:4326을 지정하여 레이어를 추가해 주시면 됩니다. DXF 파일이 잘 매칭됐죠?!
# DXF 레이어 추가(CRS 설정)
dxfLyr = QgsVectorLayer('D:/GEODATA/NewCAD.dxf', 'NewCAD', 'ogr')
dxfLyr.setCrs(QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.EpsgCrsId))
if dxfLyr.isValid():
QgsProject.instance().addMapLayer(dxfLyr)
참고로 QGIS 파이썬 콘솔 이용 시 참고가 되는 웹페이지들을 링크해 봅니다.
[1] GDAL: 대부분의 경우, GDAL로 다 해결됩니다. gdal.org/gdal.pdf은 제본해두면 도움이 됩니다.
[2] Python OGR/GDAL Cookbook: Jared Erickson(자레드 에릭슨)님이 제공하시는 쿡북입니다.
[3] Open Source RS/GIS Python: 유타주립대학교 RS/GIS Laboratory에서 제작한 강의 교안(ospy_slide*)입니다.
[4] GIS Stack Exchange: 말이 필요없겠죠?! PyQGIS 관련 구글링 결과의 대부분은 이 웹페이지에 착륙할 겁니다.