qgis:clip
콘솔 에서 알고리즘 을 실행하려고하는데 메모리 내 계층을 오버레이 매개 변수로 사용할 때 오류가 발생합니다. 이것이 예상됩니까, 아니면 내가 잘못하고 있습니까?
암호:
mem_layer = QgsVectorLayer("Polygon?crs=epsg:4326", "temp_layer", "memory")
if not mem_layer.isValid(): raise Exception("Failed to create memory layer")
mem_layer_provider = mem_layer.dataProvider()
clip_polygon = QgsFeature()
clip_polygon.setGeometry(QgsGeometry.fromRect(
QgsRectangle(
self.output_layer.extent().xMinimum() + 10,
self.output_layer.extent().yMinimum() + 10,
self.output_layer.extent().xMaximum() - 10,
self.output_layer.extent().yMaximum() - 10
)
))
mem_layer_provider.addFeatures([clip_polygon])
mem_layer.updateExtents()
output = self.output_layer_path + "2"
processing.runalg("qgis:clip", layer, mem_layer, output) # Fails
위의 코드에서, self.output_layer
및 layer
이다 벡터 레이어 개체 (QgsVectorLayer - 디스크 모양 파일로드 적절한 것들), self.output_layer_path
경로와 파이썬 문자열 객체이다.
내가 얻는 오류는 다음과 같습니다.
"C:/OSGEO4~1/apps/qgis/./python/plugins\processing\core\GeoAlgorithm.py", line 150, in
execute self.processAlgorithm(progress)
File "C:/OSGEO4~1/apps/qgis/./python/plugins\processing\algs\ftools\Clip.py", line 72,
in processAlgorithm index = utils.createSpatialIndex(layerB)
File "C:/OSGEO4~1/apps/qgis/./python/plugins\processing\algs\ftools\FToolsUtils.py",
line 31, in createSpatialIndex features = QGisLayers.features(layer)
File "C:/OSGEO4~1/apps/qgis/./python/plugins\processing\core\QGisLayers.py", line 211,
in features return Features(layer)
File "C:/OSGEO4~1/apps/qgis/./python/plugins\processing\core\QGisLayers.py", line 218,
in __init__ self.iter = layer.getFeatures()
AttributeError: 'NoneType' object has no attribute 'getFeatures'
처리 호출을 다음과 같이 변경하면 오류없이 실행됩니다.
processing.runalg("qgis:clip", layer, self.output_layer, output) # Runs fine
또한 도움이 필요한 경우 processing_qgis.log에 로그인 할 때 실패한 알고리즘입니다.
processing.runalg("qgis:clip","C:/path/to/shapefile.shp|layerid=0|subset=CONTINENT =
'Europe'","Polygon?crs=epsg:4326","C:/path/to/output")
필요한 경우 .. 이런 레이어를 위해 메모리에서 작업하기가 더 쉽고 깨끗합니다. 예상되는 경우 답변으로 게시하면 수락 할 수 있습니다.
—
Oystein
import tempfile
및tempfile.gettempdir
). 어쨌든 qgis-processing의 작동 방식