WMT多维

此模块实现了本文中提出的WMTS多维域发现扩展 document .

此文档将非常实用,强烈建议您阅读上面链接的文档,以便更好地了解所实现的多维域发现扩展。

所有描述的操作(包括IS可选参数和其他扩展)都已实现,只有域发现操作的其余接口未实现。

这个 GetFeature 操作仅支持配置文件GML 3.1作为功能信息格式(“application/GML+xml;version=3.1”)和 GetHistogram 仅操作支持 text/xml 作为输出格式。

此模块支持定义良好的尺寸,如高程和时间,以及自定义尺寸。

安装

这是一个社区模块,这意味着它在geoserver官方版本中不可用,需要手动安装。

可以按照以下步骤安装此模块:

  1. 从下载此模块包 nightly builds ,模块版本应与所需的地理服务器版本匹配。

  2. 将包中的内容提取到 WEB-INF/lib 地理服务器安装目录。

备注

简介 wmts-multidimensional 可用于在激活此模块的情况下构建GeoServer,例如。 mvn clean install -Pwmts-multidimensional -T4 -DskipTests .

简单的 DescribeDomains 请求可用于测试模块是否正确安装,请求可针对WMTS服务已知的任何层发出。例如,使用演示层 tiger:poly_landmarks GeoServer附带:

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

结果应该类似于以下内容,该层没有任何域:

<?xml version="1.0" encoding="UTF-8"?><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" minx="0.0" miny="0.0" maxx="-1.0" maxy="-1.0"/>
  </SpaceDomain>
</Domains>

如果模块安装不正确,结果将是一个异常,说明此操作不可用:

<ExceptionReport version="1.1.0" xmlns="http://www.opengis.net/ows/1.1"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.opengis.net/ows/1.1 http://geowebcache.org/schema/ows/1.1.0/owsExceptionReport.xsd">
  <Exception exceptionCode="OperationNotSupported" locator="request">
    <ExceptionText>describedomains is not implemented</ExceptionText>
  </Exception>
</ExceptionReport>

GetCapabilities

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

<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

图层尺寸的配置。

在演示模式下,选择“到” 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

允许翻页浏览域值(如果域的值太多,并且客户端仍希望获取所有值,则对描述的域进行补充,一次一页)

GetHistogram

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

GetFeature

枚举实际维度的可能值组合,返回功能列表以及使用与功能信息操作相同格式的维度值(“application/gml+xml;version=3.1”)。

请注意,当前没有此操作的RESTful实现。

DescribeDomains

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

名字

强制性的

描述

服务=WMT

是的

服务类型标识符

请求=描述域

是的

操作名称

Version=1.0.0

是的

此操作的标准和架构版本

是的

层标识符

TileMatrixSet

是的

瓦片矩阵集标识符

bbox=minx、miny、maxx、maxy

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

DimensionIdentifier

每个维度最多一个,范围称为“最小/最大”,限制此维度的域

领域

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

ExpandLimit

一个数值,大于或等于零。如果唯一域值的数目低于 ExpandLimit 然后,域以逗号分隔的值列表的形式完整地表示,否则以紧凑的形式表示为 start--end . 如果未指定,服务器假定内置限制为200,并允许客户端指定最大为10000的值,可以通过用户界面、在WMTS面板(服务器默认设置)中逐层调整值。

../../_images/expandLimitConfig.png

配置域扩展限制。

这个 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>

从上面的信息我们可以看出我们有三个维度 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

如果“多维”感兴趣的区域太大,无法在单个快照中返回,则此操作对于浏览给定域的值非常有用。

名字

强制性的

描述

服务=WMT

是的

服务类型标识符

请求=GetDomainValues

是的

操作名称

Version=1.0.0

是的

此操作的标准和架构版本

是的

层标识符

bbox=minx、miny、maxx、maxy

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

DimensionIdentifier

每个维度最多一个,范围称为“最小/最大”,限制此维度的域

是的

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

FromValue

为分页目的设置域枚举的开头。结果不包括在内

排序

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

限制

此调用返回的最大值数。如果未指定,服务器假定内置限制为1000,并允许客户机指定最大为10000的值。

例如,假设一个“提升”域的值为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>

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

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

GetHistogram

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

此操作可用的参数为:

名字

强制性的

描述

服务=WMT

是的

服务类型标识符

请求=获取柱状图

是的

操作名称

Version=1.0.0

是的

此操作的标准和架构版本

是的

层标识符

TileMatrixSet

是的

瓦片矩阵集标识符

bbox=minx、miny、maxx、maxy

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

DimensionIdentifier

每个维度最多一个,范围称为“最小/最大”,限制此维度的域

直方图

是的

计算柱状图的维度的名称

分辨率

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

格式

所需的输出格式,默认为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>

GetFeature

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

此操作可用的参数为:

名字

强制性的

描述

服务=WMT

是的

服务类型标识符

请求=获取功能

是的

操作名称

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 操作结果。