Logotipo de Zephyrnet

Construyendo un mapa topográfico de Nepal usando Python

Fecha:

Introducción

¿Alguna vez se preguntó cómo la topografía de su país influye en el desarrollo económico y político? Los mapas topográficos (mapas de la superficie terrestre que usan líneas de contorno para la visualización) pueden ayudar a responder estas preguntas. Usaremos Python para crear un mapa topográfico de Nepal, un país con un entorno topográfico interesante. Aprenderá cómo leer datos geoespaciales que describen la topografía de un país, cómo interpretar estos datos y cómo visualizarlos. El mapa resultante se puede combinar con otros datos de interés a niveles subnacionales muy desagregados para comprender cómo la topografía de un país influye en su desarrollo económico y/o político. ¡Esta publicación de blog le enseñará cómo generar una herramienta realmente interesante que pueda informar las políticas y el desarrollo del sector privado!

OBJETIVOS DE APRENDIZAJE

  • Obtenga competencia en técnicas de análisis de datos para datos de elevación digital.
  • Aprenda a usar datos geoespaciales y herramientas de análisis relacionadas en Python.
  • Adquirir conocimientos de técnicas cartográficas.
  • Desarrollar habilidades en la visualización efectiva de datos para la comunicación.
  • Comprender la importancia de la elevación para la desigualdad y la pobreza.

Este artículo fue publicado como parte del Blogatón de ciencia de datos.

Tabla de contenidos.

¿Qué son los mapas topográficos?

Los mapas topográficos son mapas de la superficie terrestre que utilizan líneas de contorno para su visualización. Los mapas topográficos son una herramienta valiosa para navegar por terrenos desconocidos y sirven como insumos para la planificación urbana y la gestión de desastres. A menudo se utilizan para comprender el contexto espacial de políticas o proyectos del sector privado en torno al desarrollo de infraestructura, para identificar áreas vulnerables a desastres naturales o con acceso limitado a servicios esenciales, como educación, atención médica e infraestructura, o para la gestión de recursos naturales. En última instancia, estos mapas pueden servir como insumo para la toma de decisiones basada en evidencia. En esta publicación de blog, usaremos Python para crear un mapa topográfico de Nepal, un país con un entorno topográfico realmente interesante.

Descripción de datos

Para generar nuestro mapa, nos basaremos en los datos publicados por el Servicio Geológico de los Estados Unidos (USGS). USGS es una agencia científica del gobierno federal de los Estados Unidos que genera datos e investigaciones sobre recursos naturales, geología, geografía, recursos hídricos y peligros naturales. para llegar a su página de datos, escriba "Datos de USGS" en Google o haga clic en el enlace que lo dirige a su Earth Explorer. Earth Explorer es una herramienta en línea y un portal de datos que le permite buscar, acceder y descargar una amplia gama de datos de ciencias de la Tierra. Debe configurar una cuenta e iniciar sesión para utilizar completamente los datos.

Descarga de datos

Esta publicación de blog utilizará Nepal como ejemplo debido a sus características topográficas únicas. Nepal tiene una de las topografías más desafiantes e interesantes del mundo. 8 de las 14 montañas por encima de los 8,000 m están en Nepal (Sendero de trekking Nepal), y el país se divide en tres regiones topográficas muy diferentes: las montañas, colinas y Terai (o llanuras) (DHS). Si bien estas características hacen que el país sea único e interesante, algunas investigaciones muestran que la topografía de Nepal dificulta conectar el país, brindar servicios esenciales a su población e imponer riesgos y barreras para un camino de desarrollo sostenible.

Para ello, filtraremos por Nepal en el Criterio de búsqueda, como se indica en la imagen de abajo. Una vez que seleccionamos Nepal, seleccionamos nuestro conjunto de datos de interés. Para hacerlo, haga clic en el botón Conjuntos de datos pestaña y elegir Elevación digital. Hay varias opciones para los datos de elevación digital, y aunque podría usar varios de estos conjuntos de datos, usaremos los datos de elevación de terreno de resolución múltiple global 2010 GMTED2010 datos. Estos datos proporcionan una cobertura global del terreno de la Tierra en múltiples resoluciones (que van desde 7.5 segundos de arco (aproximadamente 250 metros) a 30 segundos de arco (aproximadamente 1 kilómetro)). Se genera a partir de datos de teledetección aerotransportados y espaciales, que incluyen altimetría satelital, imágenes estereoscópicas y mapas topográficos.

Una vez que elija los datos, haga clic en el Resultados pestaña. Ahora puede descargar los datos haciendo clic en el símbolo con opciones de descarga También puede mostrar los datos a través de la huella icono. Descargamos los datos en su máxima resolución (7.5 segundos de arco). Es importante destacar que, para cubrir todo Nepal, necesitamos descargar dos mosaicos (partes) diferentes de los datos subyacentes y combinarlos más tarde. Verá que el conjunto de datos resultante está en un tif formato, que indica datos ráster.

