渲染贴图/动画下载过程

这些过程允许下载大型地图和动画。

呈现的下载进程

地图和动画下载使用一组常用参数:

  • bbox :地理参考边界框,控制输出区域和所需投影

  • decoration :要添加到地图顶部的装饰布局的名称

  • decorationEnvironment : a valid value for the env parameter used when painting the decoration. Used for dynamic decoration layouts

  • time :一个WMS time 用于驱动地图中各层之间的时间选择以及控制动画中的帧生成的规范

  • widthheight :输出贴图/动画的大小(与边界框结合使用时,还控制输出贴图比例)

  • layer :从客户端的角度来看,层规范列表(因此,一个层可以由多个服务器端层组成)。当使用dwn:DecorationName层选项时,它允许定义在将装饰应用于层时将使用的特定布局。当声明了多个层时,它允许在结果图像上呈现多个图例。

  • headerheight :在渲染贴图顶部分配的标头空间的高度大小。这是一个可选参数,强制缩小贴图视图高度,以避免将标题重叠在贴图上。与层规范选项的使用相结合,允许在结果图像的顶部对装饰者进行分组。

层规范

层规范是由三个部分组成的XML结构:

  • 名称:以逗号分隔的层名称列表(最终只有一个)

  • 功能:指向功能文档的链接(可选,在定位远程WMS层时使用)

  • 参数(键、值):要添加到由该层表示的WMS请求中的额外参数(例如, elevationCQL_FILTERenv )

  • 不透明度:可选参数,范围从0到100,用于控制合并过程中半透明的层图像级别。未设置时,层图像完全不透明。请注意,这与整体地图是分开的 transparent 布尔参数。

例如:

<wps:ComplexData xmlns:dwn="http://geoserver.org/wps/download">
  <dwn:Layer>
    <dwn:Capabilities>http://demo.geo-solutions.it/geoserver/ows?service=wms&amp;version=1.1.1&amp;request=GetCapabilities</dwn:Name>
    <dwn:Name>topp:states</dwn:Name>
    <dwn:Parameter key="CQL_FILTER"><![CDATA[PERSONS > 1000000]]></dwn:Parameter>
    <dwn:Opacity>37</dwn:Opacity>
  </dwn:Layer>
</wps:ComplexData>

装修布局

这个 decoration 参数指定用于修饰地图的布局的文件名(不带扩展名)。布局是应该在请求的图像上绘制的装饰器的列表。装饰器一个接一个地在图像上绘制,因此布局文件中装饰器的顺序很重要:第一个装饰器输出将出现在其他装饰器输出的下面。

中详细介绍了装饰器。 WMS装饰 一节。还可以使用 dynamic decoration layouts ,在这种情况下,装饰的环境参数将使用 dwn:Parameter ,例如:

<dwn:Layer>
  <dwn:Name>theLayer</dwn:Name>
  <dwn:DecorationName>theDynamicDecoration</dwn:DecorationName>
  <dwn:Parameter key="env">sla:top,right;bg:#FF0000</dwn:Parameter>
</dwn:Layer>

地图下载流程

除了公共参数之外,MapDownloadProcess还带有一个额外的布尔参数, transparent ,它可以是True或False,确定输出贴图是具有透明背景还是纯色背景(动画缺少此参数,因为视频需要纯色背景)。这个 transparent 参数默认为 false [1].

此外,与动画不同,在地图下载过程中 time 参数是可选的。

地图下载过程使用WMS机器来生成输出,但它不受WMS服务限制(此过程中的宽度和高度可以使用WPS过程安全进行限制)。

示例DownloadMap请求

