Anda di halaman 1dari 11

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:123456@ftp.senamhi.gob.pe/

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_<variable>_<timeSte
pisco_<variable>_<timeStep>_v<versionNum
p>_v<versionNumber>
ber>

Donde:

 variable - según las que actualmente existen pueden ser 'pr', 'tasmax' o
'tasmin', para precipitación, temperatura máxima y mí nima.
 timeStep - paso de tiempo, puede ser 'day' o 'mon' para las versiones diaria y
mensual.
 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. Carpeta data:
data : Aquí deberá añadir todos los archivos PISCO que descarge.
2. Carpeta html:
html: contiene el tutorial.
3. Carpeta pirvate:
pirvate : contiene funciones privadas.
4. 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,
también puede utilizar el icono New de
New de la barra de herramientas.

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
getPiscoSeries extrae series de archivos PISCO
P ISCO para determinados puntos de
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.

getPiscoSeries(__)  también retorna las fechas de la serie


[series, dateVector] = getPiscoSeries(__)
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 series for point No.1 (lat = -9.633261, lon = -77.741361)
Extracting series for point No.2 (lat = -9.559667, lon = -77.890028)
Extracting series for point No.3 (lat = -9.583528, lon = -77.707194)
Extracting series for point No.4 (lat = -9.535500, lon = -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 series for point No.1 (lat = -9.186606, lon = -77.853482)


Extracting series for point No.2 (lat = -9.186526, lon = -77.844393)
Extracting series for point No.3 (lat = -9.177732, lon = -77.871740)
Extracting series for point No.4 (lat = -9.177654, lon = -77.862651)
Extracting series for point No.5 (lat = -9.177574, lon = -77.853562)
Extracting series for point No.6 (lat = -9.168936, lon = -77.899085)
Extracting series for point No.7 (lat = -9.168858, lon = -77.889996)
Extracting series for point No.8 (lat = -9.168779, lon = -77.880907)
Extracting series for point No.9 (lat = -9.168701, lon = -77.871819)
Extracting series for point 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, cont, limits)  traza isolineas para régimen anual sobre una
plotPisco(file,
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, cont, limits, Name, Value)  también puede considerar pares de


plotPisco(file,
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 2000-
2015, 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. Autor: Brayan Torres Z., (sugerencias al correo brayantz_13@hotmail.com
brayantz_13@hotmail.com)).
2. El usuario es responsable por el uso del presente tutotial y los códigos.
3. El tutorial y los códigos estan dirigidos a usuarios de MALAB de nivel básico.
4. 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

Anda mungkin juga menyukai