Este tutorial muestra como extraer información del producto PISCO (Peruvian Interpolated data of the SENAMHI’s Climatological and hydrological Observations) con MATLAB. Los archivos de este producto y las referencias bibliográficas pueden ser descargadas del siguiente enlace: ftp://publi_dgh2:
[email protected]/ Formato de archivos PISCO ................................................................................. ....................................................................................................... ...................... 1 Atributos de archivos PISCO P ISCO ......................................................... ...................................................................................................... ............................................. 1 Pisco toolbox ............................................................................................................................. ............................................................................................................................. 1 Extracción de series: función getPiscoSeries .................................................................. 2 Visualización de datos: función plotPisco .......................................................................... 8 Notas ........................................................... .............................................................................................................................. ............................................................................ ......... 11 Formato de archivos PISCO
Los archivos PISCO tiene la extención *.nc (NetCDF o Network Common Data Format) útiles para el intercambio de información geoespacial, por ejemplo, actualmente, el SENAMHI ha liberado datos de PISCO para variables de precipitación, temperatura máxima y mínima en sus versiones diaria y mensual. Atributos de archivos PISCO
Desafortunadamente la información de PISCO no ha seguido un estándar para su almacenamiento en formatos *.nc en cuanto al nombre de variables, unidades y resolución. Es por ello que, por cuestiones prácticas, los archivos descargados deben ser renombrados según la siguiente expresión:
pisco_
___v_v ber>
Donde:
variable - según las que actualmente existen pueden ser 'pr', 'tasmax' 'tasmin', para precipitación, temperatura máxima y mí nima.
o
timeStep - paso de tiempo, puede ser 'day' o 'mon' para las versiones mensual.
diaria y
version - número de version ejemplo: 1, 2.0, 2.1, etc.
Ejemplos:
pisco_pr_day_v2.0,
pisco_pr_mon_v2.0,
pisco_tasmax_mon_v1.0
Pisco toolbox
Los códigos que se utilizarán en este tutorial deben ser descargados del siguiente enlace: https://drive.google.com/open?id=1nYLos8vi3njSucrX6vkdDw05nlGO9UFY
El archivo Pisco toolbox.zip contiene toolbox.zip contiene dos carpetas: 1. Pisco: toolbox 2. Proyect: ejemplo de un proyecto.
Instalación: carpeta Pisco
La carpeta Pisco debe Pisco debe ser guardada en un determinado directorio fijo para su instalación, el contenido de esta carpeta se describe a continuación: 1. 2. 3. 4.
Carpeta data: data : Aquí deberá añadir todos los archivos PISCO que descarge. Carpeta html: html: contiene el tutorial. Carpeta pirvate: pirvate : contiene funciones privadas. Archivos de funciones principales getPiscoSeries.m y getPiscoSeries.m y plotPisco.m. plotPisco.m.
Para que MATLAB reconozca estas carpetas y archivos, hubiquese dentro de la carpeta Pisco en la ventana Current Folder de MATLAB (carpeta actual) y luego ejecute lo siguiente en la ventana de comandos: addpath(cd) addpath('data' addpath( 'data') )
Nuevo proyecto: carpeta Project
La carpeta Project es Project es ejemplo de un proyecto. Por recomendación, cada vez que tenga una nueva área de estudio cree una carpeta vacía de nombre Project (u Project (u otro) en un directorio aparte, el contenido de esta carpeta debe ser el que se describe a continuación: 1. Carpeta data: data : para almacenar archivos que utilice en su proyecto. 2. Carpeta outs: outs : para almacenar resultados de su proyecto. 3. Archivo project.m: project.m : En este archivo escribira y guardará los comandos de su proyecto. Para crear y guardar el archivo project.m utilice project.m utilice CTRL+N y CTRL+S, New de la barra de herramientas. también puede utilizar el icono New de De la misma manera que en el caso anterior, debera ubicarse dentro de la carpeta Project y Project y ejecutar el código: addpath(cd) addpath('data' addpath( 'data') )
Extracción de series: función getPiscoSeries
La función getPiscoSeries extrae P ISCO para determinados puntos de getPiscoSeries extrae series de archivos PISCO interés o para áreas espaciales en cuyo caso es un promedio.
Sintaxis
series = getPiscoSeries(file, lon, lat) retorna series para puntos de interés especificados por las coordendas lon y lon y lat. lat. Extrae todo el periodo disponible por defecto. series = getPiscoSeries(file, lon, lat, Name, Value) también puede considerar pares de argumentos opcionales separados por coma (Name,Value ( Name,Value). ). Por ejemplo
puede especificar un periodo de interés y/o subíndices para indicar que puntos pertenecen a la misma zona espacial de manera que pueda obtenerse una serie pormedio por cada zona. Ver ejemplos. [series, dateVector] = getPiscoSeries(__) getPiscoSeries(__) también retorna las fechas de la serie en dateVector que dateVector que incluye año, mes y día. Nota: los comandos presentados aquí pueden ser copiados y pegados al archivo proyect.m de su proyecto (ver carpeta Project), Project), posteriormente los podrá modificar deacuerdo a sus
datos.
Ejemplos
Para los ejemplos utilizaremos el archivo PISCO de precipitación mensual version 2, previa descarga. file = 'pisco_pr_mon_v2.nc' 'pisco_pr_mon_v2.nc'; ; % Archivo PISCO descargado.
Ejemplo 1: Extraer toda la serie disponible para un determinado punto y exportar a excel. [series, dateVector] = getPiscoSeries(file, getPiscoSeries(file, -9.18, -77.5); xlswrite('outs\result_example1.xlsx' xlswrite('outs\result_example1.xlsx', [dateVector, series])
Extracting series for point No.1 (lat = -9.180000, lon = -77.500000)
Ejemplo 2: Extraer la serie para un periodo de interés. [series, dateVector] = getPiscoSeries(file, getPiscoSeries(file, -9.18, -77.5,... -77.5,... 'startDate', 'startDate' , '1981-01-01' '1981-01-01', ,... 'endDate', 'endDate' , '2000-12-01' '2000-12-01'); ); xlswrite('outs\result_example2.xlsx' xlswrite('outs\result_example2.xlsx', [dateVector, series])
Extracting series for point No.1 (lat = -9.180000, lon = -77.500000)
Ejemplo 3: Extraer series para determinadas estaciones y compararlas gráficamente con datos
observados. [~, ~, locations] = xlsread('stations.xlsx' xlsread('stations.xlsx', , 'locations' 'locations'); ); % Archivo estaciones, hoja localizaciones. lat = cell2mat(locations(2:end, cell2mat(locations(2:end,1)); 1)); lon = cell2mat(locations(2:end, cell2mat(locations(2:end,2)); 2)); names = locations(2:end,4); locations(2:end,4); [~, ~, seriesObserved]= xlsread('stations.xlsx' xlsread('stations.xlsx', , 'seriesObserved' 'seriesObserved'); ); % Archivo estaciones, hoja de series mensuales observadas (1981-2015). seriesObserved seriesObserved = cell2mat(seriesObserved( cell2mat(seriesObserved(2:end,3:end) 2:end,3:end)); ); % Solo series, eliminar columna de años y meses. [series, dateVector] = getPiscoSeries(file, getPiscoSeries(file, lat, lon,... lon,... 'startDate', 'startDate' , '1981-01-01' '1981-01-01', ,... 'endDate', 'endDate' , '2015-12-01' '2015-12-01'); );
Extracting Extracting Extracting Extracting
series series series series
for for for for
point point point point
No.1 No.2 No.3 No.4
(lat (lat (lat (lat
= = = =
-9.633261, -9.559667, -9.583528, -9.535500,
lon lon lon lon
= = = =
-77.741361) -77.890028) -77.707194) -77.775600)
Graficando. for i for i = 1:numel(names) 1:numel(names) figure plot(series(:,i), '-' '-') ) hold on plot(seriesObserved(:,i), '--' '--') ) title(names{i}) xlabel('Meses' xlabel('Meses') ) ylabel('Precipitaci ylabel('Precipitación ón (mm)' (mm)') ) legend('Pisco' legend('Pisco', , 'Observado' 'Observado') ) snapnow end xlswrite('outs\result_example3.xlsx' xlswrite('outs\result_example3.xlsx', [dateVector, series])
Ejemplo 4: Extraer series promedios para superficies espaciales.
Debemos contar con una grilla de puntos, pares de coordenadas (lat, lon), con sus respectivos índices para agruparlos, en caso sea una sola área los subindices deben ser todos del mismo valor. Ver archivo 'mask.xlsx' en la carpeta data. data. Leer archivo de coordenadas y subíndices. masks = xlsread('mask.xlsx' xlsread('mask.xlsx'); ); lat = masks(:,1); lon = masks(:,2); subscripts = masks(:,3);
Visualizar las zonas (cuencas). figure scatter(lon, scatter(lon, lat, [], subscripts, 'filled' 'filled') ) title('Coordenas title('Coordenas agrupadas por zonas de interés (subcuencas)'); xlabel('longitude' xlabel('longitude') ) ylabel('latitude' ylabel('latitude') )
Extraer las series pormedios y graficar. [series, dateVector ] = getPiscoSeries(file, lat, lon,... lon,... 'startDate', '1981-01-01' 'startDate', '1981-01-01', ,... 'endDate', 'endDate' , '2015-12-01' '2015-12-01', ,... 'averageSubs', 'averageSubs' , subscripts); figure plot(series); % Graficar. title('Precipitaci title('Precipitación ón mensual - subcuencas') subcuencas') xlabel('meses' xlabel('meses') ) ylabel('Precipitac ylabel('Precipitacion ion (mm)' (mm)') ) xlswrite('outs\result_example4.xlsx' xlswrite('outs\result_example4.xlsx', [dateVector, series])
Extracting Extracting Extracting Extracting Extracting Extracting Extracting Extracting Extracting Extracting ...
series series series series series series series series series series
for for for for for for for for for for
point point point point point point point point point point
No.1 (lat = -9.186606, lon = -77.853482) No.2 (lat = -9.186526, lon = -77.844393) No.3 (lat = -9.177732, lon = -77.871740) No.4 (lat = -9.177654, lon = -77.862651) No.5 (lat = -9.177574, lon = -77.853562) No.6 (lat = -9.168936, lon = -77.899085) No.7 (lat = -9.168858, lon = -77.889996) No.8 (lat = -9.168779, lon = -77.880907) No.9 (lat = -9.168701, lon = -77.871819) No.10 (lat = -9.168622, lon = -77.862730)
Visualización de datos: función plotPisco
La función plotPisco traza plotPisco traza isolineas de una determinada variable sobre una superficie espacial según los datos de PISCO. Esta función solo admite versiones mensuales de PISCO.
Sintaxis
plotPisco(file, plotPisco(file, cont, limits) traza isolineas para régimen anual sobre una determinada área especificada por cont y cont y limits, limits , considera todo el periodo disponible por defecto. El argumento cont contiene cont contiene pares de coordenas que delimitan una o varias áreas, mientras que limits contiene limits contiene dos pares de coordenadas que indican los límites de la figura. plotPisco(file, plotPisco(file, cont, limits, Name, Value) también puede considerar pares de argumentos opcionales separados por coma (Name,Value ( Name,Value ). Por ejemplo puede especificar un periodo de interés, intervalos de isolineas o escoger el rágimen mensual para trazar isolineas. Ver ejemplos. Grid = plotPisco(___) también retorna la grilla utilizada para el trazado de isolineas. Grid es una variable de tipo estructura que contiene los campos lon, lon, lat y lat y data. data. Si el régimen considerado es anual data es data es un vector columna y si el régimen es mensual data es data es una matriz donde cada columna representa un mes (enero a diciembre). Grids puede Grids puede ser exportado a excel para luego trazar isolineas en softwares SIG.
Ejemplos
Para los ejemplos definiremos el contorno del área de estudio y los límites.
cont = xlsread('contour.xlsx' xlsread('contour.xlsx'); ); % Leer contorno de la cuenca. limits = [-9.4, -78.6;... -78.6;... % % Latitudes (columna 1) y longitudes (columna 2). -8.8, -77.8];
Ejemplo 5: Trazar isolineas temperatura máxima y mínima promedio anual para una cuenca y exportar a excel las grillas utilizadas. figure file1 = 'pisco_tasmax_mon_v1.0.nc' ; % Archivos PISCO descargados. Grid = plotPisco(file1, cont, limits, 'interval' 'interval', , 10); xlswrite('outs\result_example5.xlsx' xlswrite('outs\result_example5.xlsx', [Grid.lon, G rid.lat, Grid.data], 'tasmax' 'tasmax') ) figure file2 = 'pisco_tasmin_mon_v1.0.nc' ; % Archivo PISCO descargado. Grid = plotPisco(file2, cont, limits, 'interval' 'interval', , 10); xlswrite('outs\result_example5.xlsx' xlswrite('outs\result_example5.xlsx', [Grid.lon, G rid.lat, Grid.data], 'tasmin' 'tasmin') )
Ejemplo 6: Trazar isolineas de precipitación promedio mensual considerando el periodo 20002015, exportar a excel. file = 'pisco_pr_mon_v1.1.nc'; % Archivo PISCO descargado. sheets = {'ene' {'ene', , 'feb' 'feb', , 'mar' 'mar', , 'abr' 'abr', , 'may' 'may', , 'jun' 'jun', , 'jul' 'jul', , 'ago' 'ago', , 'sep' 'sep', , 'oct' 'oct', , 'nov' 'nov', , 'dic'}; 'dic' }; % Hojas excel para guardar las grillas. Grid = plotPisco(file, plotPisco(file, cont, limits,... limits,... 'interval', 'interval' , 15,... 15,... 'regime', 'regime' , 'monthly' 'monthly', ,... 'period', 'period' , {'2000-01-01' {'2000-01-01', , '2015-12-31' '2015-12-31'}); }); for i for i = 1:numel(sheets) 1:numel(sheets) xlswrite('outs\result_example6.xlsx' xlswrite( 'outs\result_example6.xlsx', [Grid.lon, Grid.lat, Grid.data(:,i)], sheets{i}) end
Notas
1. 2. 3. 4.
Autor: Brayan Torres Z., (sugerencias al correo [email protected] [email protected])). El usuario es responsable por el uso del presente tutotial y los códigos. El tutorial y los códigos estan dirigidos a usuarios de MALAB de nivel básico. Para la determinación de las distancias geodésicas se utiliza una esfera de referencia (radio medio de la tierra), a fin de reducir el t iempo de computo, sin embargo puede utilizarse el elipsoide de referencia wgs84 editando el archivo getPiscoSeries.m (linea 84, cambiar 'sphere' por 'ellipsoid'). 5. Las figuras con coordenadas geográficas no consideran distancias geodésicas por lo que son solo ilustrativas y deben utilizarse con precaución. Published with MATLAB® R2017b