针对一组本地层发布的下载地图可能如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<wps:Execute version="1.0.0" service="WPS"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wps/1.0.0"
             xmlns:wfs="http://www.opengis.net/wfs" xmlns:wps="http://www.opengis.net/wps/1.0.0"
             xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml"
             xmlns:ogc="http://www.opengis.net/ogc" xmlns:wcs="http://www.opengis.net/wcs/1.1.1"
             xmlns:xlink="http://www.w3.org/1999/xlink"
             xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">
  <ows:Identifier>gs:DownloadMap</ows:Identifier>
  <wps:DataInputs>
    <wps:Input>
      <ows:Identifier>bbox</ows:Identifier>
      <wps:Data>
        <wps:BoundingBoxData crs="EPSG:4326">
          <ows:LowerCorner>0.237 40.562</ows:LowerCorner>
          <ows:UpperCorner>14.593 44.55</ows:UpperCorner>
        </wps:BoundingBoxData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>time</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>2008-10-31T00:00:00.000Z</wps:LiteralData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>width</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>200</wps:LiteralData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>height</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>80</wps:LiteralData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>layer</ows:Identifier>
      <wps:Data>
        <wps:ComplexData xmlns:dwn="http://geoserver.org/wps/download">
          <dwn:Layer>
            <dwn:Name>giantPolygon</dwn:Name>
            <dwn:Parameter key="featureId">giantPolygon.0</dwn:Parameter>
          </dwn:Layer>
        </wps:ComplexData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>layer</ows:Identifier>
      <wps:Data>
        <wps:ComplexData xmlns:dwn="http://geoserver.org/wps/download">
          <dwn:Layer>
            <dwn:Name>watertemp</dwn:Name>
          </dwn:Layer>
        </wps:ComplexData>
      </wps:Data>
    </wps:Input>
  </wps:DataInputs>
  <wps:ResponseForm>
    <wps:RawDataOutput mimeType="image/png">
      <ows:Identifier>result</ows:Identifier>
    </wps:RawDataOutput>
  </wps:ResponseForm>
</wps:Execute>

在本例中,这些层可能是一个单独的层,其“名称”等于“giantPolygon,water Termp”。

次输出:映射元数据

该过程还提供了一个辅助输出,称为 metadata ,它可用于确定是否存在与请求时间相关的任何问题。当该层激活了“最接近匹配”行为时,就会发出警告,并带有最终的搜索范围。

如果请求的时间不能完全匹配,则会发出警告,其中可能包含:

  • 表示附近的时间已被使用,以及该时间是什么时间。

  • 根据层“最接近匹配”配置中的搜索范围规范,没有找到足够接近所请求时间的时间的指示。

为了获得这两种输出,建议使用以下响应表,它需要地图的引用(链接),同时警告也包含在内联中:

<?xml version="1.0" encoding="UTF-8"?>
<wps:Execute version="1.0.0" service="WPS"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wps/1.0.0"
             xmlns:wfs="http://www.opengis.net/wfs" xmlns:wps="http://www.opengis.net/wps/1.0.0"
             xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml"
             xmlns:ogc="http://www.opengis.net/ogc" xmlns:wcs="http://www.opengis.net/wcs/1.1.1"
             xmlns:xlink="http://www.w3.org/1999/xlink"
             xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">
  <ows:Identifier>gs:DownloadMap</ows:Identifier>
  <!-- Inputs section removed for brevity -->
  <wps:ResponseForm>
    <wps:ResponseDocument>
      <wps:Output asReference="true">
        <ows:Identifier>result</ows:Identifier>
      </wps:Output>
      <wps:Output>
        <ows:Identifier>metadata</ows:Identifier>
      </wps:Output>
    </wps:ResponseDocument>
  </wps:ResponseForm>
</wps:Execute>

报告警告的响应示例如下:

<?xml version="1.0" encoding="UTF-8"?><wps:ExecuteResponse xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xs="http://www.w3.org/2001/XMLSchema" service="WPS" serviceInstance="http://localhost:8080/geoserver/ows?" version="1.0.0" xml:lang="en">
  <wps:Process wps:processVersion="1.0.0">
    <ows:Identifier>gs:DownloadMap</ows:Identifier>
    <ows:Title>Map Download Process</ows:Title>
    <ows:Abstract>Builds a large map given a set of layer definitions, area of interest, size and eventual target time.</ows:Abstract>
  </wps:Process>
  <wps:Status creationTime="2021-06-07T16:50:47.391Z">
    <wps:ProcessSucceeded>Process succeeded.</wps:ProcessSucceeded>
  </wps:Status>
  <wps:ProcessOutputs>
    <wps:Output>
      <ows:Identifier>result</ows:Identifier>
      <ows:Title>The output map</ows:Title>
      <wps:Reference href="http://localhost:8080/geoserver/ows?service=WPS&amp;version=1.0.0&amp;request=GetExecutionResult&amp;executionId=5db686ed-8591-4756-8651-4bd26281bf37&amp;outputId=result.png&amp;mimetype=image%2Fpng" mimeType="image/png"/>
    </wps:Output>
    <wps:Output>
      <ows:Identifier>metadata</ows:Identifier>
      <ows:Title>map metadata, including dimension match warnings</ows:Title>
      <wps:Data>
        <wps:ComplexData mimeType="text/xml">
          <DownloadMetadata>
            <Warnings>
              <DimensionWarning>
                <LayerName>sf:bmtime</LayerName>
                <DimensionName>time</DimensionName>
                <Value class="Date">2004-02-01T00:00:00.000Z</Value>
                <WarningType>Nearest</WarningType>
              </DimensionWarning>
            </Warnings>
            <WarningsFound>true</WarningsFound>
          </DownloadMetadata>
        </wps:ComplexData>
      </wps:Data>
    </wps:Output>
  </wps:ProcessOutputs>
