Viktigt

Översättning är en gemenskapsinsats du kan gå med i. Den här sidan är för närvarande översatt till 100.00%.

6.2. Lektion Vektoranalys

Vektordata kan också analyseras för att avslöja hur olika funktioner interagerar med varandra i rymden. Det finns många olika analysrelaterade funktioner, så vi kommer inte att gå igenom dem alla. Istället kommer vi att ställa en fråga och försöka lösa den med hjälp av de verktyg som QGIS tillhandahåller.

Målet för den här lektionen: Att ställa en fråga och lösa den med hjälp av analysverktyg.

6.2.1. ★☆☆ GIS-processen

Innan vi börjar kan det vara bra att ge en kort översikt över en process som kan användas för att lösa ett problem. Sättet att göra det på är:

  1. Redogör för problemet

  2. Hämta data

  3. Analysera problemet

  4. Presentera resultaten

6.2.2. ★☆☆ Problemet

Låt oss börja processen med att bestämma oss för ett problem att lösa. Du är till exempel en fastighetsmäklare och du letar efter en bostadsfastighet i Swellendam för kunder som har följande kriterier:

  1. Det måste vara i Swellendam

  2. Den måste ligga inom rimligt köravstånd från en skola (t.ex. 1 km)

  3. Den måste ha en storlek på mer än 100 m i kvadrat

  4. Närmare än 50 meter till en huvudväg

  5. Närmare än 500 meter till en restaurang

6.2.3. ★☆☆ Data

För att besvara dessa frågor behöver vi följande uppgifter:

  1. Bostadsfastigheterna (byggnaderna) i området

  2. Vägarna i och runt staden

  3. Läget till skolor och restauranger

  4. Byggnadernas storlek

Dessa data finns tillgängliga via OSM, och du bör upptäcka att den dataset som du har använt i hela den här handboken också kan användas för den här lektionen.

Om du vill hämta data från ett annat område kan du gå till Introduktionskapitlet för att läsa om hur du gör det.

Observera

Även om OSM-nedladdningar har konsekventa datafält varierar täckningen och detaljerna. Om du upptäcker att din valda region inte innehåller information om till exempel restauranger, kan du behöva välja en annan region.

6.2.4. ★☆☆ Följ med: Starta ett projekt och hämta data

Först måste vi ladda de data vi ska arbeta med.

  1. Starta ett nytt QGIS-projekt

  2. Om du vill kan du lägga till en bakgrundskarta. Öppna Browser och ladda OSM bakgrundskarta från XYZ Tiles menyn.

    ../../../_images/osm_swellendam.png
  3. I databasen training_data.gpkg Geopackage hittar du de flesta dataset som vi kommer att använda i det här kapitlet:

    1. byggnader

    2. ”vägar

    3. restauranger

    4. skolor

    Ladda dem, och även landuse.sqlite.

  4. Zooma till skiktets omfattning för att se Swellendam, Sydafrika

    Innan vi fortsätter filtrerar vi skiktet roads, så att vi bara har vissa specifika vägtyper att arbeta med.

    Vissa vägar i OSM-dataset listas som ”oklassificerade”, ”spår”, ”stig” och ”fotväg”. Vi vill utesluta dessa från vårt dataset och fokusera på de andra vägtyperna, som är mer lämpliga för den här övningen.

    Dessutom kanske OSM-data inte uppdateras överallt, och vi kommer också att utesluta NULL-värden.

  5. Högerklicka på lagret roads och välj Filter….

  6. I dialogrutan som dyker upp filtrerar vi dessa funktioner med följande uttryck:

    "highway" NOT IN ('footway', 'path', 'unclassified', 'track') AND "highway" IS NOT NULL
    

    Sammankopplingen av de två operatörerna NOT och IN utesluter alla funktioner som har dessa attributvärden i fältet highway.

    IS NOT NULL kombinerat med operatorn AND utesluter vägar som saknar värde i fältet highway.

    Notera ikonen indicatorFilter bredvid skiktet roads. Det hjälper dig att komma ihåg att det här lagret har ett filter aktiverat, så vissa funktioner kanske inte är tillgängliga i projektet.

Kartan med alla data bör se ut som följande:

../../../_images/osm_swellendam_2.png

6.2.5. ★☆☆ Prova själv: Konvertera lager’ CRS

Eftersom vi ska mäta avstånd inom våra lager måste vi ändra lagrens CRS. För att göra detta måste vi välja varje lager i tur och ordning, spara lagret till ett nytt lager med vår nya projektion och sedan importera det nya lagret till vår karta.

Du har många olika alternativ, t.ex. kan du exportera varje lager som en dataset i ESRI Shapefile-format, du kan lägga till lagren i en befintlig GeoPackage-fil, eller så kan du skapa en ny GeoPackage-fil och fylla den med de nya reprojicerade lagren. Vi kommer att visa det sista alternativet, så att :filen:`training_data.gpkg` förblir ren. Känn dig fri att välja det bästa arbetsflödet för dig själv.

