Я написал этот код для выбора точек внутри полигонов, используя pyqgis.
polygonFile = '/home/polygon.shp'
pointFile = '/home/points.shp'
polygonLayer = QgsVectorLayer(polygonFile, 'poligoni', 'ogr')
pointLayer = QgsVectorLayer(pointFile, 'punti', 'ogr')
polygonFeatureList = [plfeat for plfeat in polygonLayer.getFeatures()]
pointFeatureList = [ptfeat for ptfeat in pointLayer.getFeatures()]
polygonFeatureNumber = polygonLayer.featureCount()
pointFeatureNumber = pointLayer.featureCount()
QgsMapLayerRegistry.instance().addMapLayer(polygonLayer)
QgsMapLayerRegistry.instance().addMapLayer(pointLayer)
for ptfeat in pointFeatureList:
ptGeometry = ptfeat.geometry()
for plfeat in polygonFeatureList:
plGeometry = plfeat.geometry()
if plGeometry.contains(ptGeometry):
pointLayer.select(ptfeat.id)
Он работает только тогда, когда мой шейп-файл многоугольника составлен только одной функцией, в противном случае я получаю эту ошибку
TypeError: arguments did not match any overloaded call:
QgsVectorLayer.select(QgsRectangle, bool): argument 1 has unexpected type 'builtin_function_or_method'
QgsVectorLayer.select(int): argument 1 has unexpected type 'builtin_function_or_method'
QgsVectorLayer.select(unknown-type): argument 1 has unexpected type 'builtin_function_or_method'
Я пытался изменить последнюю часть следующим образом:
for pt in (range(0, pointLayer.featureCount()):
ptFeat = pointFeatureList[pt]
ptGeometry = ptFeat.geometry()
for pl in (range(0, polygonLayer.featureCount()):
plFeat = polygonFeatureList[pl]
plGeometry = plFeat.geometry()
if plGeometry.contains(ptGeometry):
pointLayer.select(ptFeat, id)
, но на этот раз я получаю такую ошибку
TypeError: arguments did not match any overloaded call:
QgsVectorLayer.select(QgsRectangle, bool): argument 1 has unexpected type 'QgsFeature'
QgsVectorLayer.select(int): argument 1 has unexpected type 'QgsFeature'
QgsVectorLayer.select(unknown-type): argument 1 has unexpected type 'QgsFeature'
Пока я не нашел способа сделатьправильное использование функции select в пространственном запросе.