</wps:ExecuteResponse>

动画下载过程

下载动画具有所有基本参数,具有以下变体/添加:

  • 时间:时间参数是必填的,可以按周期范围提供, start/stop/period ,或逗号分隔的时间列表,t1,t2,...,tn

  • FPS:每秒帧数(默认为1)

下载动画请求示例

示例动画请求如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<wps:Execute version="1.0.0" service="WPS"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wps/1.0.0"
             xmlns:wfs="http://www.opengis.net/wfs" xmlns:wps="http://www.opengis.net/wps/1.0.0"
             xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml"
             xmlns:ogc="http://www.opengis.net/ogc" xmlns:wcs="http://www.opengis.net/wcs/1.1.1"
             xmlns:xlink="http://www.w3.org/1999/xlink"
             xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">
  <ows:Identifier>gs:DownloadAnimation</ows:Identifier>
  <wps:DataInputs>
    <wps:Input>
      <ows:Identifier>bbox</ows:Identifier>
      <wps:Data>
        <wps:BoundingBoxData crs="EPSG:4326">
          <ows:LowerCorner>-180 -90</ows:LowerCorner>
          <ows:UpperCorner>180 90</ows:UpperCorner>
        </wps:BoundingBoxData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>decoration</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>formattedTimestamper</wps:LiteralData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>time</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>2004-02-01,2004-03-01,2004-04-01,2004-05-01</wps:LiteralData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>width</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>271</wps:LiteralData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>height</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>136</wps:LiteralData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>fps</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>0.5</wps:LiteralData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>layer</ows:Identifier>
      <wps:Data>
        <wps:ComplexData xmlns:dwn="http://geoserver.org/wps/download">
          <dwn:Layer>
            <dwn:Name>sf:bmtime</dwn:Name>
          </dwn:Layer>
        </wps:ComplexData>
      </wps:Data>
    </wps:Input>
  </wps:DataInputs>
  <wps:ResponseForm>
    <wps:RawDataOutput mimeType="video/mp4">
      <ows:Identifier>result</ows:Identifier>
    </wps:RawDataOutput>
  </wps:ResponseForm>
</wps:Execute>

这个 formattedTimestamper 装饰可确保帧时间包含在输出动画中,并如下所示:

