4. Scripts de ejemplo
En esta sección se muestran algunos ejemplos de scripts de MATLAB para mostrar datos geoespaciales. Se utilizan las funciones descritas en la sección anterior para cargar datos, crear mapas y mostrar puntos en un mapa. Se recomienda revisar la documentación de cada función para obtener más información sobre su uso y opciones disponibles.
4.1. Datos para realizar las ejemplos
Enlace a los datos |
Región |
Formato |
Fuente |
---|---|---|---|
Global |
csv |
||
Bahía de La Paz |
mat |
||
Sur del GC |
mat |
||
Sur del GC |
mat |
||
Sur del GC |
nc |
||
Sur del GC |
nc |
||
Sur del GC |
nc |
||
Golfo de Mexico |
nc |
||
Atlántico ecuatorial |
nc |
4.2. Con datos vectoriales
4.2.1. Tsunamis en el mundo y en México
Práctica #1
Crear varios tipos de mapas para representar los tsunamis almacenados en el archivo tsunamis.xlsx
.
Para este ejemplo, no se requiere la descarga de datos adicionales. Los que se utilizan estan
disponibles con la instalación de Mapping Toolbox
.
Utiliza la función
readtable
para cargar los datos desde el archivo de Excel.Crea los ejes del mapa utilizando la función
worldmap
.Utiliza la función
geoshow
para mostrar los continentes (landareas
).Muestra la ubicación de los tsunamis utilizando la función
geoshow
.
1% Cargar los datos (tsunamis y continentes)
2tsunamis = readtable('tsunamis.xlsx');
3land = readgeotable('landareas.shp');
4
5% Crear los ejes del mapa
6figure
7worldmap('World')
8
9% Mostrar los continentes (polígonos) y tsunamis (puntos)
10geoshow(land, 'DisplayType', 'polygon')
11geoshow(tsunamis.Latitude, tsunamis.Longitude, 'DisplayType', 'point')
Modifica el script para mejorar la apariencia del mapa (visualización de los tsunamis y los continentes).
Agrega instrucciones al script para crear otro mapa, esta vez de los sismos ocurridos en México.
Nota
Sugerencia: Primero filtra los datos de los tsunamis para seleccionar solo aquellos que ocurrieron en México
(por ejemplo, usando las funciones find
y contains
en la columna que almacena el nombre del país).
Posteriormente la función worldmap
para crear un mapa de México y la función geoshow
para mostrar
los puntos de los tsunamis en el mapa.
Agrega un título al mapa utilizando la función
title
.Guarda el mapa como una imagen utilizando la función
print
,exportgraphics
osaveas
.Genera un mapa adicional (para todo el mundo), que represente las ubicaciones de los tsunamis (puntos) de tamaño diferente (dependiendo de la “magnitud”) y con la escala de color según la “causa”. Para esto, utiliza la función
geobubble
. También agrega un título y guarda el mapa como una imagen (.png
).Guarda el script como
xyz_00_tsunamis.mlx
(xyz
= tus iniciales) en la carpetamatlab
.Sube el script y los mapas (
.png
) a la plataforma Teams.
4.2.2. Sismos
Sismos en México (2010-2024)