Mapa topográfico | Pitón

Python proporciona varias herramientas para el análisis geoespacial. En esta publicación de blog, nos basamos en la rasterio biblioteca que permite leer y escribir datos raster geoespaciales (datos cuadriculados). Comencemos y leamos el primer mosaico (parte) de los datos que descargamos previamente en nuestro Jupyter Notebook:

#import relevant libraries (after installing them)
import rasterio
import matplotlib.pyplot as plt
import numpy as np #Read the data and show the shape of the dataset
file = rasterio.open(r'path10n060e_20101117_gmted_mea075.tif')
dataset = file.read()
print(dataset.shape)

Carguemos también el segundo mosaico y combinémoslos fusionándolos. Con este fin, seguimos las técnicas estándar de manipulación y lectura de datos ráster en Python de la siguiente manera:

#Upload second dataset and show the shape of the dataset
file2 = rasterio.open(r'path30n060e_20101117_gmted_mea075.tif')
dataset2 = file2.read()
print(dataset2.shape) #Combine both datasets
from rasterio.merge import merge
from rasterio.plot import show #Create empty list
src_files_to_mosaic = [] #Append the list with both files
src_files_to_mosaic.append(file)
src_files_to_mosaic.append(file2)
src_files_to_mosaic #Merge both files
mosaic, out_trans = merge(src_files_to_mosaic) # Copy Metadata
output_meta = file.meta.copy() #Update Metadata
output_meta.update( {"driver": "GTiff", "height": mosaic.shape[1], "width": mosaic.shape[2], "transform": out_trans, }
) #Write to destination
# Write the mosaic raster to disk
out_fp = r"pathNepal_Mosaic.tif" with rasterio.open(out_fp, "w", **output_meta) as dest: dest.write(mosaic) #Open the combined raster data
file_mosaic = rasterio.open(out_fp) #Read the data
dataset_mosaic = file_mosaic.read()
print(file_mosaic.shape) #Show the data
plt.imshow(dataset_mosaic[0], cmap='Spectral')
plt.show()
Mapa topográfico | Pitón

Datos globales de elevación del terreno de resolución múltiple

Ahora tenemos datos globales combinados de elevación del terreno de resolución múltiple 2010 GMTED2010 datos para todo Nepal, pero el archivo también cubre gran parte del área circundante que no es parte de Nepal. Restrinjamos el área a Nepal usando un archivo de forma de Nepal. Usaremos un archivo de forma con las fronteras de los países para el mundo. Puedes descargar este conjunto de datos esta página. Luego, recortemos los datos ráster y el archivo de forma usando el máscara función. Solo usaremos la primera fila del archivo de forma y la columna de geometría. El resultado de esta operación se almacena en matriz_recortada, que son los datos ráster recortados, y transformada_recortada, que representa la información de transformación del ráster recortado.

import geopandas as gpd
from shapely.geometry import mapping
from rasterio import mask as msk#import csv #Upload shapefile with country boarders of the world
df = gpd.read_file(r'path/world-administrative-boundaries.shp') #Restrict to Nepal
nepal = df.loc[df.name=="Nepal"]
nepal.head() #Clip data
clipped_array, clipped_transform = msk.mask(file_mosaic, [mapping(nepal.iloc[0].geometry)], crop=True) #

Queda un problema pendiente. El no hay datos Los valores en los datos raster son altamente dañinos. Por lo tanto, distorsionaría la visualización de nuestro mapa, ya que estos forman parte del rango de valores.

Comprender el problema

Ocupémonos de este problema de la siguiente manera, como se describe en esta entrada del blog:

  • Construyamos una función que se encargue de no hay datos valores. Construimos un sin datos parámetro para especificar el valor considerado "sin datos" en la matriz recortada. En este caso, se establece en (np.amax(clipped_array[0]) + 1), lo que significa que es igual al valor máximo en la matriz recortada más uno. Este valor será considerado como el valor “sin datos”.
  • Ajuste la matriz recortada agregando el valor absoluto del valor mínimo en la matriz recortada a la primera banda (índice 0) de la matriz recortada. Este paso garantiza que todos los valores de la matriz recortada se vuelvan no negativos.
  • También calculamos el rango de valores de la matriz recortada. Agrega el valor máximo y absoluto del valor mínimo en la matriz recortada. El Rango de valores variable mantendrá el rango de valores calculado.
  • Use un diccionario de valores de color construido manualmente basado en uno existente (el sísmico one) y definir nuestro color de fondo para los valores "sin datos".
  • En el último paso, trazamos el mapa con la nueva gama de colores llamada new_seismic.
