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 完整描述的文档):
value
value1,value2,value3,…—多个值的列表。
min/max/resolution
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中指定时间表达式的一般方法。
此规则的例外情况:
当处理不是shapefile或通过ogr的层时,所构建的表达式的语法稍有不同。例如,上面第一个示例的过滤器中设置的表达式为([Time_Field]='2004-10-12')。
为了 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 )