MS RFC 111: MapCache Support for animated time series¶
- Last Updated:
Currently if you specify a time frame in a request on a tileset with a timedimension, mapcache simply stacks all the frames onto each other. Another way to show time series is to produce an animated image of the different frames. This implementation will use the Gif format to create an animated version of the time series.
2. Implementation details¶
This implementation only work for single tile request, like a single tile map in OpenLayers, because there is no way to synchronize the animation of multiple Gif tiles on one mapview, seeding multiple tile wouldn't produce a good result.
2.1 Gif Encoding¶
New Gif format output using GifLib
New format write_frames function in MapCache to write an animated Gif
2.2 Animation configuration¶
Adding animation to a time dimension requires two new attributes to it and using the Gif output format.
<timedimension type="sqlite" default="2012-01-01" animate="true" delay="150"> <dbfile>mapcache-time.sqlite</dbfile> <query> select strftime('%Y-%m-%d',start_time) from time where source_id=:tileset and start_time>=datetime(:start_timestamp,'unixepoch') and start_time<=datetime(:end_timestamp,'unixepoch') order by end_time </query> </timedimension> <service type="wms" enabled="true"> <full_wms>assemble</full_wms> <resample_mode>bilinear</resample_mode> <format>GIF</format> <maxsize>4096</maxsize> </service>
The "animate" attribute specifies if we want to animate our timedimension. If it is not present or set to false, we don't animate.
The "delay" attribute specifies the delay between two frames in hundreth of a second. If it is not present, it defaults to 100, if it is present but the "animate" attribute isn't, it will simply be ignored. It also has to be bigger than zero.
You also have to set the output format, for example in the service, to Gif. If you ask for an animated tileset without the Gif format, MapCache will generate an error message.
The animation could also be controlled by the service format instead of adding attributes to the timedimension. I think it would make more sense to implement it that way in the code since the core and encoding functions don't normally use the tileset but the map request and the format.
3.1 Backwards Incompatibilities¶
3.2 Issue Tracking ID¶
3.4 Files Changed¶