
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.
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.
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.
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.
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:
Visualizzando contemporaneamente sia il livello del mondo che il livello Disciolto appare come mostrato di seguito:
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 npworld = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world.plot(color = "lightgrey")
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")
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()
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"
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") = 1continents_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:
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:
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