지오메트리에 대한 공간 연산을 공간 분석을 위해 활용할 수 있는데 그 연산 중 버퍼 연산에 대한 코드를 설명합니다. 먼저 레이어를 추가하고 RN이라는 필드의 값이 “로”로 끝나는 피쳐를 선택하고 선택된 피쳐의 지오메트리에 대해 버퍼 연산을 수행한 뒤 그 결과를 다른 SHP 파일에 저장하는 코드를 작성해 보겠습니다.
먼저 레이어를 추가하고 RN 필드값이 “로”로 끝나는 피쳐를 선택하는 코드를 다음처럼 작성합니다.
QgsProject.instance().removeAllMapLayers() layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE") QgsProject.instance().addMapLayers([layer]) layer.selectByExpression('"RN" like \'%로\'')
버퍼 연산 결과를 저장할 SHP 파일 작성자(Writer)를 생성합니다.
fields = layer.fields() fileName = "D:/__Data__/buffer.shp" writer = QgsVectorFileWriter( fileName, "utf-8", fields, QgsWkbTypes.Polygon, layer.sourceCrs(), "ESRI Shapefile" )
이제 선택된 피쳐를 하나씩 순회하면서 버퍼 연산을 수행하고 그 결과를 새로운 SHP 파일에 기록합니다.
dist = 100 features = layer.selectedFeatures() for feat in features: geom = feat.geometry() buff = geom.buffer(dist, 8) feat.setGeometry(buff) writer.addFeature(feat) del(writer) # 새로운 SHP 파일 닫기
새로운 SHP 파일을 레이어로 추가하는 코드는 다음과 같습니다.
layer = QgsVectorLayer(fileName, "새로운 레이어", "ogr") QgsProject.instance().addMapLayers([layer])
실행 결과는 다음과 같습니다.