Multi Criteria Overlay Analyse (QGIS3)¶
Multi-criteria gewogen overlay-analyse is het proces van het toewijzen van gebieden op basis van een variëteit aan eigenschappen die de geselecteerde gebieden zouden moeten hebben. Hoewel dit een veel voorkomende bewerking in GIS is, wordt die het beste uitgevoerd in de rasterruimte met een op een raster gebaseerde benadering.
Notitie
Vector- vs Raster-overlays
You can do the overlay analysis on vector layers using geoprocessing tools such as buffer, dissolve, difference and intersection. This method is ideal if you wanted to find a binary suitable/non-suitable answer and you are working with a handful of layers. You can review our video tutorial on Locating A New Bicycle Parking Station using Multicriteria Overlay Analysis for a step-by-step guideon this approach.
Werken in de rasterruimte geeft u een rangschikking van de geschiktheid - niet alleen de meest geschikte plek. Het stelt u ook in staat elke aantal invoerlagen gemakkelijk te combineren en verschillende wegingen toe te wijzen aan elk criterium. Over het algemeen is dit de voorkeursbenadering voor geschiktheid.
Deze handleiding gaat door de typische werkstroom voor het uitvoeren van een geschikte plaats-analyse - converteren van bron vectorgegevens naar toepasselijke rasters, ze opnieuw te classificeren en rekenkundige bewerkingen uitvoeren.
Overzicht van de taak¶
In deze handleiding zullen we de geschikte gebieden voor ontwikkeling identificeren, dat zijn
Dichtbij wegen en
Niet in de buurt van watergebieden en
Niet in een beschermde regio.
De gegevens ophalen¶
We zullen vector gegevenslagen gebruiken van OpenStreetMap (OSM). OSM is een globale database van vrij beschikbare basis kaartgegevens. Geofabrik verschaft dagelijks bijgewerkte Shapefiles voor gegevenssets van OpenStreetMap.
We zullen de gegevenslagen van OSM gebruiken voor de staat Assam in India. Geofabrik India shapefiles werden gedownload, geclipt tot de staatsgrenzen en verpakt in één enkel bestand voor GeoPackage. U kunt een kopie van het Geopackage downloaden vanaf de link hieronder:
Gegevensbron: [GEOFABRIK]
Procedure¶
Blader naar het gedownloade bestand
assam.gpkg
in QGIS Browser. Vergroot het en sleep elk van de 5 individuele gegevenslagen naar het kaartvenster. U zult de lagenboundary
,roads
,protected_regions
,water_polygons
enwater_polylines
zien geladen in het paneel Lagen.
De eerste stap in de overlay-analyse, is om elke gegevenslaag te converteren naar een raster. Een belangrijke overweging is dat alle rasters hetzelfde bereik moeten hebben. We zullen de laag
boundary
gebruiken als het bereik voor alle rasters. Ga naar . Zoek naar en lokaliseer het algoritme . Dubbelklik er op om het te starten.
In het dialoogvenster Rasteriseren (vector naar raster), selecteer
roads
als de Invoerlaag. We willen een uitvoerraster maken met een pixelwaarde van 1 waar een weg is en 0 waar geen wegen zijn. Voer1
in als de Een vaste waarde om te branden. De invoerlagen zijn in een geprojecteerd CRS met meters als de eenheid. SelecteerEenheden voor geoverwijzingen
als de Eenheden grootte uitvoerraster. We zullen de resolutie van het uitvoerraster instellen op 15 meters. Selecteer15
voor zowel Breedte/Horizontale resolutie als Hoogte/Verticale resolutie. Klik vervolgens op de knop … naast Bereik uitvoer en selecteerboundary
voor Bereik gebruiken van.
Scroll verder naar beneden en klik op de pijlknop in Wijs een specifieke waarde Geen data toe aan de uitvoerbanden.
Dat veld zou nu moeten zijn ingesteld op
Niet bepaald
. Dit is belangrijk omdat wanneer rasterberekeningen (die we later zullen gebruiken) een pixel met de waarde Geen data tegenkomt, het de uitvoer ook op Geen data instelt, wat resulteert in verkeerde uitvoer.
Scroll naar beneden naar de Geavanceerde parameters en selecteer het profiel
Hoge compressie
om de compressie toe te passen. Dit zal het gecomprimeerde rasterbestand kleiner maken na het uitvoeren van het gereedschap. Toepassen van compressie zonder verlies wordt enorm aanbevolen bij het werken met rastergegevens.
Stel het uitvoerraster Gerasteriseerd in als
raster_roads.tif
en klik op Uitvoeren.
Als Processing eenmaal is voltooid zult u een nieuwe laag raster_roads zien geladen in het paneel Lagen. De standaard opmaak zal pixels met wegen weergeven als wit en andere als zwart. We willen ook nog 4 andere vectorlagen converteren naar rasters. In plaats van het algoritme Rasteriseren keer voor keer uit te voeren, kunnen we de ingebouwde functionaliteit Batch verwerken gebruiken om ze allemaal in één keer te converteren. Bekijk de handleiding Massa verwerken met behulp van Framework Processing (QGIS 3) om meer te leren over Batch verwerken. Klik met rechts op het algoritme
Rasteriseren (vector naar raster)
en selecteer Uitvoeren als een Batch-proces.
Klik, in het dialoogvenster Batch-processing, op de knop … op de eerste regel van de kolom Invoerlaag. Selecteer de lagen
boundary
,protected_regions
,water_polygons
enwater_polylines
en klik op OK.
Notitie
Deze optie van Geavanceerde parameters is niet beschikbaar als het algoritme wordt uitgevoerd in modus Batch. U zult de stappen hierboven moeten herhalen voor alle lagen en de stappen 8 tot en met 12 overslaan voordat u compressie toepast op alle uitvoer Gerasteriseerd.
Vul de parameters in met dezelfde waarden als die we gebruikten voor de laag roads. Gebruik, na het vullen van de eerste regel van de parameter, de knop
om dezelfde waarde voor alle lagen toe te voegen.
In de laatste kolom Gerasteriseerd, klik op de knop … op de eerste regel. Selecteer
Vullen met parameterwaarden
als de Modus Automatisch vullen enInvoerlaag
als de Parameter om te gebruiken. Klik op OK.
Blader naar een map op uw computer en noem de laag
raster_
. De interface voor Batch verwerken zal de naam automatisch compleet maken met de naam van de laag en alle regels vullen. Zorg er voor dat het vak Lagen laden bij voltooien is geselecteerd en klik op OK.
Als de verwerking eenmaal is voltooid zult u 4 nieuwe rasterlagen hebben geladen in het paneel Lagen. U zult hebben opgemerkt dat we nu 2 watergerelateerde lagen hebben - die beide water weergeven. We kunnen ze samenvoegen om één enkele laag te hebben die watergebieden in de regio weergeeft. Zoek naar en lokaliseer het algoritme in de Toolbox van Processing. Dubbelklik er op om het te starten.
Selecteer de lagen
raster_water_polygons
enraster_water_polylines
met de knop … als Invoerlagen. Voer de volgende expressie in met de knop ε. Laat alle andere opties als standaard staan en sla de uitvoerlaag op met de naamraster_water_merged.tif
en klik op Uitvoeren.
"raster_water_polygons@1" + "raster_water_polylines@1"![]()
Het resulterende samengevoegde raster zal pixels hebben met de waarde 1 voor alle gebieden met water. Maar het zal u opvallen dat er sommige regio’s zijn waar zowel een waterpolygoon als een waterpolylijn was. Die gebieden zullen pixels hebben met de waarde 2 - wat niet juist is. We kunnen dit repareren met een eenvoudige expressie. Open het algoritme
opnieuw.
Selecteer de laag
raster_water_merged
met de knop … als Invoerlaag. Voer de volgende expressie in met de knop ε. Laat alle andere opties als standaard staan en sla de uitvoerlaag op met de naamraster_water.tif
en klik op Uitvoeren.
"raster_water_merged@1" > 0![]()
De resulterende laag
raster_water
heeft nu pixels met alleen de waarden 0 en 1.
Nu we lagen hebben die pixels voor wegen en water weergeven, kunnen we rasters voor nabijheid maken. Deze zijn ook wel bekend als Euclidische afstanden - waar elke pixel in het uitvoerraster de afstand naar de dichtstbijzijnde pixel in de invoerlaag weergeeft. Dit resulterende raster kan dan worden gebruikt om geschikte gebieden te bepalen die binnen een bepaalde afstand vanaf de invoer liggen. Zoek naar en lokaliseer het algoritme
. Dubbelklik er op om het te starten.
Selecteer, in het dialoogvenster Proximity (raster afstand),
raster_roads
als de Invoerlaag. KiesCoördinaten met geoverwijzingen
als de Afstandseenheden. Omdat de invoerlagen in een geprojecteerd CRS staan met meters als de eenheden, voer5000
(5 kilometers) in als de De maximale afstand die moet worden gegenereerd. Zorg er voor dat de waarde voor Waarde Geen gegevens om te gebruiken voor het doel-nabijheidsraster isNiet bepaald
.
U kunt de Geavanceerde parameters vergroten en het profiel
Hoge compressie
selecteren om de compressie toe te passen. Noem het uitvoerbestandroads_proximity.tif
en klik op Uitvoeren.
Notitie
Het kan ongeveer 15 minuten duren om dit proces uit te voeren. Het is een computertechnisch intensief algoritme dat de afstand moet berekenen voor elke pixel van het invoerraster en onze invoer bevat meer dan 1 biljoen pixels.
Als de verwerking is voltooid zal een nieuwe laag
roads_proximity
zijn toegevoegd aan het paneel Lagen. Laten we, om het beter te visualiseren, de standaard opmaak wijzigen. Klik op de knop Paneel Laag opmaken openen in het paneel Lagen. Wijzig de waarde Max onder Kleurovergang naar5000
.
Herhaal het algoritme Proximity (raster afstand) voor de laag
raster_water
met dezelfde parameters en noem de uitvoerwater_proximity.tif
.
Als de verwerking is voltooid kunt u dezelfde opmaak als eerder toepassen om de resultaten beter te visualiseren. Als u willekeurig in het resulterende raster klikt, zult u zien dat het een continuüm is van waarden tussen 0 en 5000. We moeten, om dit raster te kunnen gebruiken in de overlay-analyse, het eerst opnieuw classificeren om afzonderlijke waarden te maken. Open het algoritme
opnieuw.
We willen een hogere score geven aan pixels die dichterbij wegen liggen. Dus laten we het volgens schema gebruiken.
0-1000m –> 100
1000-5000m –> 50
>5000m –> 10
Select
roads_proximity
layer using … button as an Input Layer. Enter the following expression hat applies the above criteria on the input. Keep all the other options as default and save the output layer with the nameroads_reclass.tif
and click Run.100*("roads_proximity@1"<=1000) + 50*("roads_proximity@1">1000)*("roads_proximity@1"<=5000) + 10*("roads_proximity@1">5000)
Als het proces voor opnieuw classificeren is voltooid, zal een nieuwe laag
roads_reclass
worden toegevoegd aan het paneel Lagen. Deze laag heeft slechts 3 verschillende waarden, 10, 50 en 100 die de relatieve geschiktheid van de pixels aangeven ten opzichte van de afstand vanaf wegen. Open het algoritme opnieuw.
Herhaal het proces voor opnieuw classificeren voor de laag
water_proximity
. Hier zal het schema zijn omgedraaid, waarbij pixels die verder van water af liggen een hogere score zullen hebben.
0-1000m –> 10
1000 -5000m —> 50
>5000m –> 100
Select
water_proximity
layer using … button as an Input Layer. Enter the following expression hat applies the above criteria on the input. Keep all the other options as default and save the output layer with the namewater_reclass.tif
and click Run.100*("water_proximity@1">5000) + 50*("water_proximity@1">1000)*("water_proximity@1"<=5000) + 10*("water_proximity@1"<1000)
Nu zijn we klaar om de uiteindelijke overlay-analyse uit te voeren. Weet nog dat onze criteria voor het bepalen van de geschiktheid de volgende waren - dicht bij wegen, weg van het water en niet in een beschermde regio. Open
. Selecteer de lagenroads_reclass
,water_reclass
,raster_protected_regions
enraster_boundary
met de knop … als Invoerlagen. Gebruik de knop ε om de volgende expressie in te voeren die deze criteria toepast. Onthoud dat we aan het einde het resultaat vermenigvuldigen metraster_boundary@1
om pixelwaarden buiten de staatsgrenzen te negeren. Laat alle andere opties als standaard staan. Noem de uitvoeroverlay.tif
en klik op Uitvoeren.
("roads_reclass@1" + "water_reclass@1")*("raster_protected_regions@1" != 1 )*"raster_boundary@1"![]()
Notitie
In dit voorbeeld geven we een gelijk gewicht aan zowel de nabijheid van wegen als van water. In een scenario voor de echte wereld zou u meerdere criteria met een verschillende mate van belangrijkheid kunnen hebben. U kunt dat simuleren door de rasters met het toepasselijke gewicht in de bovenstaande expressie te vermenigvuldigen. Bijvoorbeeld als nabijheid van wegen twee keer zo belangrijk is als nabijheid van water, kunt u het raster roads_reclass
vermenigvuldigen met 2
in de bovenstaande expressie.
Als de verwerking is voltooid, zal de resulterende raster
overlay
worden toegevoegd aan het paneel Lagen. De pixelwaarden in dit raster liggen tussen 0 en 200 - waar 0 het minst geschikte en 200 het meest geschikte gebied voor ontwikkeling is. Klik op de knop Paneel Laag opmaken openen in het paneel Lagen.
Selecteer de renderer
enkelbands_pseudocolor
en het kleurverloopSpectral
. Klik op Classificeren om het kleurverloop toe te passen op het raster.
Klik op de standaard labelwaarden naast elke kleur en voer een toepasselijk label in. De labels zullen ook als Legenda verschijnen onder de laag
overlay
.
Rasterlagen zijn rechthoekige rasters. We willen pixels buiten de grenzen van de staat verbergen. Een gemakkelijke manier om dat te bereiken is het toepassen van een
Geïnverteerde polygonen
gerenderd op de vector boundary-laag. Scroll naar beneden in het paneel Lagen en lokaliseer de laagboundary
. SelecteerGeïnverteerde polygonen
als de renderer en laat de andere opties standaard.
Hij moet bovenaan de inhoudsopgave staan om het effect van de renderer weer te geven. Klik met rechts op de laag
boundary
en selecteer Verplaats naar bovenste.
Selecteer de laag en het kaartvenster zou moeten bijwerken om het raster
overlay
weer te geven, geclipt tot de laagboundary
. Dit is de uiteindelijk uitvoer die gebieden weergeeft binnen de staat die geschikt zijn voor ontwikkeling.
If you want to give feedback or share your experience with this tutorial, please comment below. (requires GitHub account)