NCWMS WMS扩展支持

这个 NCWMS模块 为GeoServer添加了支持WMS协议和配置的某些ncWMS扩展的能力。特别地:

  • 通过简单地提供一个颜色列表来创建命名样式的能力,它将根据请求参数及其统计信息来适应正在使用的层。

  • 能够通过许多额外参数控制getmap中的调色板应用程序

  • getTimeSeries操作,它可以检索某个点上时间序列值的csv或xy图表。

在编写提取高程系列的额外调用时,不支持横断面和netcdf元数据。然而,扩展并不是特定于netcdf的,而是可以与任何单个带状栅格层一起使用。

动态调色板样式格式

添加了新的“动态调色板”样式格式,它接受调色板,每行一种颜色,定义要应用于栅格数据的颜色行进。可以使用这些可能的语法(与ncwms相同)定义每种颜色:

  • #RRGGBB

  • #AARRGGBB

  • 0xRRGGBB

  • 0xAARRGGBB

可以通过以百分号开头的行在文件中添加注释。例如,从红到蓝的进程可能如下所示:

% Red to blue progression
#FF0000
#0000FF
../../_images/redblue-editor.png

配置动态调色板样式

几个现成的调色板来自流行的“彩色啤酒厂”网站可在 ncWMS source code repository .

调色板动态转换为SLD,并使用 动态颜色映射生成 尤其是模块,上面的样式转换为以下样式:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <sld:StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" version="1.0.0">
 3   <sld:NamedLayer>
 4     <sld:Name/>
 5     <sld:UserStyle>
 6       <sld:Name/>
 7       <sld:FeatureTypeStyle>
 8         <sld:Transformation>
 9           <ogc:Function name="ras:DynamicColorMap">
10             <ogc:Function name="parameter">
11               <ogc:Literal>data</ogc:Literal>
12             </ogc:Function>
13             <ogc:Function name="parameter">
14               <ogc:Literal>opacity</ogc:Literal>
15               <ogc:Function name="env">
16                 <ogc:Literal>OPACITY</ogc:Literal>
17                 <ogc:Literal>1.0</ogc:Literal>
18               </ogc:Function>
19             </ogc:Function>
20             <ogc:Function name="parameter">
21               <ogc:Literal>colorRamp</ogc:Literal>
22               <ogc:Function name="colormap">
23                 <ogc:Literal>rgb(255,0,0);rgb(0,0,255)</ogc:Literal>
24                 <ogc:Function name="env">
25                   <ogc:Literal>COLORSCALERANGE_MIN</ogc:Literal>
26                   <ogc:Function name="bandStats">
27                     <ogc:Literal>0</ogc:Literal>
28                     <ogc:Literal>minimum</ogc:Literal>
29                   </ogc:Function>
30                 </ogc:Function>
31                 <ogc:Function name="env">
32                   <ogc:Literal>COLORSCALERANGE_MAX</ogc:Literal>
33                   <ogc:Function name="bandStats">
34                     <ogc:Literal>0</ogc:Literal>
35                     <ogc:Literal>maximum</ogc:Literal>
36                   </ogc:Function>
37                 </ogc:Function>
38                 <ogc:Function name="env">
39                   <ogc:Literal>BELOWMINCOLOR</ogc:Literal>
40                   <ogc:Literal>rgba(0,0,0,0)</ogc:Literal>
41                 </ogc:Function>
42                 <ogc:Function name="env">
43                   <ogc:Literal>ABOVEMAXCOLOR</ogc:Literal>
44                   <ogc:Literal>rgba(0,0,0,0)</ogc:Literal>
45                 </ogc:Function>
46                 <ogc:Function name="env">
47                   <ogc:Literal>LOGSCALE</ogc:Literal>
48                   <ogc:Literal>false</ogc:Literal>
49                 </ogc:Function>
50                 <ogc:Function name="env">
51                   <ogc:Literal>NUMCOLORBANDS</ogc:Literal>
52                   <ogc:Literal>254</ogc:Literal>
53                 </ogc:Function>
54               </ogc:Function>
55             </ogc:Function>
56           </ogc:Function>
57         </sld:Transformation>
58         <sld:Rule>
59           <sld:RasterSymbolizer/>
60         </sld:Rule>
61       </sld:FeatureTypeStyle>
62     </sld:UserStyle>
63   </sld:NamedLayer>
64 </sld:StyledLayerDescriptor>