Práctica #2
Tomando como referencia el script anterior, crear 14 mapas con la ubicación de los sismos en México por año (2010-2024). Además, crear un mapa con todos los sismos en México en ese periodo.
Descarga los “Datos de sismos” (2010-2023) de la sección de datos. Además, descarga de la página earthquake.usgs.gov los datos de los sismos (≥4 de magnitud) ocurridos durante el año 2024 en todo el mundo (en formato
csv
). Guargar este archivo comosismos-2024.csv
. Transfiere estos 14 archivoscsv
a la carpetadatos/csv
.Modificar el script para acceder a la carpeta
datos/csv
y leer todos los archivoscsv
(sismos de 2010-2024).Para cada archivo
csv
seleccionar los sismos ocurridos en México, cuya magnitud fue≥ 4
.
Nota
Sugerencia: Puedes utilizar la función dir
para obtener una lista de los archivos en la carpeta y luego leer cada archivo en un bucle.
Por ejemplo, puedes usar dir('../datos/csv/sismos-*.csv')
para obtener la lista de archivos csv
.
Luego, usar un ciclo for
para iterar sobre cada archivo y cargar los datos utilizando la función readtable
. El procedimiento
para filtrar los registros de interés es el mismo que en el ejercicio anterior (funciones find
y contains
).
Generar los mapas de sismos (uno por año) utilizando la función
geoscatter
. Mostrar una barra de color que indique la magnitud de los sismos. En el título de cada mapa especificar el año y el número de sismos en el año. Guardar estos mapas en formatopng
a 300 dpi.Generar un mapa que incluya todos los sismos ocurridos en México (2010-2024), similar a los obtenidos según el punto anterior. En este caso utilizar la función
geodensityplot
para presentar el mapa. Utilizargrayterrain
como mapa base. ¿Cuántos sismos ocurrieron en ese periodo? (mostrarlo en el título del mapa). Guardar el mapa en formatopng
a 300 dpi.Crear una gráfica que muestre la magnitud de los sismos con magnitud
≥ 7
grados en el periodo 2010-2024. ¿Cuándo (fecha y hora) ocurrieron esos sismos? (según la zona horaria'America/Mexico_City'
).
Nota
Utilizar la función datetime
para convertir las fechas y horas de los sismos a un formato
de fechas, así como para especificar la zona horaria (con el argumento 'TimeZone', 'UTC'
). Después de crear
la variable de tipo datetime
puedes configurar propiedad TimeZone
para cambiar la zona horaria.
Así, cambia la zona horaria a 'America/Mexico_City'
.
Documentar el script con los comentarios pertinentes de acuerdo con los datos y procedimientos utilizados.
Como evidencia, adjuntar en Teams el script (
xyz_01_sismos.pdf
). Debe incluir todos los mapas y la gráfica. Además, subir el archivopng
generado con la funcióngeodensityplot
y uno de los archivospng
obtenido con la funcióngeoscatter
.
Ejemplo de script para leer todos los archivos en una carpeta, especificando la ruta a la carpeta, parte del nombre
de los archivos y su extensión (en este caso csv
):
1% Recuperar los nombres de archivos CSV de sismos en la carpeta datos/csv
2archivos = dir('../datos/csv/sismos-*.csv');
3
4% Inicializar tabla para almacenar todos los sismos
5todos_sismos = table();
6
7% Ciclo para leer cada archivo CSV
8for k = 1:length(archivos)
9 % Leer el archivo k
10 sismos = readtable(archivos(k).name);
11
12 % Filtrar sismos en México con magnitud >= 4
13 rens = find(contains(sismos.place, 'Mexico') & sismos.mag >= 4);
14
15 % Crear tabla con sismos en México y magnitud >= 4
16 sismos_mex = sismos(rens, :);
17
18 % Concatenar a la tabla general
19 todos_sismos = [todos_sismos; sismos_mex];
20
21 % Crear mapa para cada año...
22end
23
24% Crear el mapa con los sismos (2010-2024) en México...
4.2.3. Leer archivos shp
Los archivos “shapefile” aun son ampliamente utilizados para almacenar datos
geoespaciales de tipo vectorial. En este ejemplo, se muestra cómo leer un
archivo shp
utilizando la función shaperead
.
La función shaperead
permite incluir condiciones para filtrar los registros.
Devuelve una estructura tipo struct
con los atributos almacenados en el “shapefile”.
1% Importar datos de un shapefile (solo los estados de interés)
2estados_interes = shaperead("gadm41_MEX_1.shp", "UseGeoCoords", true, "Selector", ...
3 {@(name) any(contains(name, {'Baja California', 'Sonora', 'Sinaloa'})), 'NAME_1'});
4
5% Crear mapa
6figure
7worldmap("Mexico")
8geoshow(estados_interes, "DisplayType", "polygon", "FaceColor", [0.5 0.5 0.5])
9title("Estados de interés")
Con shaperead
también podemos especificar la región (BoundingBox
) que nos
interesa extraer del “shapefile”, como se muestra a continuación:
Nota
En este caso, la región se especifica con una matriz de 2×2
de la forma [lonmin,latmin; lonmax,latmax]
(para coordenadas geográficas). La función shaperead
no recorta las entidades que intersecan
parcialmente el rectángulo. El parámetro Àttributes
permite seleccionar los atributos (columnas) que se desean
incluir en la estructura de salida.
1% Importar datos de un shapefile (región específica)
2bbox = [-117, 20; -105, 32]; % [longitud, latitud]
3estados_interes = shaperead("gadm41_MEX_1.shp", "UseGeoCoords", true, "BoundingBox", bbox, "Attributes", {'NAME_1'});
4
5% Crear mapa
6figure
7worldmap([bbox(1,2),bbox(2,2)],[bbox(1,1), bbox(2,1)]) % ([limlat], [limlon])
8geoshow(estados_interes, "DisplayType", "polygon", "FaceColor", [0.5 0.5 0.5])
9title("Estados en la región especificada")
También se puede usar la función readgeotable
para leer “shapefiles”. Esta función
es una alternativa más reciente para acceder a archivos vectoriales. Devuelve un tipo de
estructura table
:
1% Importar datos de un shapefile
2estados = readgeotable("gadm41_MEX_1.shp");
3
4% Filtrar los estados de interés
5estados_interes = estados(contains(estados.NAME_1, {'Baja California', 'Sonora', 'Sinaloa'}), :);
6
7% Crear mapa
8figure
9worldmap("Mexico")
10geoshow(estados_interes, "DisplayType", "polygon", "FaceColor", [0.5 0.5 0.5])
11title("Estados de interés")
4.3. Con datos ráster
4.3.1. Archivos mat
TSM en la bahía de La Paz (2015) y en el sur del GC (2018)
En este ejemplo, creamos un mapa que muestra la temperatura superficial del mar (TSM)
en la Bahía de La Paz (2015). Estos datos están disponibles en la sección 4.1
en formato .mat
y se pueden leer utilizando la función load
.
La variable de interés es jplG1SST.SST
.
Nota
Nota que las variables están contenidas en una estructura (tipo struct
) llamada jplG1SST
.
Los datos de TSM están en un arreglo (3D) con dimensiones [tiempo, latitud, longitud]
.
Para crear el mapa, primero es necesario obtener una referencia geográfica utilizando la función
georefcells
, posteriormente, seleccionar una capa específica (por ejemplo, la primera capa) y
utilizar la función geoshow
para mostrar los datos en un mapa.
1% Importar datos de TSM
2load jplG1SST_blap_2015.mat;
3
4% Obtener los datos de la variable (struct) jplG1SST
5% (Verificar el tipo de datos)
6SST = jplG1SST.SST;
7lat = jplG1SST.latitude;
8lon = jplG1SST.longitude;
9
10% Obtener los límites de latitud y longitud
11latlim = [lat(1), lat(end)];
12lonlim = [lon(1), lon(end)];
13
14% Consular el tamaño del arreglo (3D)
15[t, rens, cols] = size(SST);
16
17% Crear la referencia geográfica
18R = georefcells(latlim, lonlim, [rens, cols]);
19
20% Seleccionar la primera capa de datos
21sst = squeeze(SST(1,:,:));
22
23% Crear el mapa
24figure
25worldmap(latlim, lonlim) % Verificar el tipo de las variables
26geoshow(sst, R, 'DisplayType', 'surface')
27colorbar
28colormap('jet')
29title('TSM en la Bahía de La Paz')
Práctica #3
Tomando como referencia el script revisado en clase, utiliza los archivos jplG1SST_blap_2015.mat
, sst_2018.mat
y gadm41_MEX_2.shp
para generar los siguientes mapas y gráficas:
Mapa de TSM en la bahía de La Paz para un día específico (2015).
Mapa de la TSM promedio en todo el año (2015).
Gráfico Hovmöller, (
pcolor
) mostrando en el ejex
las longitudes y en el ejey
las fechas (meses).Gráfica (
plot
) mostrando la variación de la temperatura diaria promedio a lo largo del año (2015).Mapa de TSM en el sur del golfo de California para un día específico (2018).
Mapa de TSM en la bahía de La Paz, recortada de los datos del 2018 (
geocrop
), para el mismo día elegido en el punto anterior.Gráfica para comparar la variación de la TSM diaria promedio a lo largo del 2015 y del 2018 en la bahía de La Paz. Para ello, primero se deben cortar (
geocrop
) las capas del 2018 según la cobertura de los datos del 2015.¿Cuál es la cobertura, resolución temporal y espacial de los datos de TSM (2015 y 2018)? Incluye la respuesta en el script mencionando cómo obtuviste esa información.
Documentar el script con los comentarios pertinentes de acuerdo con los datos y procedimientos utilizados.
Como evidencia, adjuntar en Teams el script (
xyz_03_tsm_blap.pdf
). Debe incluir todos los mapas y las gráficas.
Nota
Los mapas deben incluir una escala de color y de distancia, un título apropiado con la fecha de los datos
y la región del shapefile
correspondiente al municipio o a los estados en la cobertura. Las gráficas deben
incluir título y etiquetas en los ejes, y cuando se requiera, escala de color.
Representación de la estructura de los datos de TSM

