WMS时间¶
- 作者
Jeff McKenna
- 联系方式
jmckenna at gatewaygeomatics.com
- 最后更新
2019-11-21
在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:(可选)如果定义了该值并且请求中缺少该时间值,则使用该值。
还建议为时间层设置 :ref:`layer``filter`以同时为非WMS请求提供默认时间。如果时间项为“mytime”,时间格式为“yyyymmdd”,则可以使用以下层筛选器:
FILTER (`[mytime]` = `2004-01-01 14:10:00`)
指定时间范围¶
可以使用以下语法为 wms_timeextent 元数据(见附录C.3 WMS 1.1.1 specification 完整描述的文档):
value-—单个值。这在MapServer中不直接受支持,但通过指定与最小值和最大值相同的值,很容易实现。
value1,value2,value3,…—多个值的列表。
min/max/resolution—由其下限和上限及其分辨率定义的间隔。这在MapServer中是受支持的(但是请注意,不支持解析)。
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支持以下功能:
single value: 例如 : ...&TIME=2004-10-12&...
multiple values: 例如 : ...&TIME=2004-10-12, 2004-10-13, 2004-10-14&...
single range value: 例如 : ...&TIME=2004-10-12/2004-10-13&...
multiple range values:例如 : ...&TIME=2004-10-12/2004-10-13, 2004-10-15/2004-10-16&...
解释时间值¶
当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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | # Tile Index
LAYER
STATUS ON
NAME "time_idx"
TYPE POLYGON
DATA "the_geom from nexrad_n0r_tindex"
METADATA
"wms_title" "TIME INDEX"
"wms_srs" "EPSG:4326"
"wms_extent" "-126 24 -66 50"
"wms_timeextent" "2003-08-01/2006-12-31/PT5M"
"wms_timeitem" "datetime" #column in postgis table of type timestamp
"wms_timedefault" "2006-06-23T03:10:00Z"
"wms_enable_request" "*"
END
CONNECTION "dbname=postgis host=10.10.10.20"
CONNECTIONTYPE postgis
END
# raster layer
LAYER
NAME "nexrad-n0r-wmst"
TYPE RASTER
STATUS ON
DEBUG ON
PROJECTION
"init=epsg:4326"
END
METADATA
"wms_title" "NEXRAD BASE REF WMS-T"
"wms_srs" "EPSG:4326"
"wms_extent" "-126 24 -66 50"
"wms_timeextent" "2003-08-01/2006-12-31/PT5M"
"wms_timeitem" "datetime" #datetime is a column in postgis table of type timestamp
"wms_timedefault" "2006-06-23T03:10:00Z"
"wms_enable_request" "*"
END
OFFSITE 0 0 0
TILEITEM "filepath" #filepath is a column in postgis table with varchar of the filepath to each image
TILEINDEX "time_idx"
FILTER (`[datetime]` = `2006-06-23T03:10:00Z`)
END
|
您可以在 WCS documentation .
