WMS时间

作者

杰夫麦克纳

联系

jmckenna在gatewaygeomatics.com

最后更新

2019-11-21

介绍

WMS服务器可以为临时请求提供支持。这是通过在请求中提供带有时间值的时间参数来完成的。MapServer 4.4及更高版本支持解释时间参数并将结果值转换为适当的请求。

在MapServer中启用时间支持

时间模式

WMS规定用于时间请求的基本格式基于ISO 8601:1988(e)“扩展”格式。MapServer支持在ISO 8601规范中定义的一组有限的模式,以及一些其他有用但不符合ISO 8601的模式。以下是当前支持的模式列表:

表1。支持的时间模式

时间模式

实例

YYYYMMDD

20041012

yyyy-mm-ddthh:mm:ssz年

2004年10月12日13:55:20Z

yyyy-mm-ddthh:mm:ss年-月-日

2004年10月12日13:55:20

年-月-日hh:mm:ss

2004年10月12日13:55:20

年-月-日时:月

2004年10月12日13:55

年-月-日hh:mm

2004年10月12日13:55

YYYY-MM-DDTHH

2004年10月12日13

YYY-MM-DH-HH

2004年10月12日至13日

年-月-日

2004-10-12

年-月

2004—10

YYYY

2004

THH:毫米:SSZ

T13:55∶20Z

厚度:mm:ss

T13:55∶20

设置具有时间支持的WMS层

要使有效的WMS层具有时间支持,用户必须在层级别定义以下元数据:

  • wms_timeextent:

  • wms_timeitem:

  • wms_timedefault:

还建议设置 LAYER FILTER mytime,

FILTER (`[mytime]` = `2004-01-01 14:10:00`)

指定时间范围

可以使用以下语法为 wms_timeextent 元数据(见附录C.3 WMS 1.1.1 specification 完整描述的文档):

  1. value

  2. value1,value2,value3,…—多个值的列表。

  3. min/max/resolution

  4. min1/max1/res1,min2/max2/res2,…—多个间隔的列表。

WMS服务器层示例

LAYER
  NAME "earthquakes"
  METADATA
    "wms_title"    "Earthquakes"
    "wms_timeextent" "2004-01-01/2004-02-01"
    "wms_timeitem" "TIME"
    "wms_timedefault" "2004-01-01 14:10:00"
    "wms_enable_request" "*"
  END
  TYPE POINT
  STATUS ON
  DATA "quakes"
  FILTER (`[TIME]`=`2004-01-01 14:10:00`)
  CLASS
    ..
  END
END

获取能力输出

如果层设置正确,则请求服务器上的功能将输出一个维度元素。以下是为时间支持配置的层的getCapabilities结果示例:

<Layer queryable="0" opaque="0" cascaded="0">
    <Name>earthquakes</Name>
    <Title>Earthquakes</Title>
    <SRS>EPSG:4326</SRS>
    <LatLonBoundingBox minx="-131.02" miny="24.84" maxx="-66.59" maxy="48.39" />
    <BoundingBox SRS="EPSG:4326"
                minx="-131.02" miny="24.84" maxx="-66.59" maxy="48.39" />
    <Dimension name="time" units="ISO8601"/>
    <Extent name="time" default="2004-01-01 14:10:00" nearestValue="0">2004-01-01/2004-02-01</Extent>
</Layer>

支持的时间请求

使用时间参数发送请求时,可以指定不同类型的时间值。MapServer支持以下功能:

  • :

  • :

  • :

  • :

解释时间值

当MapServer接收到带有时间参数的请求时,它将时间请求转换为有效表达式,这些表达式被分配给具有时间意识的层上的筛选器参数。以下是处理不同类型请求的一些示例(此处将wms-timeitem定义为“time-field”):

  • 单值(2004-10-12) transforms to (`[时间域]`eq`2004-10-12`)

  • 多值(2004-10-12、2004-10-13) transform to (`[时间域]`eq`2004-10-12`或`[时间域]`eq`2004-10-13`)

  • 单量程:2004-10-12/2004-10-13 transforms to[时间域]`GE`2004-10-12)和([时间域]`LE`2004-10-13))

  • 多个范围(2004-10-12/2004-10-13、2004-10-15/2004-10-16) transform to[时间域]`GE`2004-10-12``和`[时间域]`LE`2004-10-13)或([时间域]`GE`2004-10-15``和`[时间域]`LE`2004-10-16

