WMTS多维用法

所有描述的操作,包括IS可选参数和其他扩展都实现了,只有域发现操作的REST接口没有实现。

这个 GetFeature 操作仅支持配置文件GML 3.1作为要素信息格式(“APPLICATION/GML+XML;Version=3.1”)和 GetHistogram 操作仅支持 text/xml 作为输出格式。

此模块支持定义明确的维度,如标高和时间,但也支持自定义维度。

GetCapabilities

WMTS的默认行为是在功能文档中列出某个维度中可用的所有值,如下所示:

<Dimension>
  <ows:Identifier>elevation</ows:Identifier>
  <Default>0.0</Default>
  <Value>0.0</Value>
  <Value>200.0</Value>
  <Value>400.0</Value>
  <Value>600.0</Value>
  <Value>800.0</Value>
  <Value>1000.0</Value>
  <Value>1200.0</Value>
  <Value>1400.0</Value>
  <Value>1600.0</Value>
  <Value>1800.0</Value>
  <Value>2000.0</Value>
  <Value>3000.0</Value>
  <Value>4000.0</Value>
  <Value>5000.0</Value>
  <Value>6000.0</Value>
  <Value>7000.0</Value>
  <Value>8000.0</Value>
  <Value>9000.0</Value>
</Dimension>

本模块将改为考虑用户选择的演示模式:

../../_images/layer_dimensions.png

Configuration of a layer dimensions.

在演示模式下,选择 Continuous intervalResolution and interval 相反,我们将看到类似以下内容:

<Dimension>
  <ows:Identifier>elevation</ows:Identifier>
  <Default>0.0</Default>
  <Value>0.0--9000.0</Value>
</Dimension>

新引入的操作和相关格式的说明也将添加到功能文档中。

运营

本模块向WMTS服务添加了三个新操作,详细说明见 document

操作

描述

DescribeDomains

描述压缩文档中的所有维度域,以及请求截获的二维空间的受限边界框。

GetDomainValues

允许分页浏览域值(补充DescribeDomain值以防该域的值太多,而客户端仍然希望一次一页地获取所有值)

GetHistogram

在给定分散的域描述和间隔的情况下,此操作将间隔划分为常规存储桶,并为每个存储桶提供项目计数。

GetFeature

枚举实际的尺寸可能值组合,使用与特征信息操作相同的格式(“APPLICATION/GML+XML;VERSION=3.1”)返回特征和尺寸值的列表。

请注意,目前还没有该操作的REST风格的实现。

DescribeDomains

此操作有助于了解哪些域在我们的层维度中可用,以及它们如何相互关联。可用于此操作的参数包括:

名字

强制性

描述

服务=WMTS

服务类型标识

请求=DescribeDomones

操作名称

Version=1.0.0

此操作的标准和架构版本

图层

层标识

TileMatrixSet

切片矩阵集合标识符

Bbox=minx、miny、Maxx、Maxy

不是

以CRS单位表示的边界框角(左下角、右上角)

DimensionIdentifier

不是

每个维度最多一个维度,描述为最小/最大的范围,限制该维度的域

网域

不是

要返回的域名的逗号分隔列表,以防只需要一个子集。空间域由“bbox”标识。

ExpandLimit

不是

大于或等于零的数值。如果唯一域值的数量低于 ExpandLimit 则将域完整地表示为逗号分隔的值列表,否则以紧凑形式表示,如下所示 start--end 。服务器假定在未指定的情况下内置限制为200%,并允许客户端指定高达10000的值,这些值可以通过用户界面、在WMTS面板(服务器默认设置)和逐层基础上进行调整。

../../_images/expandLimitConfig.png

Configuration domain expansion limits.

这个 bbox 参数允许客户端限制 DescribeDomains 操作到某个空间区域,默认情况下将使用该层范围。

这个 DimensionIdentifier 参数可用于限制特定维度的域值,这对于回答特定日期哪些高程值可用等问题很有用。

一个简单的 DescribeDomains 请求将如下所示:

http://localhost:8080/geoserver/gwc/service/wmts?REQUEST=DescribeDomains&Version=1.0.0&Layer=some_layer&TileMatrixSet=EPSG:4326

结果会是这样的:

<Domains xmlns="http://demo.geo-solutions.it/share/wmts-multidim/wmts_multi_dimensional.xsd" xmlns:ows="http://www.opengis.net/ows/1.1">
  <SpaceDomain>
    <BoundingBox CRS="EPSG:4326"
     maxx="179.875" maxy="89.9375" minx="-180.125" miny="-90.125"/>
  </SpaceDomain>
  <DimensionDomain>
    <ows:Identifier>elevation</ows:Identifier>
    <Domain>0.0,200.0,400.0,600.0,800.0,1000.0</Domain>
    <Size>6</Size>
  </DimensionDomain>
  <DimensionDomain>
    <ows:Identifier>REFERENCE_TIME</ows:Identifier>
    <Domain>2016-02-23T00:00:00.000Z,2016-02-24T00:00:00.000Z</Domain>
    <Size>2</Size>
  </DimensionDomain>
  <DimensionDomain>
    <ows:Identifier>time</ows:Identifier>
    <Domain>2016-02-23T03:00:00.000Z,2016-02-23T06:00:00.000Z</Domain>
    <Size>2</Size>
  </DimensionDomain>
</Domains>

请注意,如果在层维配置页面中定义了结束属性,则结果将显示范围而不是单个值。本例中的结果如下所示:

<Domains xmlns="http://demo.geo-solutions.it/share/wmts-multidim/wmts_multi_dimensional.xsd" xmlns:ows="http://www.opengis.net/ows/1.1">
  <SpaceDomain>
    <BoundingBox CRS="EPSG:4326"
     maxx="179.875" maxy="89.9375" minx="-180.125" miny="-90.125"/>
  </SpaceDomain>
  <DimensionDomain>
    <ows:Identifier>elevation</ows:Identifier>
    <Domain>0.0/50.0,200.0/300.0,400.0/500.0</Domain>
    <Size>6</Size>
  </DimensionDomain>
  <DimensionDomain>
    <ows:Identifier>REFERENCE_TIME</ows:Identifier>
    <Domain>2016-02-23T00:00:00.000Z/2016-02-23T23:00:00.000Z,2016-02-24T00:00:00.000Z/2016-02-24T12:00:00.000Z</Domain>
    <Size>2</Size>
  </DimensionDomain>
  <DimensionDomain>
    <ows:Identifier>time</ows:Identifier>
    <Domain>2016-02-23T03:00:00.000Z/2016-02-23T06:00:00.000Z,2016-02-23T06:00:00.000Z/2016-02-23T12:00:00.000Z</Domain>
    <Size>2</Size>
  </DimensionDomain>
</Domains>

从上面的信息可以看出,我们有三个维度 timeelevationREFERENCE_TIME 以及各自的域值。

现在,让我们通过询问时间2016-02-23T03:00:00.000Z有哪些500.0米以下的海拔来看看海拔与时间维度的关系:

http://localhost:8080/geoserver/gwc/service/wmts?REQUEST=DescribeDomains&Version=1.0.0&Layer=some_layer&TileMatrixSet=EPSG:4326&elevation=0/500&time=2016-02-23T03:00:00.000Z

结果将如下所示:

<Domains xmlns="http://demo.geo-solutions.it/share/wmts-multidim/wmts_multi_dimensional.xsd" xmlns:ows="http://www.opengis.net/ows/1.1">
  <SpaceDomain>
    <BoundingBox CRS="EPSG:4326"
     maxx="179.875" maxy="89.9375" minx="-180.125" miny="-90.125"/>
  </SpaceDomain>
  <DimensionDomain>
    <ows:Identifier>elevation</ows:Identifier>
    <Domain>200.0</Domain>
    <Size>1</Size>
  </DimensionDomain>
  <DimensionDomain>
    <ows:Identifier>REFERENCE_TIME</ows:Identifier>
    <Domain>2016-02-23T00:00:00.000Z</Domain>
    <Size>1</Size>
  </DimensionDomain>
  <DimensionDomain>
    <ows:Identifier>time</ows:Identifier>
    <Domain>2016-02-23T03:00:00.000Z</Domain>
    <Size>1</Size>
  </DimensionDomain>
</Domains>

因此,对于时间2016-02-23T03:00:00.000Z,只有在200.0米处测量的值。

如果只有空间领域感兴趣,则可以使用以下请求:

http://localhost:8080/geoserver/gwc/service/wmts?REQUEST=DescribeDomains&Version=1.0.0&Layer=some_layer&TileMatrixSet=EPSG:4326&elevation=0/500&time=2016-02-23T03:00:00.000Z&domains=bbox

