Was ich versuche: Durchlaufen Sie ein Punkt-Shapefile und wählen Sie jeden Punkt aus, der in ein Polygon fällt .
Der folgende Code ist von einem Beispiel für räumliche Abfragen inspiriert, das ich in einem Buch gefunden habe:
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
Dies funktioniert und es werden Datensätze ausgewählt, aber das Problem ist, dass es durch einen Begrenzungsrahmen ausgewählt wird , wodurch offensichtlich Punkte zurückgegeben werden, an denen ich nicht interessiert bin:
Wie kann ich nur Punkte innerhalb des Polygons zurückgeben, ohne qgis: selectbylocation zu verwenden ?
Ich habe versucht, die Methoden inside () und intersects () zu verwenden, aber da ich sie nicht zum Laufen gebracht habe, habe ich auf den obigen Code zurückgegriffen. Aber vielleicht sind sie doch der Schlüssel.