Dissolvere i confini della mappa in QGIS e Python |  di Himalaya Bir Shrestha |  Maggio 2024

 | Intelligenza-Artificiale

In un progetto QGIS vuoto, digitando world nello spazio delle coordinate in fondo alla pagina, potrei richiamare una mappa incorporata del mondo con i confini amministrativi di tutti i paesi come mostrato di seguito.

Ottenere una mappa del mondo in QGIS. Immagine dell'autore.

Successivamente, utilizzando la funzione di selezione, ho selezionato gli 8 paesi dell'Asia meridionale come evidenziato nella mappa sottostante. QGIS offre la possibilità di selezionare i paesi manualmente, per poligono, per raggio e selezionando o deselezionando individualmente i paesi con un clic del mouse.

Selezione dei paesi dalla mappa del mondo. Immagine dell'autore.

Ritaglio in QGIS

Ritagliare questi paesi dalla mappa del mondo è semplice in QGIS. È necessario andare su Vector nel menu-> Seleziona strumenti di geoprocessing -> Seleziona Clip. Nelle opzioni, ho selezionato la casella di controllo per le funzionalità selezionate solo nel livello di input e ho eseguito il processo.

Esecuzione dell'algoritmo di ritaglio. Immagine dell'autore.

L'azione di ritaglio è stata completata in soli 7,24 secondi e ho ottenuto un nuovo livello chiamato “Clipped”. Questo è rappresentato dal colore marrone nello screenshot qui sotto. Andando su Proprietà del layer, è possibile utilizzare diverse opzioni di colorazione in QGIS nell'opzione Simbologia.

Viene creato il nuovo livello ritagliato. Immagine dell'autore.

Dissolvere i confini in QGIS

Successivamente, volevo dissolvere i confini tra i paesi dell’Asia meridionale. Per questo, ho selezionato tutti i paesi dell'Asia meridionale. Sono andato al menu Vettore -> Seleziona Strumenti di geoprocessing ->Dissolvi. Analogamente al passaggio precedente, ho selezionato “Solo funzionalità selezionate” nel livello di input ed ho eseguito l'algoritmo che ha richiesto solo 0,08 secondi. È stato creato un nuovo livello chiamato “Dissolto” in cui i confini amministrativi tra i paesi sono stati sciolti e apparivano come una singola unità, come mostrato di seguito:

Viene creato il nuovo livello disciolto. Immagine dell'autore.

Visualizzando contemporaneamente sia il livello del mondo che il livello Disciolto appare come mostrato di seguito:

Strato disciolto e strato del mondo. Immagine dell'autore.

In questa sezione dimostrerò come è possibile ottenere lo stesso obiettivo in Python utilizzando il pacchetto geopandas.

Nel primo passaggio, ho letto il set di dati integrato della mappa del mondo all'interno del pacchetto geopandas. Contiene i dati vettoriali del mondo con i confini amministrativi di tutti i paesi. Questo è ottenuto da Terra naturale set di dati, che è gratuito.

import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
import numpy as np

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world.plot(color = "lightgrey")

Tracciare la mappa del mondo in geopanda. Immagine dell'autore.

Ritaglio con geopanda

Nel mio primissimo inviareHo dimostrato come sia possibile ritagliare una geometria poligonale personalizzata come maschera dal dataframe o dal livello geopanda originale. Tuttavia, per semplicità, ho semplicemente utilizzato le opzioni di filtro per ottenere i livelli richiesti per l'Asia e l'Asia meridionale.

asia = world(world.continent == "Asia")
asia.plot(color = "lightgrey")
Filtraggio del continente asiatico dal mondo. Immagine dell'autore.

Per filtrare la regione dell'Asia meridionale, ho utilizzato un elenco contenente il nome di ciascun paese come riferimento.

south_asia_countries = ("Afghanistan", "Bangladesh", "Bhutan", "India",
"Maldives", "Nepal", "Pakistan", "Sri Lanka")

