MS RFC 111:MapCache对动画时间序列的支持

日期

2014/05

作者

杰罗姆·维伦纽夫·拉鲁切

联系

jlarouche@mapgears.com

状态

草稿

版本

MAPCACHE 1.4

最后更新

2014/05/14

1。动机

当前,如果在请求中使用TimeDimension在tileset上指定时间帧,则mapcache只需将所有帧堆叠在一起。显示时间序列的另一种方法是生成不同帧的动画图像。此实现将使用GIF格式创建时间序列的动画版本。

2。实施细节

这种实现只适用于单个图块请求,就像Openlayers中的单个图块映射一样,因为无法在一个地图视图上同步多个GIF图块的动画,因此播种多个图块不会产生好的结果。

2.1 GIF编码

  • 使用giflib的新gif格式输出

  • 在mapcache中使用new format write_frames函数来编写动画gif

2.2动画配置

向时间维度添加动画需要两个新属性,并使用GIF输出格式。

 <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&gt;=datetime(:start_timestamp,'unixepoch')
         and
             start_time&lt;=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>
  • “animate”属性指定是否要为TimeDimension设置动画。如果它不存在或设置为假,我们就不进行动画制作。

  • “delay”属性指定两帧之间的延迟(以百分之一秒为单位)。如果它不存在,则默认为100;如果它存在,但“animate”属性不存在,则它将被忽略。它也必须大于零。

    您还必须将输出格式(例如在服务中)设置为gif。如果您要求一个没有gif格式的动画tileset,mapcache将生成一条错误消息。

三。其他

  • 动画也可以由服务格式控制,而不是向TimeDimension添加属性。我认为用这种方式在代码中实现它更有意义,因为核心和编码函数通常不使用tileset,而是使用map请求和格式。

3.1向后不兼容

无人期待

3.2问题跟踪ID

3.4文件更改

  • include/mapacache.h

  • lib/configuration.c

  • lib/configuration_xml.c

  • lib/core.c

  • lib/dimension.c

  • lib/imageio-gif.c(新)