pyQGIS를 이용한 벡터 데이터 처리 5 : 피쳐 선택하고 저장하기

가장 먼저 피쳐의 ID 값으로 선택하는 코드입니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
QgsProject.instance().removeAllMapLayers()
layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr")
QgsProject.instance().addMapLayers([layer])
selectid = [0, 1, 2, 3, 4]
layer.select(selectid)
QgsProject.instance().removeAllMapLayers() layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr") QgsProject.instance().addMapLayers([layer]) selectid = [0, 1, 2, 3, 4] layer.select(selectid)
QgsProject.instance().removeAllMapLayers()
layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr")
QgsProject.instance().addMapLayers([layer])

selectid = [0, 1, 2, 3, 4]
layer.select(selectid)

아래는 선택된 피쳐를 순회하는 코드입니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
QgsProject.instance().removeAllMapLayers()
layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr")
QgsProject.instance().addMapLayers([layer])
selectid = [0, 1, 2, 3, 4]
layer.select(selectid)
QgsProject.instance().removeAllMapLayers()
layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr")
QgsProject.instance().addMapLayers([layer])
selectid = [0, 1, 2, 3, 4]
layer.select(selectid)
selection = layer.selectedFeatures()
for feat in selection:
print(feat['RN'])
QgsProject.instance().removeAllMapLayers() layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr") QgsProject.instance().addMapLayers([layer]) selectid = [0, 1, 2, 3, 4] layer.select(selectid) QgsProject.instance().removeAllMapLayers() layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr") QgsProject.instance().addMapLayers([layer]) selectid = [0, 1, 2, 3, 4] layer.select(selectid) selection = layer.selectedFeatures() for feat in selection: print(feat['RN'])
QgsProject.instance().removeAllMapLayers()
layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr")
QgsProject.instance().addMapLayers([layer])

selectid = [0, 1, 2, 3, 4]
layer.select(selectid)
QgsProject.instance().removeAllMapLayers()
layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr")
QgsProject.instance().addMapLayers([layer])

selectid = [0, 1, 2, 3, 4]
layer.select(selectid)

selection = layer.selectedFeatures()
for feat in selection:
    print(feat['RN'])

다음은 SQL의 Where 조건 형태의 조건으로 피쳐를 선택하고 선택된 피쳐만을 새로운 SHP 파일로 저장하는 코드입니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
QgsProject.instance().removeAllMapLayers()
layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr")
QgsProject.instance().addMapLayers([layer])
layer.selectByExpression('"RN" like \'%로\'')
fn = "D:/__Data__/aa.shp"
writer = QgsVectorFileWriter.writeAsVectorFormat(layer, fn,
"utf-8",
driverName="ESRI ShapeFile",
onlySelected=True
)
print("DONE")
newLayer = QgsVectorLayer(fn, "aa")
QgsProject.instance().addMapLayers([newLayer])
QgsProject.instance().removeAllMapLayers() layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr") QgsProject.instance().addMapLayers([layer]) layer.selectByExpression('"RN" like \'%로\'') fn = "D:/__Data__/aa.shp" writer = QgsVectorFileWriter.writeAsVectorFormat(layer, fn, "utf-8", driverName="ESRI ShapeFile", onlySelected=True ) print("DONE") newLayer = QgsVectorLayer(fn, "aa") QgsProject.instance().addMapLayers([newLayer])
QgsProject.instance().removeAllMapLayers()

layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr")
QgsProject.instance().addMapLayers([layer])
layer.selectByExpression('"RN" like \'%로\'')

fn = "D:/__Data__/aa.shp"
writer = QgsVectorFileWriter.writeAsVectorFormat(layer, fn, 
    "utf-8", 
    driverName="ESRI ShapeFile", 
    onlySelected=True
)

print("DONE")

newLayer = QgsVectorLayer(fn, "aa")
QgsProject.instance().addMapLayers([newLayer])

다음은 사각형 영역을 지정해서 이 영역과 교차하는 피쳐를 선택하는 코드입니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
QgsProject.instance().removeAllMapLayers()
layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr")
QgsProject.instance().addMapLayers([layer])
areaOfInterest = QgsRectangle(982413, 1835226, 987413, 1840226)
request = QgsFeatureRequest().setFilterRect(areaOfInterest)
selected = []
for feature in layer.getFeatures(request):
selected.append(feature.id())
layer.select(selected)
QgsProject.instance().removeAllMapLayers() layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr") QgsProject.instance().addMapLayers([layer]) areaOfInterest = QgsRectangle(982413, 1835226, 987413, 1840226) request = QgsFeatureRequest().setFilterRect(areaOfInterest) selected = [] for feature in layer.getFeatures(request): selected.append(feature.id()) layer.select(selected)
QgsProject.instance().removeAllMapLayers()
layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr")
QgsProject.instance().addMapLayers([layer])

areaOfInterest = QgsRectangle(982413, 1835226, 987413, 1840226)
request = QgsFeatureRequest().setFilterRect(areaOfInterest)

selected = []

for feature in layer.getFeatures(request):
    selected.append(feature.id())
    
layer.select(selected)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다