上面解释了如何应用调色板:

  • 默认情况下,在最小值和最大值之间生成254种颜色的调色板,加上一种颜色用于最小值以下的内容,另一种颜色用于最大值以上的内容。

  • 可以使用GetMap传递最小值和最大值 env 参数,如果未提供,则从配置的频带统计信息中提取(在层配置中找到)

  • 可以控制调色板的整体不透明度(使用介于0和1之间的值以符合SLD不透明度描述)。

  • 刻度可以是线性的,也可以是对数的。

../../_images/bandrange.png

Editing the defaults for min/max scale range values in the GeoServer layer editor

以上参数都可以随意使用,通过典型的环境变量方法来控制调色板的生成。但是,也可以使用NCWMS自己的扩展,在请求中添加直接参数。有关详细信息,请参阅以下部分。

NCWMS GetMap扩展

该模块还添加了一个动态转换器,它获取NCWMS getmap供应商参数并将其映射到动态调色板期望值。特别是(从NCWMS手册中复制参数描述,带有特定于地理服务器的注释):

  • colorscalerange:以min,max的形式表示,这是用于绘制数据的比例范围(映射到colorscalerange_min和colorscalerange_max env vars)

  • numColorBands:绘制数据的离散颜色数。必须介于2和250之间(映射到numColorBands env变量)

  • AboveMaxColor:绘制超出刻度范围最大端值的颜色。颜色的形式是0xRRGGBB或0xAARRGGBB,它还接受“透明”和“延伸”

  • belowmincolor:绘制低于刻度范围最小端值的颜色。颜色的形式是0xRRGGBB或0xAARRGGBB,它还接受“透明”和“延伸”

  • 对数刻度:“真”或“假”-是否用对数刻度绘制数据

  • 不透明度:最终输出图像的不透明度百分比,介于0和100之间(通过将其转换为介于0和1之间的数字映射到不透明度env var)

  • 动画:“真”或“假”-是否生成动画。ncWMS文件规定时间必须为 starttime/endtime ,但当前时间需要是离散时间列表。动画要求使用“image/gif”作为响应格式(作为唯一支持动画的格式)

下面是一些基于“ArcSample”ArcGrid采样层的示例,其中包含了年降水量数据。此层提供的一个频段已配置为默认范围0到6000。

../../_images/redblue-default.png
  • 采用对数比例 &COLORSCALERANGE=1,6000&LOGSCALE=true (对数刻度需要正最小值)

../../_images/redblue-logscale.png
  • 在对数模式下只使用5种颜色 &COLORSCALERANGE=1,6000&LOGSCALE=true&NUMCOLORBANDS=5

../../_images/redblue-numcolors.png
  • 限制范围并通过添加 &COLORSCALERANGE=100,2000&BELOWMINCOLOR=0xFFFF00&ABOVEMAXCOLOR=0xAAAAAA

../../_images/redblue-range.png

NCWMS getCapabilities扩展

NcWMS允许用户通过添加 &dataset=datasetName 参数添加到请求中。

虽然geoserver没有数据集的概念,但ncwms扩展允许使用相同的参数按名称对工作区、图层和图层组进行筛选。

例如:

  • 获取“topp”工作区中的所有内容:http://localhost:8080/geoserver/ows?服务=wms&version=1.3.0&request=getCapabilities&dataset=topp

  • 只获取“topp:states”层:http://localhost:8080/geoserver/ows?service=wms&version=1.3.0&request=getcapabilities&dataset=topp:状态

  • 获取“塔斯马尼亚”层组:http://localhost:8080/geoserver/ows?服务=WMS&version=1.3.0&request=getCapabilities&dataset=tasmania

NCWMS GetTimeSeries操作

NCWMS提供了一个getTimeSeries操作,该操作可以使用与getFeatureInfo操作类似的语法在某个点上检索值的时间序列。时间序列可以以PNG或JPEG图像中的图表或CSV格式检索。

