Mer

Hvordan legge til rasters i forskjellige størrelser i GDAL, slik at resultatet bare er i den kryssede regionen


Jeg skriver en Python -metode som legger til to rastere og genererer en enkelt rasterutgang. Av årsaker utenfor min kontroll er omfanget av input -rastrene forskjellige, men de overlapper hverandre.

Er det mulig å utelukkende operere på input -rasterpikslene som er overlappende i de 2 overlappende områdene for å generere min utgang slik at output -raster -omfanget bare er det kryssende området mellom de to inngangene?


Det første du må gjøre er å bestemme det overlappende rektangelet i geospatiale koordinater. For å gjøre dette får du geotransformen for hvert kildebilde:

gt1 = ds1.GetGeoTransform () # r1 har venstre, topp, høyre, bunn av datasettets grenser i geospatiale koordinater. r1 = [gt1 [0], gt1 [3], gt1 [0] + (gt1 [1] * ds1.RasterXSize), gt1 [3] + (gt1 [5] * ds1.RasterYSize)] # Gjør det samme for datasett 2… kryss = [maks (r1 [0], r2 [0]), min (r1 [1], r2 [1]), min (r1 [2], r2 [2]), maks (r1 [3 ], r2 [3])]

Konverter deretter det rektangelet til piksler for hvert bilde ved å trekke fra de øverste og venstre koordinatene og dividere med pikselstørrelsen, avrunde.

Herfra kan du ringeReadRaster ()på hvert bilde, noe som gir den pikselstørrelsen du nettopp har beregnet:

band.ReadRaster (px1 [0], px1 [1], px1 [2] - px1 [0], px1 [3] - px1 [1], px1 [2] - px1 [0], px1 [3] - px1 [1], #  )

Jeg er litt sliten, så gi meg beskjed hvis dette ikke gir mye mening.


Tredje krysselement bør være min (r1 [2], r2 [2]):

kryss = [maks (r1 [0], r2 [0]), min (r1 [1], r2 [1]), min (r1 [2], r2 [2]), maks (r1 [3], r2 [3])]

Jeg vil også anbefale noen logikk for å kontrollere at datasettene faktisk skjærer hverandre.

Dette er en tilnærming:

hvis (kryss [2] 


Se videoen: Mascot Erlangen Arbejdsbukser (September 2021).