Temporal data processing/seasonal aggregation: Difference between revisions
|  (Created page with " TODO seasonal aggregation  Category: Documentation Category:Temporal") | Veroandreo (talk | contribs)   (add seasonal aggregation example) | ||
| Line 1: | Line 1: | ||
| === Seasonal aggregation example === | |||
| This is an example showing the use of {{cmd|t.rast.aggregate.ds}} to aggregate a daily time series using a source time series with seasonal granularity. We create the daily maps for more than one year (400 maps). We then create the corresponding spatio-temporal raster data set (strds) and register maps in it. | |||
| <source lang="bash"> | |||
| # set the computational region and resolution | |||
| g.region -p n=-30 s=-50 e=-50 w=-70 res=1 | |||
| # we do more than one year | |||
| for map in `seq 1 400` ; do | |||
|  # generate synthetic maps as a seeding | |||
|  r.mapcalc expression="daily_prec_${map} = 1" | |||
|  echo daily_prec_${map} >> map_list.txt | |||
| done | |||
| t.create type=strds temporaltype=absolute \ | |||
|          output=precipitation_daily \ | |||
|          title="Daily precipitation" \ | |||
|          description="Test dataset with daily precipitation" | |||
| t.register -i type=raster input=precipitation_daily \ | |||
|            file=map_list.txt start="2014-03-07" increment="1 days" | |||
| # check general information of the daily strds | |||
| t.info type=strds input=precipitation_daily | |||
| </source> | |||
|  +-------------------- Space Time Raster Dataset -----------------------------+ | |||
|  |                                                                            | | |||
|  +-------------------- Basic information -------------------------------------+ | |||
|  | Id: ........................ precipitation_daily@meteo | |||
|  | Name: ...................... precipitation_daily | |||
|  | Mapset: .................... meteo | |||
|  | Creator: ................... veroandreo | |||
|  | Temporal type: ............. absolute | |||
|  | Creation time: ............. 2015-08-23 21:08:00.744761 | |||
|  | Modification time:.......... 2015-08-23 21:08:10.790248 | |||
|  | Semantic type:.............. mean | |||
|  +-------------------- Absolute time -----------------------------------------+ | |||
|  | Start time:................. 2014-03-07 00:00:00 | |||
|  | End time:................... 2015-04-11 00:00:00 | |||
|  | Granularity:................ 1 day | |||
|  | Temporal type of maps:...... interval | |||
|  +-------------------- Spatial extent ----------------------------------------+ | |||
|  | North:...................... -30.0 | |||
|  | South:...................... -50.0 | |||
|  | East:.. .................... -50.0 | |||
|  | West:....................... -70.0 | |||
|  | Top:........................ 0.0 | |||
|  | Bottom:..................... 0.0 | |||
|  +-------------------- Metadata information ----------------------------------+ | |||
|  | Raster register table:...... raster_map_register_d14f30f1438840ac81cbfc0a554c1e69 | |||
|  | North-South resolution min:. 1.0 | |||
|  | North-South resolution max:. 1.0 | |||
|  | East-west resolution min:... 1.0 | |||
|  | East-west resolution max:... 1.0 | |||
|  | Minimum value min:.......... 1.0 | |||
|  | Minimum value max:.......... 1.0 | |||
|  | Maximum value min:.......... 1.0 | |||
|  | Maximum value max:.......... 1.0 | |||
|  | Aggregation type:........... None | |||
|  | Number of registered maps:.. 400 | |||
|  | | |||
|  | Title: | |||
|  | Daily precipitation | |||
|  | Description: | |||
|  | Test dataset with daily precipitation | |||
|  | Command history: | |||
|  | # 2015-08-23 21:08:00  | |||
|  | t.create type="strds" temporaltype="absolute" | |||
|  |     output="precipitation_daily" title="Daily precipitation" | |||
|  |     description="Test dataset with daily precipitation" | |||
|  | # 2015-08-23 21:08:10  | |||
|  | t.register -i type="raster" | |||
|  |     input="precipitation_daily" file="map_list.txt" start="2014-03-07" | |||
|  |     increment="1 days" | |||
|  |  | |||
|  +----------------------------------------------------------------------------+ | |||
| Now, we'll create a second time series (might be raster, vector or raster3d) of seasonal granularity. We'll then take this granularity to aggregate our daily strds. Just as an example, we'll create a spatio-temporal vector data set (stvds). | |||
| <source lang="bash"> | |||
| # we create 4 maps of points (one per season) | |||
| for i in `seq 1 4` ; do  | |||
|  v.random output=points_${i} n=20 | |||
| done | |||
| # create the stvds | |||
| t.create type=stvds temporaltype=absolute \ | |||
|          output=points \ | |||
|          title="Points" \ | |||
|          description="Points for aggregation" | |||
| </source> | |||
| Now, we set the seasonal granularity for the vector maps. For this, we need to create a file with the respective map names and start and end date corresponding to [https://en.wikipedia.org/wiki/Solstice astronomical seasons]. We'll use this file as input for {{cmd|t.register}}. | |||
|  points_1|2014-03-20|2014-06-21 | |||
|  points_2|2014-06-21|2014-09-23 | |||
|  points_3|2014-09-23|2014-12-21 | |||
|  points_4|2014-12-21|2015-03-20 | |||
| <source lang="bash"> | |||
| t.register type=vector input=points file=seasonal_points.txt | |||
| t.info type=stvds input=points | |||
| </source> | |||
|  +-------------------- Space Time Vector Dataset -----------------------------+ | |||
|  |                                                                            | | |||
|  +-------------------- Basic information -------------------------------------+ | |||
|  | Id: ........................ points@meteo | |||
|  | Name: ...................... points | |||
|  | Mapset: .................... meteo | |||
|  | Creator: ................... veroandreo | |||
|  | Temporal type: ............. absolute | |||
|  | Creation time: ............. 2015-08-23 21:10:11.462742 | |||
|  | Modification time:.......... 2015-08-23 21:49:59.554593 | |||
|  | Semantic type:.............. mean | |||
|  +-------------------- Absolute time -----------------------------------------+ | |||
|  | Start time:................. 2014-03-20 00:00:00 | |||
|  | End time:................... 2015-03-20 00:00:00 | |||
|  | Granularity:................ 1 day | |||
|  | Temporal type of maps:...... interval | |||
|  +-------------------- Spatial extent ----------------------------------------+ | |||
|  | North:...................... -30.260367 | |||
|  | South:...................... -49.990657 | |||
|  | East:.. .................... -50.000035 | |||
|  | West:....................... -69.181185 | |||
|  | Top:........................ 0.0 | |||
|  | Bottom:..................... 0.0 | |||
|  +-------------------- Metadata information ----------------------------------+ | |||
|  | Vector register table:...... vector_map_register_727ad0a4157448ee8662d4345c248267 | |||
|  | Number of points ........... 80 | |||
|  | Number of lines ............ 0 | |||
|  | Number of boundaries ....... 0 | |||
|  | Number of centroids ........ 0 | |||
|  | Number of faces ............ 0 | |||
|  | Number of kernels .......... 0 | |||
|  | Number of primitives ....... 80 | |||
|  | Number of nodes ............ 0 | |||
|  | Number of areas ............ 0 | |||
|  | Number of islands .......... 0 | |||
|  | Number of holes ............ 0 | |||
|  | Number of volumes .......... 0 | |||
|  | Number of registered maps:.. 4 | |||
|  | | |||
|  | Title: | |||
|  | Points | |||
|  | Description: | |||
|  | Points for aggregation | |||
|  | Command history: | |||
|  | # 2015-08-23 21:10:11  | |||
|  | t.create type="stvds" temporaltype="absolute" | |||
|  |     output="points" title="Points" description="Points for aggregation" | |||
|  | # 2015-08-23 21:49:59  | |||
|  | t.register type="vector" input="points" | |||
|  |     file="seasonal_points.txt" | |||
|  |  | |||
|  +----------------------------------------------------------------------------+ | |||
| Finally, we aggregate our daily time series "precipitation daily" into seasonally accumulated precipitation with {{cmd|t.rast.aggregate.ds}} using method=sum.   | |||
| <source lang="bash"> | |||
| # use everything between start date and end date | |||
| t.rast.aggregate.ds input=precipitation_daily \ | |||
|                     output=precipitation_seasonal \ | |||
|                     sample=points type=stvds \ | |||
|                     base=prec_seasonal \ | |||
|                     method=sum sampling=contains | |||
| # update information for the newly created seasonal time series | |||
| t.support input=precipitation_seasonal \ | |||
|           title="Aggregated precipitation" \ | |||
|           description="Aggregated seasonal precipitation dataset" | |||
| # check info                  | |||
| t.info type=strds input=precipitation_seasonal | |||
| </source> | |||
|  +-------------------- Space Time Raster Dataset -----------------------------+ | |||
|  |                                                                            | | |||
|  +-------------------- Basic information -------------------------------------+ | |||
|  | Id: ........................ precipitation_seasonal@meteo | |||
|  | Name: ...................... precipitation_seasonal | |||
|  | Mapset: .................... meteo | |||
|  | Creator: ................... veroandreo | |||
|  | Temporal type: ............. absolute | |||
|  | Creation time: ............. 2015-08-23 21:50:26.134279 | |||
|  | Modification time:.......... 2015-08-23 21:50:34.365946 | |||
|  | Semantic type:.............. mean | |||
|  +-------------------- Absolute time -----------------------------------------+ | |||
|  | Start time:................. 2014-03-20 00:00:00 | |||
|  | End time:................... 2015-03-20 00:00:00 | |||
|  | Granularity:................ 1 day | |||
|  | Temporal type of maps:...... interval | |||
|  +-------------------- Spatial extent ----------------------------------------+ | |||
|  | North:...................... -30.0 | |||
|  | South:...................... -50.0 | |||
|  | East:.. .................... -50.0 | |||
|  | West:....................... -70.0 | |||
|  | Top:........................ 0.0 | |||
|  | Bottom:..................... 0.0 | |||
|  +-------------------- Metadata information ----------------------------------+ | |||
|  | Raster register table:...... raster_map_register_be1ca044a59d49509e57a413e3781bc0 | |||
|  | North-South resolution min:. 1.0 | |||
|  | North-South resolution max:. 1.0 | |||
|  | East-west resolution min:... 1.0 | |||
|  | East-west resolution max:... 1.0 | |||
|  | Minimum value min:.......... 89.0 | |||
|  | Minimum value max:.......... 94.0 | |||
|  | Maximum value min:.......... 89.0 | |||
|  | Maximum value max:.......... 94.0 | |||
|  | Aggregation type:........... sum | |||
|  | Number of registered maps:.. 4 | |||
|  | | |||
|  | Title: | |||
|  | Aggregated precipitation | |||
|  | Description: | |||
|  | Aggregated seasonal precipitation dataset | |||
|  | Command history: | |||
|  | # 2015-08-23 21:50:26  | |||
|  | t.rast.aggregate.ds input="precipitation_daily" | |||
|  |     output="precipitation_seasonal" sample="points" type="stvds" | |||
|  |     base="prec_seasonal" method="sum" sampling="contains" | |||
|  | # 2015-08-23 21:50:34  | |||
|  | t.support input="precipitation_seasonal" | |||
|  |     title="Aggregated precipitation" | |||
|  |     description="Aggregated seasonal precipitation dataset" | |||
|  |  | |||
|  +----------------------------------------------------------------------------+ | |||
| At the beginning we created 400 maps, remember??? We'll check now that only the maps "contained" in the period start_date-end_date of the stvds are used for the aggregation (the rest are left aside). That's why we use sampling=contains. Check {{cmd|t.rast.aggregate.ds}} for other method and sampling options. | |||
| <source lang="bash"> | |||
| # check that the sum is 365 | |||
| t.rast.series in=precipitation_seasonal method=sum out=suma_prec_seasonal | |||
| d.mon wx0 | |||
| d.rast suma_prec_seasonal | |||
| # use GUI tools to check raster values | |||
| </source> | |||
| [[Category: Documentation]] | [[Category: Documentation]] | ||
| [[Category:Temporal]] | [[Category:Temporal]] | ||
Revision as of 02:33, 27 August 2015
Seasonal aggregation example
This is an example showing the use of t.rast.aggregate.ds to aggregate a daily time series using a source time series with seasonal granularity. We create the daily maps for more than one year (400 maps). We then create the corresponding spatio-temporal raster data set (strds) and register maps in it.
# set the computational region and resolution
g.region -p n=-30 s=-50 e=-50 w=-70 res=1
# we do more than one year
for map in `seq 1 400` ; do
 # generate synthetic maps as a seeding
 r.mapcalc expression="daily_prec_${map} = 1"
 echo daily_prec_${map} >> map_list.txt
done
t.create type=strds temporaltype=absolute \
         output=precipitation_daily \
         title="Daily precipitation" \
         description="Test dataset with daily precipitation"
t.register -i type=raster input=precipitation_daily \
           file=map_list.txt start="2014-03-07" increment="1 days"
# check general information of the daily strds
t.info type=strds input=precipitation_daily
+-------------------- Space Time Raster Dataset -----------------------------+ | | +-------------------- Basic information -------------------------------------+ | Id: ........................ precipitation_daily@meteo | Name: ...................... precipitation_daily | Mapset: .................... meteo | Creator: ................... veroandreo | Temporal type: ............. absolute | Creation time: ............. 2015-08-23 21:08:00.744761 | Modification time:.......... 2015-08-23 21:08:10.790248 | Semantic type:.............. mean +-------------------- Absolute time -----------------------------------------+ | Start time:................. 2014-03-07 00:00:00 | End time:................... 2015-04-11 00:00:00 | Granularity:................ 1 day | Temporal type of maps:...... interval +-------------------- Spatial extent ----------------------------------------+ | North:...................... -30.0 | South:...................... -50.0 | East:.. .................... -50.0 | West:....................... -70.0 | Top:........................ 0.0 | Bottom:..................... 0.0 +-------------------- Metadata information ----------------------------------+ | Raster register table:...... raster_map_register_d14f30f1438840ac81cbfc0a554c1e69 | North-South resolution min:. 1.0 | North-South resolution max:. 1.0 | East-west resolution min:... 1.0 | East-west resolution max:... 1.0 | Minimum value min:.......... 1.0 | Minimum value max:.......... 1.0 | Maximum value min:.......... 1.0 | Maximum value max:.......... 1.0 | Aggregation type:........... None | Number of registered maps:.. 400 | | Title: | Daily precipitation | Description: | Test dataset with daily precipitation | Command history: | # 2015-08-23 21:08:00 | t.create type="strds" temporaltype="absolute" | output="precipitation_daily" title="Daily precipitation" | description="Test dataset with daily precipitation" | # 2015-08-23 21:08:10 | t.register -i type="raster" | input="precipitation_daily" file="map_list.txt" start="2014-03-07" | increment="1 days" | +----------------------------------------------------------------------------+
Now, we'll create a second time series (might be raster, vector or raster3d) of seasonal granularity. We'll then take this granularity to aggregate our daily strds. Just as an example, we'll create a spatio-temporal vector data set (stvds).
# we create 4 maps of points (one per season)
for i in `seq 1 4` ; do 
 v.random output=points_${i} n=20
done
# create the stvds
t.create type=stvds temporaltype=absolute \
         output=points \
         title="Points" \
         description="Points for aggregation"
Now, we set the seasonal granularity for the vector maps. For this, we need to create a file with the respective map names and start and end date corresponding to astronomical seasons. We'll use this file as input for t.register.
points_1|2014-03-20|2014-06-21 points_2|2014-06-21|2014-09-23 points_3|2014-09-23|2014-12-21 points_4|2014-12-21|2015-03-20
t.register type=vector input=points file=seasonal_points.txt
t.info type=stvds input=points
+-------------------- Space Time Vector Dataset -----------------------------+ | | +-------------------- Basic information -------------------------------------+ | Id: ........................ points@meteo | Name: ...................... points | Mapset: .................... meteo | Creator: ................... veroandreo | Temporal type: ............. absolute | Creation time: ............. 2015-08-23 21:10:11.462742 | Modification time:.......... 2015-08-23 21:49:59.554593 | Semantic type:.............. mean +-------------------- Absolute time -----------------------------------------+ | Start time:................. 2014-03-20 00:00:00 | End time:................... 2015-03-20 00:00:00 | Granularity:................ 1 day | Temporal type of maps:...... interval +-------------------- Spatial extent ----------------------------------------+ | North:...................... -30.260367 | South:...................... -49.990657 | East:.. .................... -50.000035 | West:....................... -69.181185 | Top:........................ 0.0 | Bottom:..................... 0.0 +-------------------- Metadata information ----------------------------------+ | Vector register table:...... vector_map_register_727ad0a4157448ee8662d4345c248267 | Number of points ........... 80 | Number of lines ............ 0 | Number of boundaries ....... 0 | Number of centroids ........ 0 | Number of faces ............ 0 | Number of kernels .......... 0 | Number of primitives ....... 80 | Number of nodes ............ 0 | Number of areas ............ 0 | Number of islands .......... 0 | Number of holes ............ 0 | Number of volumes .......... 0 | Number of registered maps:.. 4 | | Title: | Points | Description: | Points for aggregation | Command history: | # 2015-08-23 21:10:11 | t.create type="stvds" temporaltype="absolute" | output="points" title="Points" description="Points for aggregation" | # 2015-08-23 21:49:59 | t.register type="vector" input="points" | file="seasonal_points.txt" | +----------------------------------------------------------------------------+
Finally, we aggregate our daily time series "precipitation daily" into seasonally accumulated precipitation with t.rast.aggregate.ds using method=sum.
# use everything between start date and end date
t.rast.aggregate.ds input=precipitation_daily \
                    output=precipitation_seasonal \
                    sample=points type=stvds \
                    base=prec_seasonal \
                    method=sum sampling=contains
# update information for the newly created seasonal time series
t.support input=precipitation_seasonal \
          title="Aggregated precipitation" \
          description="Aggregated seasonal precipitation dataset"
# check info                 
t.info type=strds input=precipitation_seasonal
+-------------------- Space Time Raster Dataset -----------------------------+ | | +-------------------- Basic information -------------------------------------+ | Id: ........................ precipitation_seasonal@meteo | Name: ...................... precipitation_seasonal | Mapset: .................... meteo | Creator: ................... veroandreo | Temporal type: ............. absolute | Creation time: ............. 2015-08-23 21:50:26.134279 | Modification time:.......... 2015-08-23 21:50:34.365946 | Semantic type:.............. mean +-------------------- Absolute time -----------------------------------------+ | Start time:................. 2014-03-20 00:00:00 | End time:................... 2015-03-20 00:00:00 | Granularity:................ 1 day | Temporal type of maps:...... interval +-------------------- Spatial extent ----------------------------------------+ | North:...................... -30.0 | South:...................... -50.0 | East:.. .................... -50.0 | West:....................... -70.0 | Top:........................ 0.0 | Bottom:..................... 0.0 +-------------------- Metadata information ----------------------------------+ | Raster register table:...... raster_map_register_be1ca044a59d49509e57a413e3781bc0 | North-South resolution min:. 1.0 | North-South resolution max:. 1.0 | East-west resolution min:... 1.0 | East-west resolution max:... 1.0 | Minimum value min:.......... 89.0 | Minimum value max:.......... 94.0 | Maximum value min:.......... 89.0 | Maximum value max:.......... 94.0 | Aggregation type:........... sum | Number of registered maps:.. 4 | | Title: | Aggregated precipitation | Description: | Aggregated seasonal precipitation dataset | Command history: | # 2015-08-23 21:50:26 | t.rast.aggregate.ds input="precipitation_daily" | output="precipitation_seasonal" sample="points" type="stvds" | base="prec_seasonal" method="sum" sampling="contains" | # 2015-08-23 21:50:34 | t.support input="precipitation_seasonal" | title="Aggregated precipitation" | description="Aggregated seasonal precipitation dataset" | +----------------------------------------------------------------------------+
At the beginning we created 400 maps, remember??? We'll check now that only the maps "contained" in the period start_date-end_date of the stvds are used for the aggregation (the rest are left aside). That's why we use sampling=contains. Check t.rast.aggregate.ds for other method and sampling options.
# check that the sum is 365
t.rast.series in=precipitation_seasonal method=sum out=suma_prec_seasonal
d.mon wx0
d.rast suma_prec_seasonal
# use GUI tools to check raster values