例如:

  • 以csv:http://localhost:8080/geoserver/wms格式获取时间序列?service=wms&version=1.1.1&request=getTimeSeries&format=image%2fjpeg&time=2008-10-31t00:00:00.000z/2008-11-01t00:00:00.000z&querylayers=watertemp&styles&layers=watertemp&infou format=text%2fsv&featureu count=50&x=50&y=50&srs=epsg%3a4326&width=101&height=101&bbox=3.724365234375%2c40.8142089843751%2c5.943603515625%2c43.03344726562501

  • 以png:http://localhost:8080/geoserver/wms的形式获取时间序列?service=wms&version=1.1.1&request=getTimeSeries&format=image%2fjpeg&time=2008-10-31t00:00:00.000z/2008-11-01t00:00:00.000z&querylayers=watertemp&styles&layers=watertemp&infou format=image%2fpng&featureu count=50&x=50&y=50&srs=epsg%3a4326&width=101&height=101&bbox=3.724365234375%2c40.8142089843751%2C5.9436035156225%2C43.03344726562501

  • 以JPG格式获取时间序列:http://localhost:8080/geoserver/wms?service=wms&version=1.1.1&request=getTimeSeries&format=image%2fjpeg&time=2008-10-31t00:00:00.000z/2008-11-01t00:00:00.000z&querylayers=watertemp&styles&layers=watertemp&infou format=image%2fjpg&featureu count=50&x=50&y=50&srs=epsg%3a4326&width=101&height=101&bbox=3.724365234375%2c40.8142089843751%2C5.9436035156225%2C43.03344726562501

INFO U格式接受以下值: image/pngimage/jpgtext/csv

时间参数接受WMS标准中为其他操作定义的时间范围(见06-042 Web地图服务器实现规范的附录D)。示例:

  • TIME=2008-10-31T00:00:00.000Z/2008-11-01T00:00:00.000Z

  • TIME=2008-10-31T00:00:00.000Z/2008-10-31T00:00:00.000Z

由于GeoServer 2.17,即使ncWMS规范没有明确支持,TIME参数也支持另外两种语法:

  1. 时间列表:

    • 例子: TIME=2014-01,2015-01,2016-01,2017-01,2018-01

    • 例子: TIME=2017-01-01T00:00:00Z,2017-02-01T00:00:00Z,2017-01-03T00:00:00Z

  2. 在一定范围内的周期时间:

    • 例子: TIME=2015-01/2019-01/P1Y

备注

  • GeoServer将列表中的缩短时间规范解析为时间范围。因此,像2014-01这样的时间将代表2014年1月的整个月份,因此时间范围:2014-01-01T00:00:00/2014-01-31T23:59:59。

  • 通过周期规范表示的月和年(作为实例P2M,P1Y)被认为分别由30天和365.25天组成。因此,2000-04/2000-12/P1M这样的周期间隔将被解析为从2000年4月到2000年12月的时间瞬间列表,周期为30天:

    • 2000年4月1日00:00:00

    • 2000年5月1日00:00:00

    • 五月 31 2000年00:00:00

    • 六月 30 2000年00:00:00

    • 七月 30 2000年00:00:00

    • 八月 29 2000年00:00:00

    • 九月 28 2000年00:00:00

    • 十月 28 2000年00:00:00

    • 十一月 27 2000年00:00:00

    • 12月 27 2000年00:00:00

    • 因此,如果原始数据集具有每个月第一天的条目,则此请求将仅返回两个值:4月01和5月01。在这种情况下,您可以考虑在层的时间维度上启用最接近匹配。

示例csv输出:

# Latitude: 40.396728515625
# Longitude: -0.6921386718750019
Time (UTC),Temperature (degrees)
2014-01-01T00:00:00.000Z,0.4194810092449188
2014-02-01T00:00:00.000Z,0.8373379707336426
2014-03-01T00:00:00.000Z,3.1670899391174316
2014-04-01T00:00:00.000Z,4.932330131530762

示例图表输出:

../../_images/geoserver-GetTimeSeries.png

注: 由于GeoServer 2.17,结果图表中不会报告nodata像素。此外,CSV列表中与nodata像素相关的条目将报告时间,但不会报告像素值,如下例所示,用于时间2014-02-01和2014-05-01:

# Latitude: 40.396728515625
# Longitude: -0.6921386718750019
Time (UTC),Temperature (degrees)
2014-01-01T00:00:00.000Z,0.4194810092449188
2014-02-01T00:00:00.000Z,
2014-03-01T00:00:00.000Z,3.1670899391174316
2014-04-01T00:00:00.000Z,4.932330131530762
2014-05-01T00:00:00.000Z,
2014-06-01T00:00:00.000Z,0.8373379707336426

NcWMS扩展配置

NcWMS扩展在WMS管理页面底部添加一个面板:

../../_images/admin.png

期权

描述

GetTimeSeries线程池大小

用于计算GetTimeSeries结果的线程池大小(并行化以加速计算)

GetTimeSeries中的最大次数

GetTimeSeries将处理的最大次数。请求更多次数的用户将得到服务异常。配置是在管理员第一次点击保存在WMS页面时设置的,即使值为0(从那时起,GetTimeSeries将独立于WMS最大维度设置)。

Previous: 升级