Что я пытаюсь сделать: перебрать точечный шейп-файл и выбрать каждую точку, которая попадает в многоугольник.
Следующий код основан на примере пространственного запроса, который я нашел в книге:
mitte_path = r"D:\PythonTesting\SelectByLocation\mitte.shp"
punkte_path = r"D:\PythonTesting\SelectByLocation\punkte.shp"
polygon = QgsVectorLayer(mitte_path, 'Mitte', 'ogr')
points = QgsVectorLayer(punkte_path, 'Berlin Punkte', 'ogr')
QgsMapLayerRegistry.instance().addMapLayer(polygon)
QgsMapLayerRegistry.instance().addMapLayer(points)
polyFeatures = polygon.getFeatures()
pointsCount = 0
for poly_feat in polyFeatures:
polyGeom = poly_feat.geometry()
pointFeatures = points.getFeatures(QgsFeatureRequest().setFilterRect(polyGeom.boundingBox()))
for point_feat in pointFeatures:
points.select(point_feat.id())
pointsCount += 1
print 'Total:',pointsCount
Это работает, и он выбирает наборы данных, но проблема в том, что он выбирает ограничивающий прямоугольник , поэтому, очевидно, возвращает точки, которые меня не интересуют:
Как можно было бы возвращать только точки внутри многоугольника без использования qgis: selectbylocation ?
Я пытался использовать методы inside () и intersects () , но так как я не заставлял их работать, я прибегнул к приведенному выше коду. Но, возможно, они все-таки ключ.