1u99 6fm Osycbssk67r7 Q.png

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.

Obtener un mapa mundial en QGIS. Imagen del autor.

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.

Seleccionar países del mapa mundial. Imagen del autor.

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.

Ejecutando algoritmo de recorte. Imagen del autor.

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.

Se crea una nueva capa recortada. Imagen del autor.

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:

Se crea una nueva capa disuelta. Imagen del autor.

La visualización de la capa mundial y la capa disuelta al mismo tiempo se ve como se muestra a continuación:

Capa disuelta y capa mundial. Imagen del autor.

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 np

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

Trazado del mapa mundial en geopandas. Imagen del autor.

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")
Filtrando el continente asiático del mundo. Imagen del autor.

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()

Filtrado de la región del sur de Asia desde Asia. Imagen del autor.

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"
Se disuelven las fronteras administrativas entre países del sur de Asia. Imagen del autor.

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"] = 1

continents_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:

Marco de datos de geopandas disueltos continentes resultante.

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:

Mapa del mundo donde el color refleja la cantidad de países de cada continente. Imagen del autor.

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!