<layout>
  <decoration type="text" affinity="bottom,right" offset="6,6" size="auto">
    <option name="message"><![CDATA[
<#setting datetime_format="yyyy-MM-dd'T'HH:mm:ss.SSSX">
<#setting locale="en_US">
<#if time??>
${time?datetime?string["dd-MM-yyyy"]}
</#if>]]></option>
    <option name="font-family" value="Bitstream Vera Sans"/>
    <option name="font-size" value="12"/>
    <option name="halo-radius" value="2"/>
  </decoration>
</layout>

辅助输出:动画元数据

该过程还提供了一个辅助输出,称为 metadata ,它可用于确定是否存在与请求时间相关的任何问题。当该层激活了“最接近匹配”行为时,就会发出警告,并带有最终的搜索范围。

如果请求的时间不能完全匹配,则会发出警告,其中可能包含:

  • 表示附近的时间已被使用,以及该时间是什么时间。

  • 根据层“最接近匹配”配置中的搜索范围规范,没有找到足够接近所请求时间的时间的指示。

为了获得这两种输出,建议使用以下响应表,它需要动画的引用(链接),同时警告也包含在内联中:

<?xml version="1.0" encoding="UTF-8"?>
<wps:Execute version="1.0.0" service="WPS"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wps/1.0.0"
             xmlns:wfs="http://www.opengis.net/wfs" xmlns:wps="http://www.opengis.net/wps/1.0.0"
             xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml"
             xmlns:ogc="http://www.opengis.net/ogc" xmlns:wcs="http://www.opengis.net/wcs/1.1.1"
             xmlns:xlink="http://www.w3.org/1999/xlink"
             xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">
  <ows:Identifier>gs:DownloadAnimation</ows:Identifier>
  <!-- Inputs section removed for brevity -->
  <wps:ResponseForm>
    <wps:ResponseDocument>
      <wps:Output asReference="true">
        <ows:Identifier>result</ows:Identifier>
      </wps:Output>
      <wps:Output>
        <ows:Identifier>metadata</ows:Identifier>
      </wps:Output>
    </wps:ResponseDocument>
  </wps:ResponseForm>
</wps:Execute>

报告警告和发生警告的帧计数的响应示例如下:

<?xml version="1.0" encoding="UTF-8"?><wps:ExecuteResponse xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xs="http://www.w3.org/2001/XMLSchema" service="WPS" serviceInstance="http://localhost:8080/geoserver/ows?" version="1.0.0" xml:lang="en">
  <wps:Process wps:processVersion="1.0.0">
    <ows:Identifier>gs:DownloadAnimation</ows:Identifier>
    <ows:Title>Animation Download Process</ows:Title>
    <ows:Abstract>Builds an animation given a set of layer definitions, area of interest, size and a series of times for animation frames.</ows:Abstract>
  </wps:Process>
  <wps:Status creationTime="2021-06-07T16:50:47.391Z">
    <wps:ProcessSucceeded>Process succeeded.</wps:ProcessSucceeded>
  </wps:Status>
  <wps:ProcessOutputs>
    <wps:Output>
      <ows:Identifier>result</ows:Identifier>
      <ows:Title>The animation</ows:Title>
      <wps:Reference href="http://localhost:8080/geoserver/ows?service=WPS&amp;version=1.0.0&amp;request=GetExecutionResult&amp;executionId=b98eded5-8122-442b-a6c7-87a872779153&amp;outputId=result.mp4&amp;mimetype=video%2Fmp4" mimeType="video/mp4"/>
    </wps:Output>
    <wps:Output>
      <ows:Identifier>metadata</ows:Identifier>
      <ows:Title>Animation metadata, including dimension match warnings</ows:Title>
      <wps:Data>
        <wps:ComplexData mimeType="text/xml">
          <AnimationMetadata>
            <Warnings>
              <FrameWarning>
                <LayerName>sf:bmtime</LayerName>
                <DimensionName>time</DimensionName>
                <Value class="Date">2004-02-01T00:00:00.000Z</Value>
                <WarningType>Nearest</WarningType>
                <Frame>0</Frame>
              </FrameWarning>
              <FrameWarning>
                <LayerName>sf:bmtime</LayerName>
                <DimensionName>time</DimensionName>
                <WarningType>FailedNearest</WarningType>
                <Frame>1</Frame>
              </FrameWarning>
              <FrameWarning>
                <LayerName>sf:bmtime</LayerName>
                <DimensionName>time</DimensionName>
                <Value class="Date">2004-04-01T00:00:00.000Z</Value>
                <WarningType>Nearest</WarningType>
                <Frame>2</Frame>
              </FrameWarning>
              <FrameWarning>
                <LayerName>sf:bmtime</LayerName>
                <DimensionName>time</DimensionName>
                <Value class="Date">2004-05-01T00:00:00.000Z</Value>
                <WarningType>Nearest</WarningType>
                <Frame>3</Frame>
              </FrameWarning>
            </Warnings>
            <WarningsFound>true</WarningsFound>
          </AnimationMetadata>
        </wps:ComplexData>
      </wps:Data>
    </wps:Output>
  </wps:ProcessOutputs>
</wps:ExecuteResponse>

在上面的输出中,帧0、2和3与可用时间最匹配,在 Value 字段,而为第1帧请求的时间离任何可用时间太远,从而导致 NearestFail 。该帧仍显示在动画中,但可能为空。如果动画中请求多个基于时间的层,则每一帧可能会有多个警告。

脚注