En un proyecto QGIS vacío, escribiendo world
en el espacio de coordenadas en la parte inferior de la página, podría llamar a un mapa incorporado del mundo con los límites administrativos de todos los países como se muestra a continuación.
A continuación, utilizando la función de selección, seleccioné los 8 países del sur de Asia como se resaltan en el mapa a continuación. QGIS ofrece la opción de seleccionar países a mano, por polígono, por radio y seleccionando o deseleccionando países individualmente con un clic del mouse.
Recorte en QGIS
Eliminar estos países del mapa mundial es sencillo en QGIS. Es necesario ir a Vector en el menú-> Seleccionar herramientas de geoprocesamiento -> Seleccionar clip. En las opciones, marqué la casilla de verificación para las entidades seleccionadas solo en la capa de entrada y ejecuté el proceso.
La acción de recorte se completó en solo 7,24 segundos y obtuve una nueva capa llamada «Recortada». Esto se muestra con el color marrón en la siguiente captura de pantalla. Al ir a Propiedades de la capa, se pueden usar diferentes opciones de coloración en QGIS en la opción Simbología.
Disolviendo límites en QGIS
A continuación, quería disolver las fronteras entre los países del sur de Asia. Para ello, seleccioné todos los países del sur de Asia. Fui al menú Vector -> Seleccionar herramientas de geoprocesamiento -> Disolver. De manera similar al paso anterior, seleccioné «Solo destacados seleccionados» en la capa de entrada y ejecuté el algoritmo que tomó solo 0,08 segundos. Se creó una nueva capa llamada «Disuelta» donde los límites administrativos entre países se disolvieron y aparecieron como una sola unidad como se muestra a continuación:
La visualización de la capa mundial y la capa disuelta al mismo tiempo se ve como se muestra a continuación:
En esta sección, voy a demostrar cómo puedo lograr el mismo objetivo en Python usando el paquete geopandas.
En el primer paso, leí el conjunto de datos incorporado del mapa mundial dentro del paquete geopandas. Contiene los datos vectoriales del mundo con los límites administrativos de todos los países. Esto se obtiene de la Tierra natural conjunto de datos, que es de uso 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")
Recortando con geopandas
En mi primera correo, demostré cómo es posible recortar una geometría de polígono personalizada como una máscara del marco de datos o capa de geopandas original. Sin embargo, para simplificar, utilicé las opciones de filtro para obtener las capas necesarias para Asia y el sur de Asia.
asia = world[world.continent == "Asia"]
asia.plot(color = "lightgrey")
Para filtrar la región del sur de Asia, utilicé una lista que contenía el nombre de cada país como referencia.
south_asia_countries = ["Afghanistan", "Bangladesh", "Bhutan", "India",
"Maldives", "Nepal", "Pakistan", "Sri Lanka"]south_asia = asia[asia.name.isin(south_asia_countries)]
south_asia.plot()
Disolver fronteras entre países del sur de Asia usando geopandas
Para disolver las fronteras entre los países del sur de Asia, utilicé el dissolve
característica en geopandas. Pasé Ninguno como argumento y especifiqué parámetros para aplicar ciertas funciones agregadas, en las que la población y el PIB en el marco de datos disuelto resultante resumirían la población y el PIB en todos los países del sur de Asia. Todavía tengo que descubrir cómo se puede aplicar también la función agregada en QGIS.
south_asia_dissolved = south_asia.dissolve(by = None,
aggfunc = {"pop_est":"sum",
"gdp_md_est":"sum"})
south_asia_dissolved.plot(color = "lightgrey"
Disolver las fronteras entre países dentro de un continente en el mundo.
Utilizando el mismo procedimiento anterior, quería disolver los límites entre países dentro de un continente y mostrar diferentes continentes distintos entre sí en un mapa mundial basado en la cantidad de países en cada continente.
Para ello, primero agregué una nueva columna llamada num_countries
en el world
geodataframe que contiene 1 como valor. Luego disolví el mapa mundial usando el continent
columna como referencia.
world["num_countries"] = 1continents_dissolved = world.dissolve(by = "continent",
aggfunc = {"pop_est":"sum",
"gdp_md_est":"sum",
"num_countries":"count"}).reset_index()
continents_dissolved
Utilicé la función agregada para resumir la población y el PIB de todos los países del continente y contar el número de países de cada continente. El geodataframe resultante continents_dissolved
mira como se muestra:
Vemos que Asia tiene la mayor población y PIB de todos los continentes. De manera similar, vemos que África tiene la mayor cantidad de países (51), seguida de Asia (47), Europa (39), América del Norte (18), América del Sur (13) y Oceanía (7). La Antártida y los Siete mares (océano abierto) también se consideran continentes en este conjunto de datos.
Finalmente, quería trazar el mapa mundial resaltando el número de países de cada continente con la ayuda de un mapa de colores. Logré esto usando el siguiente código:
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()
El mapa resultante aparece como se muestra a continuación:
Conclusión
En esta publicación, describí formas de disolver los límites de un mapa usando QGIS y geopandas en Python. En el proceso, también expliqué el proceso de recorte y la posibilidad de utilizar la función agregada mientras disolvía los límites del mapa en geopandas. Estos procesos podrían resultar muy útiles para la manipulación, procesamiento y transformación de mapas geográficos en forma de conjuntos de datos vectoriales. El código y el archivo del proyecto QGIS para esta publicación están disponibles en este GitHub repositorio. ¡Gracias por leer!