结果会是这样的:

<Domains xmlns="http://demo.geo-solutions.it/share/wmts-multidim/wmts_multi_dimensional.xsd" xmlns:ows="http://www.opengis.net/ows/1.1">
  <SpaceDomain>
    <BoundingBox CRS="EPSG:4326"
     maxx="179.875" maxy="89.9375" minx="-180.125" miny="-90.125"/>
  </SpaceDomain>
</Domains>

GetDomainValues

此操作对于浏览给定域的值非常有用,以防“多维”感兴趣区域太大,DescribeDomain无法一次返回这些值。

名字

强制性

描述

服务=WMTS

服务类型标识

请求=获取域值

操作名称

Version=1.0.0

此操作的标准和架构版本

图层

层标识

Bbox=minx、miny、Maxx、Maxy

不是

以CRS单位表示的边界框角(左下角、右上角)

DimensionIdentifier

不是

每个维度最多一个维度,描述为最小/最大的范围,限制该维度的域

将返回值的域的名称(不能使用“bbox”,GetDomainValues只能枚举单个值维,例如时间、海拔)。

FromValue

不是

设置域枚举的开始,用于分页目的。它不包括在结果中

FromEnd

不是

If Equals to True指定应将由FromValue设置的域枚举的开始应用于End属性。设置为True时,结果将按结束属性排序。

排序

不是

可以是“asc”或“desc”,确定枚举是从低到高,还是从高到低

限值

不是

此调用返回的最大值数。在未指定的情况下,服务器假定内置限制为1,000,并允许客户端指定一个最大为10000的值。

例如,假设一个“Elevation”域具有值1、2、3和5,并且我们通过2个元素的页面对其进行分页。客户端将在不提供“FromValue”的情况下启动,然后继续使用上一页的最后一个值作为引用:

http://localhost:8080/geoserver/gwc/service/wmts?request=GetDomainValues&Version=1.0.0&Layer=sampleLayer&domain=elevation&limit=2
<DomainValues xmlns="http://demo.geo-solutions.it/share/wmts-multidim/wmts_multi_dimensional.xsd" xmlns:ows="http://www.opengis.net/ows/1.1">
  <ows:Identifier>elevation</ows:Identifier>
  <Limit>2</Limit>
  <Sort>asc</Sort>
  <Domain>1.0,2.0</Domain>
  <Size>2</Size>
</DomainValues>
http://localhost:8080/geoserver/gwc/service/wmts?request=GetDomainValues&Version=1.0.0&Layer=sampleLayer&domain=elevation&limit=2&fromValue=2
<DomainValues xmlns="http://demo.geo-solutions.it/share/wmts-multidim/wmts_multi_dimensional.xsd" xmlns:ows="http://www.opengis.net/ows/1.1">
  <ows:Identifier>elevation</ows:Identifier>
  <Limit>2</Limit>
  <Sort>asc</Sort>
  <FromValue>2.0</FromValue>
  <Domain>3.0,5.0</Domain>
  <Size>2</Size>
</DomainValues>
http://localhost:8080/geoserver/gwc/service/wmts?request=GetDomainValues&Version=1.0.0&Layer=sampleLayer&domain=elevation&limit=2&fromValue=5
<DomainValues xmlns="http://demo.geo-solutions.it/share/wmts-multidim/wmts_multi_dimensional.xsd" xmlns:ows="http://www.opengis.net/ows/1.1">
  <ows:Identifier>elevation</ows:Identifier>
  <Limit>2</Limit>
  <Sort>asc</Sort>
  <FromValue>5.0</FromValue>
  <Domain></Domain>
  <Size>0</Size>
</DomainValues>

对于高程,从最高高程向下迭代到最低值,向后迭代可能并不少见。然后,客户端和服务器之间的交互可能如下所示:

http://localhost:8080/geoserver/gwc/service/wmts?request=GetDomainValues&Version=1.0.0&Layer=sampleLayer&domain=elevation&limit=2&sort=desc
<DomainValues xmlns="http://demo.geo-solutions.it/share/wmts-multidim/wmts_multi_dimensional.xsd" xmlns:ows="http://www.opengis.net/ows/1.1">
  <ows:Identifier>elevation</ows:Identifier>
  <Limit>2</Limit>
  <Sort>asc</Sort>
  <Domain>5.0,3.0</Domain>
  <Size>2</Size>
