Ich erstelle ein Skript in Python mit OGR / GDAL.
Ich habe eine Reihe von Shapefiles und eine Reihe von GeoTiff-Rasterdateien.
Ich möchte, dass mein Skript Shapefiles ignoriert, wenn sie sich nicht mit dem Rasterbereich überschneiden.
Das Shapefile ist kein Rechteck, daher kann ich die von layer.GetExtent () zurückgegebenen xmin / xmax-, ymin / ymax-Werte nicht einfach vergleichen. Ich brauche das eigentliche Polygon, das seine Gesamtform darstellt, und dann eine Möglichkeit, um festzustellen, ob sich dieses Polygon mit dem Rasterquadrat schneidet.
Ich dachte, ich könnte irgendwie alle Polygone im Shapefile zu einem Feature zusammenführen, dann die Geometrie dieses Features lesen und diese Informationen dann mit dem Rasterumfang vergleichen. Ich bin mir jedoch nicht sicher, wie ich dies ausführen soll.
- Wie extrahiere ich Randpolygoninformationen aus dem Shapefile?
- Wie kann festgestellt werden, ob dieses Polygon eine bestimmte quadratische Fläche schneidet?
Antworten:
Das folgende Skript bestimmt den Begrenzungsrahmen eines Rasters und erstellt basierend auf dem Begrenzungsrahmen eine Geometrie.
Als nächstes wird die Geometrie des Vektorpolygons bestimmt. Dies beantwortet Ihre erste Frage.
Zuletzt wird die Geometrie des Vektors und des Rasters auf Schnittmenge (Rückgabe
True
oderFalse
) getestet . Dies beantwortet Ihre zweite Frage.quelle
Ich finde die @ustroetz-Lösung sehr hilfreich, aber sie musste an zwei Stellen korrigiert werden. Erstens ist pixelHeight = transform [5] bereits ein negativer Wert, daher sollte die Gleichung lauten
Zweitens muss die Reihenfolge der Punkte im Ring gegen den Uhrzeigersinn sein. Ich hatte Probleme damit. Richtige Reihenfolge ist:
quelle