Observera

I det här exemplet använder vi WGS 84 / UTM-zon 34S CRS, men du bör använda en UTM CRS som är mer lämplig för din region.

  1. Högerklicka på skiktet roads i panelen :guilabel:`Layers

  2. Klicka på Export –> Spara funktioner som…

  3. I dialogrutan Save Vector Layer As väljer du GeoPackage som Format

  4. Klicka på för File name och döp det nya GeoPackage till vector_analysis

  5. Ändra Layer name till roads_34S

  6. Ändra CRS till WGS 84 / UTM-zon 34S

  7. Klicka på OK:

    ../../../_images/save_roads_34S.png

    Detta kommer att skapa den nya GeoPackage-databasen och lägga till skiktet roads_34S.

  8. Upprepa denna process för varje skikt och skapa ett nytt skikt i GeoPackage-filen vector_analysis.gpkg med _34S tillagt till det ursprungliga namnet.

    På macOS trycker du på knappen Replace i dialogrutan som dyker upp för att låta QGIS skriva över det befintliga GeoPackage.

    Observera

    När du väljer att spara ett lager till ett befintligt GeoPackage kommer QGIS att lägga till lagret bredvid de befintliga lagren i GeoPackage, om inget lager med samma namn redan finns.

  9. Ta bort alla gamla lager från projektet

  10. När du har slutfört processen för alla lager högerklickar du på valfritt lager och klickar på Zoom to layer extent för att fokusera kartan till det område du är intresserad av.

Nu när vi har konverterat OSM-data till en UTM-projektion kan vi påbörja våra beräkningar.

6.2.6. ★☆☆ Följ med: Analysera problemet: Avstånd från skolor och vägar

Med QGIS kan du beräkna avstånd mellan valfria vektorobjekt.

  1. Se till att endast lagren roads_34S och buildings_34S är synliga (för att förenkla kartan medan du arbetar)

  2. Klicka på Processing ► Toolbox för att öppna den analytiska kärnan i QGIS. I princip finns alla algoritmer (för vektor- och rasteranalys) tillgängliga i den här verktygslådan.

  3. Vi börjar med att beräkna området runt roads_34S genom att använda Buffer algoritmen. Du kan hitta den i Vector Geometry-gruppen.

    ../../../_images/processing_buffer_1.png

    Eller så kan du skriva buffer i sökmenyn i den övre delen av verktygslådan:

    ../../../_images/processing_buffer_2.png
  4. Dubbelklicka på den för att öppna algoritmdialogen

  5. Välj roads_34S som Input layer, ställ in Distance till 50 och använd standardvärdena för resten av parametrarna.

    ../../../_images/vector_buffer_setup.png
  6. Standardvärdet för Distance är i meter eftersom vår indatauppsättning är i ett projicerat koordinatsystem som använder meter som grundläggande måttenhet. Du kan använda kombinationsrutan för att välja andra projicerade enheter som kilometer, yards etc.

    Observera

    Om du försöker skapa en buffert på ett lager med ett geografiskt koordinatsystem kommer Processing att varna dig och föreslå att du omprojicerar lagret till ett metriskt koordinatsystem.

  7. Som standard skapar Processing tillfälliga lager och lägger till dem i panelen Layers. Du kan också lägga till resultatet i GeoPackage-databasen genom att:

    1. Klicka på knappen och välj Save to GeoPackage…

    2. Namnge det nya lagret roads_buffer_50m

    3. Spara den i filen vector_analysis.gpkg

    ../../../_images/buffer_saving.png
  8. Klicka på Run, och stäng sedan Buffer-dialogrutan

    Nu kommer din karta att se ut ungefär så här:

    ../../../_images/roads_buffer_result.png

Om det nya skiktet ligger högst upp i listan Layers kommer det förmodligen att skymma en stor del av kartan, men det ger dig alla områden i din region som ligger inom 50 m från en väg.

Lägg märke till att det finns distinkta områden inom din buffert, som motsvarar varje enskild väg. För att bli av med detta problem:

  1. Avmarkera lagret roads_buffer_50m och återskapa bufferten med Dissolve results aktiverat.

    ../../../_images/dissolve_buffer_setup.png
  2. Spara utdata som roads_buffer_50m_dissolved

  3. Klicka på Run och stäng dialogrutan Buffer

När du har lagt till lagret i panelen Layers kommer det att se ut så här:

../../../_images/dissolve_buffer_results.png

Nu finns det inga onödiga underavdelningar.

Observera

Den Korta hjälpen på höger sida av dialogrutan förklarar hur algoritmen fungerar. Om du behöver mer information kan du klicka på knappen Help längst ned för att öppna en mer detaljerad guide till algoritmen.

6.2.7. ★☆☆ Prova själv: Avstånd från skolor

Använd samma metod som ovan och skapa en buffert för dina skolor.

Det ska vara 1 km i radie. Spara det nya lagret i filen vector_analysis.gpkg som schools_buffer_1km_dissolved.

6.2.8. ★☆☆ Följ med: Överlappande områden

Nu har vi identifierat områden där vägen ligger mindre än 50 meter bort och områden där det finns en skola inom 1 km (direktlinje, inte via väg). Men vi vill naturligtvis bara ha de områden där båda dessa kriterier är uppfyllda. För att göra det måste vi använda verktyget Intersect. Du hittar det i Vector Overlay-gruppen i Processing Toolbox.

  1. Använd de två buffertskikten som Input layer och Overlay layer, välj vector_analysis.gpkg GeoPackage i Intersection med Layer name road_school_buffers_intersect. Lämna resten som föreslagits (standard).

    ../../../_images/school_roads_intersect.png
  2. Klicka på Run.

    I bilden nedan är de blå områdena där båda avståndskriterierna uppfylls.

    ../../../_images/intersect_result.png
  3. Du kan ta bort de två buffertlagren och bara behålla det som visar var de överlappar varandra, eftersom det är det vi egentligen ville veta från början:

    ../../../_images/final_intersect_result.png

6.2.9. ★☆☆ Följ med: Extrahera byggnaderna

Nu har du det område som byggnaderna måste överlappa. Därefter vill du extrahera byggnaderna i det området.

  1. Leta efter menyalternativet Vector Selection ► Extract by location i Processing Toolbox

  2. Välj buildings_34S i Extrahera funktioner från. Kontrollera intersect i Where the features (geometric predicate), välj buffertens intersection-lager i By comparing to the features from. Spara till vector_analysis.gpkg, och namnge lagret well_located_houses.

    ../../../_images/location_select_dialog.png
  3. Klicka på Run och stäng dialogrutan

  4. Du kommer förmodligen att upptäcka att inte mycket verkar ha förändrats. Om så är fallet, flytta lagret well_located_houses till toppen av lagerlistan och zooma sedan in.

    ../../../_images/select_zoom_result.png

    De röda byggnaderna är de som uppfyller våra kriterier, medan de gröna byggnaderna är de som inte gör det.

  5. Nu har du två separata lager och kan ta bort buildings_34S från lagerlistan.

6.2.10. ★★☆ Prova själv: Filtrera våra byggnader ytterligare

Vi har nu ett lager som visar oss alla byggnader inom 1 km från en skola och inom 50 m från en väg. Vi måste nu minska urvalet så att det bara visar byggnader som ligger inom 500 m från en restaurang.

Med hjälp av de processer som beskrivs ovan skapar du ett nytt skikt som heter houses_restaurants_500m som ytterligare filtrerar ditt well_located_houses-skikt så att det bara visar de hus som ligger inom 500 meter från en restaurang.

6.2.11. ★☆☆ Följ med: Välj byggnader av rätt storlek

För att se vilka byggnader som är av rätt storlek (mer än 100 kvadratmeter) måste vi beräkna deras storlek.

  1. Välj skiktet houses_restaurants_500m och öppna Field Calculator genom att klicka på knappen calculateField Open Field Calculator i huvudverktygsfältet eller i attributtabellfönstret

  2. Välj Create a new field, sätt Output field name till AREA, välj Decimal number (real)` som Output field type, och välj $area från Geometry-gruppen.

    ../../../_images/buildings_area_calculator.png

    Det nya fältet AREA kommer att innehålla ytan för varje byggnad i kvadratmeter.

  3. Klicka på OK. Fältet AREA har lagts till i slutet av attributtabellen.

  4. Klicka på knappen toggleEditing Toggle Editing för att avsluta redigeringen och spara dina ändringar när du uppmanas till det.

  5. På fliken Source i skiktets egenskaper ställer du in Provider Feature Filter"AREA >= 100.

    ../../../_images/buildings_area_query.png
  6. Klicka på OK.

Din karta ska nu bara visa dig de byggnader som uppfyller våra startkriterier och som är mer än 100 kvadratmeter stora.

6.2.12. ★☆☆ Prova själv:

Spara din lösning som ett nytt lager med hjälp av den metod som du lärde dig ovan. Filen ska sparas i samma GeoPackage-databas med namnet solution.

6.2.13. Sammanfattningsvis

Genom att använda GIS-problemlösningsmetoden tillsammans med QGIS vektoranalysverktyg kunde du snabbt och enkelt lösa ett problem med flera kriterier.

6.2.14. Vad händer härnäst?

I nästa lektion tittar vi på hur man beräknar det kortaste avståndet längs vägar från en punkt till en annan.