如以上示例所示,所有字段和值都写在back tics(`)中—这是在mapserver中指定时间表达式的一般方法。

此规则的例外情况:

  1. 当处理不是shapefile或通过ogr的层时,所构建的表达式的语法稍有不同。例如,上面第一个示例的过滤器中设置的表达式为([Time_Field]='2004-10-12')。

  2. 为了 Postgis/PostgreSQL 层,生成的时间表达式使用 date_trunc PostgreSQL中提供的函数。例如,如果用户传递的时间值为“2004-10-12”,则过滤器中设置的表达式为日期“turnc('day',time_field)='2004-10-12'。使用date_trunc函数允许请求使用时间分辨率的概念。在上面的示例中,对于“2004-10-12”的请求,mapserver通过分析时间字符串确定分辨率为“day”,结果给出所有与日期2004-10-12匹配的记录,而不管数据库中设置的小时/分钟/秒值如何。有关日期转换函数的更多信息,请参阅 PostgreSQL documentation .

限制要使用的时间格式

用户可以在Web级别的元数据中定义发送请求时要使用的时间格式。例如,用户可以定义以下两种格式:

"wms_timeformat" "YYYY-MM-DDTHH, YYYY-MM-DDTHH:MM"

另一个例子是基于时间数据的WMS层,该数据包含每分钟采集的精确时间值(例如,2004-10-12t13:55、2004-10-12t13:56、2004-10-12 t13:57,…)。通常,对这样一个层的有效请求需要时间值和下面的数据一样完整。通过定义一组要使用的模式,MapServer引入了在执行查询时要使用的解析概念。使用上面的示例,请求时间=2004-10-12t13:55是有效的,请求时间=2004-10-12t13也是有效的,它将返回为该小时所取的所有元素。

请注意,此功能仅在基于shapefiles和ogr的层上可用。

带Postgis栅格图像瓷砖索引的WMS-T示例

此示例当前需要最新的4.9cvs构建!

下面是一个使用postgis tileindex的栅格WMS-T实例的mapfile片段示例。这个例子显示了在爱荷华州U运行的nexrad基本反射率,网址为http://mesenet.agron.iastate.edu/cgi-bin/wms/nexrad/nwr-t.cgi?服务=WMS&请求=getCapabilities

 1#  Tile Index
 2LAYER
 3 STATUS ON
 4 NAME "time_idx"
 5 TYPE POLYGON
 6 DATA "the_geom from nexrad_n0r_tindex"
 7 METADATA
 8   "wms_title" "TIME INDEX"
 9   "wms_srs"   "EPSG:4326"
10   "wms_extent" "-126 24 -66 50"
11   "wms_timeextent" "2003-08-01/2006-12-31/PT5M"
12   "wms_timeitem" "datetime" #column in postgis table of type timestamp
13   "wms_timedefault" "2006-06-23T03:10:00Z"
14   "wms_enable_request" "*"
15 END
16 CONNECTION "dbname=postgis host=10.10.10.20"
17 CONNECTIONTYPE postgis
18END
19
20# raster layer
21LAYER
22 NAME "nexrad-n0r-wmst"
23 TYPE RASTER
24 STATUS ON
25 DEBUG ON
26 PROJECTION
27   "init=epsg:4326"
28 END
29 METADATA
30   "wms_title" "NEXRAD BASE REF WMS-T"
31   "wms_srs"   "EPSG:4326"
32   "wms_extent" "-126 24 -66 50"
33   "wms_timeextent" "2003-08-01/2006-12-31/PT5M"
34   "wms_timeitem" "datetime" #datetime is a column in postgis table of type timestamp
35   "wms_timedefault" "2006-06-23T03:10:00Z"
36   "wms_enable_request" "*"
37 END
38 OFFSITE 0 0 0
39 TILEITEM "filepath" #filepath is a column in postgis table with varchar of the filepath to each image
40 TILEINDEX "time_idx"
41 FILTER (`[datetime]` = `2006-06-23T03:10:00Z`)
42END

您可以在 WCS documentation .

未来增加

  • 支持特殊时间值:“当前”。

限制和已知错误

  • 模式“YYYYMMDD”在Windows上不起作用。( Bug#970