south_asia = asia(asia.name.isin(south_asia_countries))

south_asia.plot()

Filtraggio della regione dell'Asia meridionale dall'Asia. Immagine dell'autore.

Sciogli i confini tra i paesi dell'Asia meridionale usando i geopanda

Per dissolvere i confini tra i paesi dell'Asia meridionale, ho utilizzato il file dissolve caratteristica nei geopanda. Ho passato None come argomento e ho specificato i parametri per applicare determinate funzioni aggregate, in cui la popolazione e il PIL nel dataframe dissolto risultante riassumerebbero la popolazione e il PIL in tutti i paesi dell'Asia meridionale. Devo ancora capire come la funzione aggregata possa essere applicata anche in QGIS.

south_asia_dissolved = south_asia.dissolve(by = None,
aggfunc = {"pop_est":"sum",
"gdp_md_est":"sum"})
south_asia_dissolved.plot(color = "lightgrey"
I confini amministrativi tra i paesi dell’Asia meridionale vengono sciolti. Immagine dell'autore.

Dissolvenza dei confini tra i paesi all’interno di un continente nel mondo

Utilizzando la stessa procedura di cui sopra, ho voluto dissolvere i confini tra i paesi all'interno di un continente e mostrare i diversi continenti distinti l'uno dall'altro in una mappa del mondo basata sul numero di paesi in ciascun continente.

A questo scopo, per prima cosa ho aggiunto una nuova colonna chiamata num_countries nel world geodataframe contenente 1 come valore. Poi ho sciolto la mappa del mondo usando il file continent colonna come riferimento.

world("num_countries") = 1

continents_dissolved = world.dissolve(by = "continent",
aggfunc = {"pop_est":"sum",
"gdp_md_est":"sum",
"num_countries":"count"}).reset_index()

continents_dissolved

Ho utilizzato la funzione aggregata per sommare la popolazione e il PIL di tutti i paesi del continente e contare il numero di paesi in ciascun continente. Il geodataframe risultante continents_dissolved guarda come mostrato:

Continenti risultanti_dissolved geopandas dataframe.

Vediamo che l’Asia ha la popolazione e il PIL più grandi di tutti i continenti. Allo stesso modo, vediamo che l’Africa ha il maggior numero di paesi (51) seguita da Asia (47), Europa (39), Nord America (18), Sud America (13) e Oceania (7). Anche l'Antartide e i Sette mari (oceano aperto) sono considerati continenti in questo set di dati.

Infine ho voluto tracciare la mappa del mondo evidenziando il numero dei paesi di ogni continente con l'aiuto di una mappa a colori. Ho ottenuto questo risultato utilizzando il seguente codice:

map = continents_dissolved.plot(column = "num_countries",
cmap = "Greens")

# Get the current axes
ax = plt.gca()

# Add a horizontal colorbar
cbar = plt.colorbar(map.get_children()(0),
ax=ax,
orientation='horizontal',
aspect = 30 #control the width of color bar. higher value= lower width.
)

# Set a label for the colorbar
cbar.set_label('Number of Countries')

plt.title("Continents of the world based on number of countries")

plt.savefig("Continents dissolved.jpeg",
bbox_inches = "tight",
dpi = 300)

# Show the plot
plt.show()

La mappa risultante appare come mostrato di seguito:

Mappa del mondo in cui il colore riflette il numero di paesi in ciascun continente. Immagine dell'autore.

Conclusione

In questo post ho descritto i modi per dissolvere i confini della mappa utilizzando QGIS e geopanda in Python. Nel processo, ho anche spiegato il processo di ritaglio e la possibilità di utilizzare la funzione aggregata dissolvendo i confini della mappa nei geopanda. Questi processi potrebbero essere molto utili per la manipolazione, l'elaborazione e la trasformazione di mappe geografiche sotto forma di set di dati vettoriali. Il codice e il file di progetto QGIS per questo post sono disponibili in questo GitHub deposito. Grazie per aver letto!

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *