17.10. De Raster calculator. Waarden Geen gegevens¶
Notitie
In deze les zullen we zien hoe we de Raster calculator gebruiken om enkele bewerkingen op rasterlagen uit te voeren. We zullen ook uitleggen wat waarden Geen gegevens zijn en hoe de berekeningen en andere algoritmen die behandelen
De Raster calculator is een van de meest krachtige algoritmen die u zult tegenkomen. Het is een enorm flexibel en veelzijdig algoritme dat voor veel verschillende berekeningen kan worden gebruikt, en een dat snel een belangrijk deel van uw gereedschapskist zal zijn.
In deze les zullen we enkele berekeningen met Raster calculator uitvoeren, de meeste daarvan redelijk eenvoudig. Dat zal ons laten zien hoe het wordt gebruikt en hoe het enkele bijzondere situaties behandelt die het zou kunnen tegenkomen. Dat begrijpen is belangrijk om later de verwachte resultaten te krijgen bij het gebruiken van Raster calculator, en ook om bepaalde technieken te begrijpen die er algemeen mee toegepast worden.
Open het project voor QGIS voor deze les en u zult zien dat het verschillende rasterlagen bevat.
Open nu de Toolbox en open het dialoogvenster dat correspondeert met de Raster calculator.
Notitie
De interface is anders in recente versies.
Het dialoogvenster bevat 2 parameters.
De voor de analyse te gebruiken lagen. Dit is een meervoudige invoer, wat betekent dat u zoveel lagen kunt selecteren als u wilt. Klik op de knop aan de rechterkant en selecteer dan de lagen die u wilt gebruiken in het dialoogvenster dat verschijnt.
De toe te passen formule. De formule gebruikt de lagen die zijn geselecteerd in de parameter hierboven, die worden vermeld met letters uit het alfabet (
a, b, c...
) ofg1, g2, g3...
als namen voor variabelen. Dat is, de formulea + 2 * b
is hetzelfde alsg1 + 2 * g2
en zal de som van de waarde in de eerste laag plus twee keer de waarde van de tweede laag berekenen. De volgorde van de lagen is dezelfde volgorde als die welke u ziet in het dialoogvenster voor de selectie.
Waarschuwing
De calculator is hoofdlettergevoelig.
We zullen, om mee te beginnen, de eenheden van de DEM wijzigen van meters naar voet. De formule die we nodig hebben is de volgende:
h' = h * 3.28084
Selecteer de DEM in het veld voor de lagen en typ a * 3.28084
in het veld voor de formule.
Waarschuwing
Voor niet Engelse gebruikers: gebruik altijd “.”, niet “,”.
Klik op Run om het algoritme uit te voeren. U zult ene laag krijgen die er hetzelfde uitziet als de invoerlaag, maar met andere waarden. De invoerlaag die we gebruikten had geldige waarden in al zijn cellen, dus heeft de laatste parameter in het geheel geen effect.
Laten we nu een andere berekening uitvoeren, deze keer op de laag accflow. Deze laag bevat waarden van een geaccumuleerde stroom, een hydrologische parameter. Het bevat alleen die waarden binnen het gebied van een bepaalde waterkering, zonder waarden geen gegevens daarbuiten. Zoals u kunt zien, is het renderen niet erg informatief, vanwege de manier waarop de waarden zijn verdeeld. Gebruiken van de logaritme van die accumulatie van die stroom zal een veel meer informatieve weergave opleveren. We kunnen die berekenen met behulp van de Raster calculator.
Open opnieuw het dialoogvenster voor het algoritme, selecteer de laag accflow als de enige laag voor de invoer, en voer de volgende formule in: log(a)
.
Hier is de laag die u zult krijgen.
Als u het gereedschap Object identificeren selecteert om de waarde van een laag op een bepaald punt te weten te komen, selecteer de laag die we zojuist hebben gemaakt en klik op een punt buiten het bassin, u zult zien dat het een waarde Geen gegevens bevat.
Voor de volgende oefening gaan we twee lagen gebruiken in plaats van een, en we zullen een DEM gaan krijgen met alleen geldige waarden binnen het bassin, gedefinieerd in de tweede laag. Open het dialoogvenster voor de calculator en selecteer beide lagen van het project in het veld voor de invoerlagen. Voer de volgende formule in het corresponderende veld in:
a/a * b
a
verwijst naar de laag met de geaccumuleerde stroom (omdat het de eerste in de lijst is) en b
verwijst naar de DEM. Wat we hier in het eerste deel van de formule gaan doen is de laag met de geaccumuleerde stroom delen door zichzelf, wat zal resulteren in een waarde 1 binnen het bassin, en een waarde Geen gegevens daarbuiten. Dan vermenigvuldigen we met de DEM, om de hoogtewaarden in de cellen binnen het bassin te krijgen (DEM * 1 = DEM
) en de waarden Geen gegevens daarbuiten (DEM * no_data = no_data
)
Hier is de resulterende laag.
Deze techniek wordt regelmatig gebruikt om waarden in een rasterlaag te maskeren, en is bruikbaar wanneer u berekeningen uit wilt voeren op een andere regio dan de willekeurige rechthoekige regio die wordt gebruikt door de rasterlaag. Een hoogte-histogram bijvoorbeeld van een rasterlaag heeft weinig betekenis. Als het echter berekend met alleen de waarden die overeenkomen met een bassin (zoals in het bovenstaande geval), is het resultaat dat we verkrijgen een betekenisvolle die in feite informatie geeft over de configuratie van het bassin.
Los van de waarden Geen gegevens en hoe zij worden afgehandeld zijn er andere interessante dingen met betrekking tot dit algoritme dat we zojuist hebben uitgevoerd. Als u eens kijkt naar de bereiken van de lagen die we hebben vermenigvuldigd (u kunt dat doen door te dubbelklikken op de naam van de laag in de inhoudsopgave en hun eigenschappen bekijken), zult u zien dat zij niet hetzelfde zijn, omdat het bereik dat wordt bedekt door de laag van de geaccumuleerde stroom kleiner is dan het bereik van de volledige DEM.
Dat betekent dat deze lagen niet overeenkomen, en dat zij niet direct kunnen worden vermenigvuldigd zonder die grootten en bereiken te homogeniseren door één of beide lagen te resamplen. Wij deden echter helemaal niets. QGIS handelt deze situatie af en resampled automatisch invoerlagen als dat nodig is. Het bereik van de uitvoer is het minimale bedekte bereik dat wordt berekend vanuit de invoerlagen, en de minimale celgrootte van hun celgrootten.
In dit geval (en in de meeste gevallen), produceert dit de gewenste resultaten, maar u zou zich altijd bewust moeten zijn van de aanvullende bewerkingen die plaatsvinden, omdat zij het resultaat zouden kunnen beïnvloeden. In gevallen wanneer dit gedrag niet gewenst is, zou van tevoren handmatig moeten worden geresampled. In latere hoofdstukken zullen we meer zien over het gedrag van algoritmen indien gebruikt met meerdere rasterlagen.
Laten we deze les afsluiten met een andere oefening in maskeren. We gaan de helling berekenen voor alle gebieden met een hoogte tussen 1000 en 1500 meter.
In dit geval hebben we geen laag die we als masker kunnen gebruiken, maar die kunnen we maken met behulp van de calculator.
Voer de calculator uit met behulp van de DEM als enige invoerlaag en de volgende formule
ifelse(abs(a-1250) < 250, 1, 0/0)
Zoals u kunt zien gebruiken we de calculator niet alleen om eenvoudige algebraïsche bewerkingen uit te voeren, maar ook om meer complexe berekeningen uit te voeren die voorwaardelijke zinnen in zich hebben, zoals die hierboven.
Het resultaat heeft een waarde van 1 binnen het bereik waarmee we willen werken, en Geen gegevens in cellen daarbuiten.
De waarde geen gegevens komt uit de uitdrukking 0/0. Omdat dat een onbepaalde waarde is, zal SAGA een waarde NaN (Not a Number) toevoegen, die in feite wordt behandeld als een waarde Geen gegevens. Met deze kleine truc kunt u een waarde Geen gegevens instellen, zonder dat u hoeft te weten wat de waarde geen gegevens van de cel is.
Nu hoeft u het nog slechts te vermenigvuldigen met de laag van de helling die is opgenomen in het project, en zult u het gewenste resultaat verkrijgen.
Dit kan allemaal worden gedaan in één enkele bewerking met de calculator. We laten dat als een oefening voor de lezer.