#Let's investigate no data values nodata_value = file_mosaic.nodata print("Nodata value:", nodata_value)
#Nodata value: -32768.0 #Change value of nodata to one more than the maximum elevation def clip_raster(gdf, img): clipped_array, clipped_transform = msk.mask(img, [mapping(gdf.iloc[0].geometry)], crop=True) clipped_array, clipped_transform = msk.mask(img, [mapping(gdf.iloc[0].geometry)], crop=True, nodata=(np.amax(clipped_array[0]) + 1)) clipped_array[0] = clipped_array[0] + abs(np.amin(clipped_array)) value_range = np.amax(clipped_array) + abs(np.amin(clipped_array)) return clipped_array, value_range nepal_topography, value_range = clip_raster(nepal, file_mosaic) #Check that this worked
print(value_range) #Let's give the nodata value a new background color
from matplotlib import cm
from matplotlib.colors import ListedColormap,LinearSegmentedColormap #Sesmic
new_seismic = cm.get_cmap('seismic', 8828) #Define background color
background_color = np.array([0.9882352941176471, 0.9647058823529412, 0.9607843137254902, 1.0]) #Use color map
newcolors = new_seismic(np.linspace(0, 1, 8828)) # Add the background color as the last row to the newcolors array.
newcolors = np.vstack((newcolors, background_color)) #Use new Italy Color Map
new_seismic = ListedColormap(newcolors) #Create final map and save
plt.figure(figsize=(10,10))
c = plt.imshow(nepal_topography[0], cmap = new_seismic)
clb = plt.colorbar(c, shrink=0.4)
clb.ax.set_title('Elevation (meters)',fontsize=10) plt.savefig(r'pathTopographic_Map_Nepal.png', bbox_inches='tight')
plt.show()
Mapa topográfico | Pitón

¡Voila! Tenemos un mapa topográfico de Nepal que indica claramente las diferentes elevaciones del país y las tres zonas topográficas.

Conclusión

Aprendió a generar un mapa topográfico en Python utilizando datos geoespaciales de la Servicio Geológico de los Estados Unidos (USGS). También aprendió la importancia de ocuparse de los valores faltantes en el conjunto de datos final para la visualización.

Los formuladores de políticas o los profesionales ahora pueden usar este mapa para un análisis más profundo, como combinarlo con otros mapas, como mapas de pobreza o desastres naturales, para analizar si existe alguna conexión. ¡Hemos generado una herramienta valiosa que puede informar la toma de decisiones en política basada en evidencia!

Puntos clave

  • Los mapas topográficos son herramientas útiles para la toma de decisiones basada en evidencia.
  • La topografía y la elevación juegan un papel crucial en la planificación urbana, la prestación de servicios y la desigualdad.
  • Python tiene herramientas útiles para analizar datos geoespaciales.
  • Cuidar los valores sin datos en este tipo de datos es crucial para la visualización.
  • La visualización de datos geoespaciales puede generar información valiosa a niveles desagregados.

Espero que hayas encontrado este artículo informativo. No dude en ponerse en contacto conmigo en Etiqueta LinkedIn. Conectémonos y trabajemos para aprovechar los datos para un cambio positivo.

Preguntas frecuentes

Q1. ¿Qué hay en un mapa topográfico?

A. Los mapas topográficos representan de manera integral una región geográfica específica, brindando información precisa sobre los elementos naturales y humanos. Representan las características del terreno, incluidas montañas, valles y llanuras, utilizando líneas de contorno, que indican puntos de igual elevación sobre el nivel del mar. Los mapas topográficos ofrecen un registro detallado de las características del terreno, lo que permite a los usuarios comprender su forma y elevación con precisión.

Q2. ¿Para qué sirve un mapa topográfico?

R. La topografía tiene como objetivo ubicar con precisión varias características y puntos en la superficie de la Tierra usando un sistema de coordenadas horizontales como latitud, longitud y altitud. Implica determinar posiciones, nombrar características identificadas e identificar patrones comunes de accidentes geográficos. La topografía busca comprender y representar la disposición espacial y las características de las características de la superficie de la Tierra.

Q3. ¿Qué es el análisis geoespacial en Python?

R. El análisis geoespacial en Python implica el uso del lenguaje de programación Python y bibliotecas especializadas para trabajar y analizar datos geoespaciales. Los datos geoespaciales abarcan información sobre las características y eventos de la Tierra, incluidas las posiciones geográficas, las conexiones espaciales y las características asociadas con estas ubicaciones.

Q4. ¿Qué es el conjunto de datos GMTED2010?

R. El conjunto de datos GMTED2010 se beneficia de la disponibilidad de datos de elevación de mayor calidad obtenidos de varias fuentes, como la Misión topográfica de radar de lanzadera (SRTM), los datos de elevación canadienses, los datos Spot 5 Reference3D y el satélite de elevación de hielo, nubes y tierra. (ICESat). Estas nuevas fuentes contribuyen a mejorar la precisión y la cobertura de los datos topográficos globales. GMTED2010 representa un avance significativo en los datos topográficos globales, facilitando varios análisis geoespaciales y apoyando muchas aplicaciones importantes.

Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.

punto_img

Información más reciente

punto_img