Haversine-basierte Distanztransformation
Ich habe ein Binärbild mit einer Pixelauflösung in Gradeinheiten (EPSG: 4326):
In diesem Fall sind alle hellblauen Pixel Wasser (Wert = 1) und lila Pixel sind kein Wasser (Wert = 0). Ich möchte eine Entfernungstransformation dieses Bildes berechnen, wobei das Ergebnis die Entfernung jedes Pixels vom nächsten "Ein" -Pixel (Wasserpixel) ist. Dies ist mit scipy machbar :
Die zurückgegebenen Abstände sind jedoch euklidisch in Bezug auf die Zeilen- und Spaltenkoordinaten jedes Pixels. Kennt jemand ein Paket oder eine Funktion, die eine Entfernungstransformation unter Verwendung der Haversine-Formel für die Lon-Lat-Koordinaten anstelle der Zeilen-Col-Koordinaten berechnet?
[Ich weiß, dass ich ein längenerhaltendes CRS neu projizieren und mit der Auflösung multiplizieren kann.]
Antworten
Ich würde diese Schritte befolgen:
- Erstellen Sie Punkte aus der Mitte eines einzelnen Pixels, weisen Sie jedem Pixelwert und jeder Koordinate seiner Mitte den entsprechenden Punkt zu. Überprüfen Sie diesen Beitrag . (
rasterio,geopandas) - Sammle alle Wasserpunkte zu einem Mehrpunktobjekt. (
geopandas) - Berechnen Sie die Haversine-Entfernung zwischen einem Punkt und dem Mehrpunkt und weisen Sie die Entfernung dem Punkt zu. In diesem Schritt ist das Ergebnis die Entfernung jedes Punkts vom nächsten Punkt im Mehrpunkt (Wasserpunkte). Überprüfen Sie diesen Beitrag . (
geopandas/shapely) - Erstellen Sie ein neues Raster aus dem Wert der Punkte (basierend auf den Eigenschaften des Quell-Rasters)
Da es für hochauflösendes Raster Millionen von Punkten gibt, ist diese Methode zeitaufwändig.