4.3.2. Archivos .nc
(NetCDF)
NetCDF es un formato de archivo ampliamente utilizado para almacenar datos científicos, especialmente en el ámbito de la oceanografía y la meteorología.
TSM en el sur del GC (2015)
Los archivos .nc
se pueden leer utilizando la función ncread
para acceder a las variables y
ncinfo
para obtener información sobre el contenido del archivo. La creación de la referencia geográfica
se realiza con la función georefcells
, como en el ejemplo anterior.
1% Importar datos de TSM
2SST = ncread('sst_2022.nc', 'analysed_sst');
3lat = ncread('sst_2022.nc', 'latitude');
4lon = ncread('sst_2022.nc', 'longitude');
5
6% Crear referencia geográfica
7
8% Crear mapa
Puesto que los comandos para visualizar los datos son similares en los ejemplos revisados, es conveniente implementar una función que permita crear este tipo de mapas. Por ejemplo:
Nota
Puedes agregar argumentos adicionales a la función para personalizar el mapa, como un shapefile
,
color de los polígonos, leyenda de escala de color, condicionantes para el rango, etc.
1% Crea una mapa a partir de una capa raster
2% data - capa ráster
3% r - referencia geográfica
4% rango - límites de los valores [a, b]
5% cmap - escala de colores ('jet', 'turbo',etc)
6% titulo - título del mapa
7function [] = surfaceMap(data, r, rango, cmap, titulo)
8 figure
9 worldmap(r.LatitudeLimits, r.LongitudeLimits)
10 geoshow(zeros(size(data)), r, 'CData', data, 'DisplayType', 'surface')
11 title(titulo)
12 colormap(cmap)
13 colorbar;
14 clim(rango);
Cuando se utilizan datos en formato NetCDF
, es común que se requiera especificar regiones para
observar cambios en las variables en un periodo determinado. Por ejemplo, se podría utilizar un polígono
irregular para delimitar una región de interés, luego aplicar una máscara a los datos ráster para mostrar
solo la región seleccionada y proyectar esa selección en el cubo de datos para generar una serie de tiempo.
El siguiente script muestra un ejemplo de cómo crear una o varias máscaras binarias a partir de un archivo kmz
o kml
con polígono(s) dentro de la cobertura del ráster.
1% Crea una o varias máscaras binaras (ráster) para la selección de ROIs
2% Variables de entrada:
3% kmzName: nombre del archivo kml o kmz [polígono(s) dentro de la ROI (R)]
4% r: matriz de referencia geográfica del ráster al que se aplicará la máscara (tipo GeographicCellsReference)
5% Regresa la matriz de la máscara:
6% mask: mascara binaria (1 | NaN)
7% Si el archivo vectorial contiene n polígonos, regresa n mascaras [mask(:,:,n)]
8
9function mask = creaMask(kmzName, r)
10 gt = readgeotable(kmzName);
11 tb = geotable2table(gt,["lat","lon"]);
12 n = height(tb);
13 mask = zeros(r.RasterSize(1), r.RasterSize(2), n);
14 for j=1:n
15 [x, y] = geographicToIntrinsic(r, cell2mat(tb.lat(j)), cell2mat(tb.lon(j)));
16 mask(:,:,j) = double(poly2mask(x, y, r.RasterSize(1), r.RasterSize(2)));
17 end
18 mask(mask == 0) = NaN;
19end
Práctica #4
Descarga datos diarios de TSM para un año de tu área de estudio (NetCDF
) con una cobertura aproximada de 4 x 5º
.
Si es necesario, también descarga un shapefile de esa región (similar al gadm41_MEX_1.shp
). También digitaliza en
Google Earth Pro al menos tres puntos y tres polígonos
en la cobertura del archivo de TSM (guardarlos archivos kml
o kmz
, un archivo para los puntos y otro para los polígonos).
Tomando como referencia el script revisado en clase y los archivos mencionados en el párrafo anterior, generar los siguientes mapas y gráficas:
Mapa de TSM en tu área de estudio para un día específico. Sobreponer al mapa los puntos y los polígonos digitalizados, mostrando las etiquetas para los puntos.
Gráfica (
plot
) mostrando la variación de la temperatura diaria promedio a lo largo del año, en la ubicación de los polígonos digitalizados.Mapas que muestren la TSM (de un día específico) recortada con los polígonos digitalizados (generar un mapa por cada polígono).
Gráfica (
plot
) que muestre la variación de la temperatura diaria promedio en la cobertura de los puntos digitalizados, a lo largo del año. Suavizar las series de tiempo (movmean
).Mapas de los promedios mensuales de TSM en tu área de estudio (para todo el año). Los 12 mapas deben tener la misma escala de temperatura, en el título de cada mapa, incluir el mes y el año. Guardar estos mapas en formato png a 300 dpi.
Documentar el script con los comentarios pertinentes de acuerdo con los datos y procedimientos utilizados.
Como evidencia, adjuntar en Teams el script (
xyz_04_tsm_aaaa_nomArea.pdf
,aaaa
= año al que corresponden los datos ynomArea
= Nombre del área en una palabra). El archivo pdf debe incluir todos los mapas y las gráficas. Además, incluir los 12 mapas (png
) de los promedios mensuales.
Nota
Los mapas deben incluir escala de color y de distancia, título apropiado con la fecha de los datos
y el shapefile
correspondiente al estado o región de la cobertura. Las gráficas deben incluir título y etiquetas en los ejes,
y cuando se requiera, escala de color o leyenda.
⁂