</DomainValues>
http://localhost:8080/geoserver/gwc/service/wmts?request=GetDomainValues&Version=1.0.0&Layer=sampleLayer&domain=elevation&limit=2&fromValue=3&sort=desc
<DomainValues xmlns="http://demo.geo-solutions.it/share/wmts-multidim/wmts_multi_dimensional.xsd" xmlns:ows="http://www.opengis.net/ows/1.1">
  <ows:Identifier>elevation</ows:Identifier>
  <Limit>2</Limit>
  <Sort>asc</Sort>
  <FromValue>3.0</FromValue>
  <Domain>2.0,1.0</Domain>
  <Size>2</Size>
</DomainValues>
http://localhost:8080/geoserver/gwc/service/wmts?request=GetDomainValues&Version=1.0.0&Layer=sampleLayer&domain=elevation&limit=2&fromValue=1&sort=desc
<DomainValues xmlns="http://demo.geo-solutions.it/share/wmts-multidim/wmts_multi_dimensional.xsd" xmlns:ows="http://www.opengis.net/ows/1.1">
  <ows:Identifier>elevation</ows:Identifier>
  <Limit>2</Limit>
  <Sort>asc</Sort>
  <FromValue>1.0</FromValue>
  <Domain></Domain>
  <Size>0</Size>
</DomainValues>

现在假设与值1、2、3、5一起,我们的end属性值分别等于5、3、4、6。

以下请求:

http://localhost:8080/geoserver/gwc/service/wmts?request=GetDomainValues&Version=1.0.0&Layer=sampleLayer&domain=elevation&limit=2&fromValue=3.5&fromEnd=true

会回来的

<DomainValues xmlns="http://demo.geo-solutions.it/share/wmts-multidim/wmts_multi_dimensional.xsd" xmlns:ows="http://www.opengis.net/ows/1.1">
  <ows:Identifier>elevation</ows:Identifier>
  <Limit>2</Limit>
  <Sort>asc</Sort>
  <Domain>3.0/4.0,1.0/5.0,5.0/6.0</Domain>
  <Size>2</Size>
</DomainValues>

对于那些习惯使用“Limit”和“Offset”的人来说,分页方法可能看起来很奇怪。它这样做的主要原因是它的性能,通过Limit和Offset对唯一值进行分页意味着数据源必须计算和收集不需要的唯一值(前一页中的值),以便找到当前页中的值。对于大的域(典型的时间序列),当一个人在域中向前移动时,这对于交互使用来说很快变得太慢。

通过指定起始点,可以通过索引跳过不需要的数据点,并且只能对当前页面数据执行不同的值计算,一旦计算出所需的结果数量,就停止计算。使用维度上的索引进行查询时,无论请求的是哪个页面,这都会导致几乎恒定的响应时间。

GetHistogram

此操作可用于提供有关特定维度的最小值和最大值之间的数据分布的信息。

可用于此操作的参数包括:

名字

强制性

描述

服务=WMTS

服务类型标识

请求=获取历史记录

操作名称

Version=1.0.0

此操作的标准和架构版本

图层

层标识

TileMatrixSet

切片矩阵集合标识符

Bbox=minx、miny、Maxx、Maxy

不是

以CRS单位表示的边界框角(左下角、右上角)

DimensionIdentifier

不是

每个维度最多一个维度,描述为最小/最大的范围,限制该维度的域

直方图

将为其计算直方图的维的名称

分辨率

不是

直方图桶的建议大小。不能为枚举维提供,将使用句点语法表示时间(例如,PT1H),使用数字表示维,或使用AUTO将决定留给服务器

格式

不是

所需的输出格式,默认为Text/html。

对象的公共参数 DescribeDomains 操作工作如上所述。目前只有 text/xml 支持输出格式。

以下示例请求时间维的直方图,分辨率为8小时,将海拔限制在500.0米到1000.0米之间:

http://localhost:8080/geoserver/gwc/service/wmts?REQUEST=GetHistogram&Version=1.0.0&Layer=some_layer&TileMatrixSet=EPSG:4326&histogram=time&resolution=PT8H&elevation=500.0/1000.0

结果会是这样的:

<Histogram xmlns="http://demo.geo-solutions.it/share/wmts-multidim/wmts_multi_dimensional.xsd" xmlns:ows="http://www.opengis.net/ows/1.1">
  <ows:Identifier>time</ows:Identifier>
  <Domain>2016-02-23T00:00:00.000Z/2016-02-25T00:00:00.000Z/PT8H</Domain>
  <Values>240,0,240,0,0,240</Values>
</Histogram>

看看结果,我们可以得出结论,500.0米到1000.0米之间的测量通常是在夜间进行的。

设置存储桶匹配,以便每个存储桶包含其第一个值,但不包含其最后一个值(该值包含在下一个存储桶中)。这对于理解结果很重要。假设我们有一个具有常规高程的数据集,从0到100,步长为10,请求调用介于0和20之间的高程。然后,结果将如下所示:

<Histogram xmlns="http://demo.geo-solutions.it/share/wmts-multidim/wmts_multi_dimensional.xsd" xmlns:ows="http://www.opengis.net/ows/1.1">
  <ows:Identifier>elevation</ows:Identifier>
  <Domain>0/30/10</Domain>
  <Values>5,3,8</Values>
</Histogram>

也就是说,这些值捕捉间隔[0,10[,[10,20[,和[20,30](以具有用于具有完全匹配20的高度的图像/特征的桶)。只有在找到极值时才会发生这种情况,在0到15之间的高程上过滤的相同请求将返回以下内容:

<Histogram xmlns="http://demo.geo-solutions.it/share/wmts-multidim/wmts_multi_dimensional.xsd" xmlns:ows="http://www.opengis.net/ows/1.1">
  <ows:Identifier>elevation</ows:Identifier>
  <Domain>0/20/10</Domain>
  <Values>5,3</Values>
</Histogram>

请注意,如果指定了end属性,则存储桶匹配将应用于范围而不是单个值。在这种情况下,桶是由范围值与桶限制的交集填充的,而不是由容器填充的。这样做是为了避免某些范围值落在每个存储桶之外,但作为副作用,相同的范围可以匹配多个存储桶。

GetFeature

此操作能够枚举实际可能的值组合。此操作的输出类似于 WFS 2.0 GetFeature 操作,它是使用与特征信息操作相同的格式的特征和尺寸值的列表。例如,此输出可用于在地图上绘制要素。

可用于此操作的参数包括:

名字

强制性

描述

服务=WMTS

服务类型标识

请求=GetFeature

操作名称

Version=1.0.0

此操作的标准和架构版本

图层

层标识

TileMatrixSet

切片矩阵集合标识符

Bbox=minx、miny、Maxx、Maxy

不是

以CRS单位表示的边界框角(左下角、右上角)

DimensionIdentifier

不是

每个维度最多一个维度,描述为最小/最大的范围,限制该维度的域

格式

所需的输出格式

对象的公共参数 DescribeDomains 操作工作如上所述。目前只有 application/gml+xml; version=3.1 支持输出格式。

使用我们为第二个请求使用的相同限制参数,该请求用作 DescribeDomains 操作a GetFeature 请求将如下所示:

http://localhost:8080/geoserver/gwc/service/wmts?REQUEST=GetFeature&Version=1.0.0&Layer=some_layer&TileMatrixSet=EPSG:4326&elevation=0/500&time=2016-02-23T03:00:00.000Z

结果会是这样的:

<?xml version="1.0" encoding="UTF-8"?><wmts:FeatureCollection xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" xmlns:wmts="http://www.opengis.net/wmts/1.0">
  <wmts:feature gml:id="FID.1681">
    <wmts:footprint>
      <gml:Polygon xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" xmlns:sch="http://www.ascc.net/xml/schematron" xmlns:xlink="http://www.w3.org/1999/xlink" srsDimension="2" srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
        <gml:exterior>
          <gml:LinearRing srsDimension="2">
            <gml:posList>-180.125 -90.125 -180.125 89.875 179.875 89.875 179.875 -90.125 -180.125 -90.125</gml:posList>
          </gml:LinearRing>
        </gml:exterior>
      </gml:Polygon>
    </wmts:footprint>
    <wmts:dimension name="elevation">200.0</wmts:dimension>
    <wmts:dimension name="time">2016-02-23T03:00:00.000Z</wmts:dimension>
    <wmts:dimension name="REFERENCE_TIME">2016-02-23T00:00:00.000Z</wmts:dimension>
  </wmts:feature>
</wmts:FeatureCollection>

请注意此结果与通讯员之间的关联 DescribeDomains 手术结果。