WCS服务器

作者

杰夫麦克纳

联系

jmckenna在gatewaygeomatics.com

作者

斯蒂芬梅塞尔

联系

stephan.meissl在eox.at

作者

法比安·辛德勒

联系

Fabian.Schindler在EOX.AT

最后更新

2021-03-27

介绍

WCS(或Web覆盖服务)允许发布“覆盖范围”——表示空间变化现象的数字地理空间信息。在MapServer世界中,它允许对栅格数据进行未过滤的访问。从概念上讲,很容易将WCS视为WFS的栅格等价物。以下文档基于 Open Geospatial Consortium's (OGC) Web Coverage Service Interfaces Implementation Specification version 1.0.0 .

软件需求

为了使MapServer能够为WCS数据提供服务,必须针对某些库进行编译:

  • 项目:重新投影库。需要4.4.3或更高版本。

  • 栅格支持库。

  • mapserver:version>=4.4(更新此文档时用5.0.2测试)

对于WCS 1.1.x(MapServer 5.2)和WCS 2.0(MapServer 6.0)支持,还有一个附加要求:

  • libxml2:一个XML解析器和生成库。

请看 MapServer UNIX Compilation and Installation HowTo 有关编译支持这些库和功能的MapServer的详细说明。对于Windows用户, MapServer for Windows (MS4W) 提供WCS服务器支持。

配置映射文件以服务WCS层

正如在WMS和WFS支持中一样,通过向.map文件添加某些magic元数据关键字/值对来启用WCS发布。

MapServer将只提供满足以下条件的层,并将其包含在其WCS功能中:

  • 数据源是一个栅格,使用gdal处理(例如geotiff、erdas imaging,…)

  • 必须设置层名称

  • 图层类型设置为栅格

  • 必须设置Web元数据或层元数据“wcs_enable_request”

  • 必须设置Web元数据“wcs_label”

  • 必须设置层元数据“wcs_label”

  • 必须设置层元数据“wcs_rangeset_name”

  • 必须设置层元数据“wcs-rangeset-label”

  • 层可以通过WCS提供服务(请参见 MS RFC 67

  • 必须设置层投影,即使投影设置在地图级别(bug?)

WCS服务器映射文件示例

下面是一个简单的WCS服务器映射文件的示例。注意所需参数的注释。

MAP
  NAME WCS_server
  STATUS ON
  SIZE 400 300
  SYMBOLSET "../etc/symbols.txt"
  EXTENT -2200000 -712631 3072800 3840000
  UNITS METERS
  SHAPEPATH "../data"
  IMAGECOLOR 255 255 255
  FONTSET "../etc/fonts.txt"


  #
  # Start of web interface definition
  #
  WEB
    IMAGEPATH "/ms4w/tmp/ms_tmp/"
    IMAGEURL "/ms_tmp/"
    METADATA
      "wcs_label"           "GMap WCS Demo Server" ### required
      "wcs_description"     "Some text description of the service"
      "wcs_onlineresource"  "http://127.0.0.1/cgi-bin/mapserv.exe?" ### recommended
      "wcs_fees"            "none"
      "wcs_accessconstraints"    "none"
      "wcs_keywordlist"          "wcs,test"
      "wcs_metadatalink_type"    "TC211"
      "wcs_metadatalink_format"  "text/plain"
      "wcs_metadatalink_href"    "http://someurl.com"
      "wcs_address"              "124 Gilmour Street"
      "wcs_city"                 "Ottawa"
      "wcs_stateorprovince"      "ON"
      "wcs_postcode"             "90210"
      "wcs_country"              "Canada"
      "wcs_contactelectronicmailaddress" "blah@blah"
      "wcs_contactperson"            "me"
      "wcs_contactorganization"      "unemployed"
      "wcs_contactposition"          "manager"
      "wcs_contactvoicetelephone"    "613-555-1234"
      "wcs_contactfacimiletelephone" "613-555-1235"
      "wcs_service_onlineresource"   "http://127.0.0.1/cgi-bin/mapserv.exe?"
      "wcs_enable_request"           "*"
    END
  END

  PROJECTION
    "init=epsg:3978"
  END


  LAYER
    NAME bathymetry
    METADATA
      "wcs_label"           "Elevation/Bathymetry"  ### required
      "wcs_rangeset_name"   "Range 1"  ### required to support DescribeCoverage request
      "wcs_rangeset_label"  "My Label" ### required to support DescribeCoverage request
    END
    TYPE RASTER ### required
    STATUS ON
    DATA bath_mapserver.tif
    PROJECTION
      "init=epsg:3978"
    END
  END
END # Map File

输出格式

mapserver wcs支持的栅格格式由层上的wcs_formats元数据项确定。这应该包含一个用空格分隔的输出格式驱动程序名称列表。如果不存在,则允许使用所有栅格输出格式。

WCS是一种面向“原始数据”的格式。因此,它通常最适合与使用byte、int16和float32格式的格式一起使用,而不是与gdal相关的输出格式,而不是内置的“面向渲染”输出格式。默认情况下,唯一定义的gdal格式驱动程序是gtiff驱动程序。以下是使用原始图像模式的输出格式声明示例:

OUTPUTFORMAT
  NAME GEOTIFF_16
  DRIVER "GDAL/GTiff"
  MIMETYPE "image/tiff"
  IMAGEMODE FLOAT32
  EXTENSION "tif"
END

OUTPUTFORMAT
  NAME AAIGRID
  DRIVER "GDAL/AAIGRID"
  MIMETYPE "image/x-aaigrid"
  IMAGEMODE INT16
  EXTENSION "grd"
  FORMATOPTION "FILENAME=result.grd"
END

当返回wcs getcoverge results时,formatOption文件名定义结果文件的首选名称。

测试WCS 1.0服务器

验证功能元数据

好了,现在我们有了一个映射文件,我们必须检查服务器返回的XML功能,以确保没有遗漏。

使用Web浏览器,访问服务器的联机资源URL,在其末尾添加参数“service=wcs&version=1.0.0&request=getcapabilities”,例如:

http://my.host.com/cgi-bin/mapserv?map=mywcs.map&SERVICE=WCS
  &VERSION=1.0.0&REQUEST=GetCapabilities

备注

强烈建议您查看 MAP= 通过设置来调用MapServer可执行文件 MS_MAP_PATTERNMS_MAP_NO_PATH 或者隐藏 MAP= 参数,如本文档中所建议的 限制 Mapfile 访问 。中列出了保护服务器安全的所有可能环境变量 环境变量

如果在XML输出中收到错误消息,请采取必要的操作。常见问题和解决方案列在本文档末尾的常见问题解答中。

如果一切顺利,您应该有一个完整的XML功能文档。搜索“警告”一词…MapServer插入以“<!”开头的XML注释。--警告:“在XML输出中,如果检测到丢失的mapfile参数或元数据项。

注意,当一个请求发生时,它将通过mapserver中的wms、wfs和wcs(按该顺序)传递,直到其中一个服务响应它为止。

以下是getCapabilities请求的一个工作示例:

WCS GetCapabilities live example

使用描述的覆盖率请求进行测试

好了,既然我们知道我们的服务器可以生成有效的XML getCapabilities响应,那么我们应该测试describeCoverage请求。DescribeCoverage请求列出了有关特定覆盖范围产品的更多信息。

使用Web浏览器,访问服务器的联机资源URL,在其末尾添加参数“service=wcs&version=1.0.0&request=describeCoverage&coverage=layerName”,例如:

http://my.host.com/cgi-bin/mapserv?map=mywcs.map&SERVICE=WCS
  &VERSION=1.0.0&REQUEST=DescribeCoverage&COVERAGE=bathymetry

下面是一个描述的Coverage请求的工作示例:

WCS DescribeCoverage live example

使用getcoverge请求进行测试

getcoverage请求允许以指定的输出格式向客户机检索覆盖范围。

以下是根据WCS规范所需的getcoverge参数列表:

**版本=版本:**请求版本

**请求=getcoverage:**请求名称

**coverage=coverageu name:**getcapabilities中所述的可用覆盖范围的名称

**crs=epsg_code:**表示请求的坐标参考系。

**bbox=minx、miny、maxx、maxy:**以crs为单位的边界框角(左下、右上)。需要bbox或time中的一个。

**时间=时间1,时间2:**请求与时间对应的子集。需要bbox或time之一。

**宽度=输出宽度:**地图图片的宽度(像素)。需要宽度/高度或resx/y之一。

**高度=输出高度:**地图图片的像素高度。需要宽度/高度或resx/y之一。

**resx=x:**需要宽度/高度或resx/y之一。

**resy=y:**需要宽度/高度或resx/y之一。

**format=output_format:**map的输出格式,如describeCoverage响应中所述。

根据WCS规范,以下是可选的getcoverge参数:

**response_crs=epsg_code:**coordinate reference system in which to express coverage responses.

因此,按照上述示例,有效的describeCoverage请求如下:

http://my.host.com/cgi-bin/mapserv?map=mywcs.map&SERVICE=WCS
  &VERSION=1.0.0&REQUEST=GetCoverage&coverage=bathymetry
  &CRS=EPSG:3978&BBOX=-2200000,-712631,3072800,3840000&WIDTH=3199
  &HEIGHT=2833&FORMAT=GTiff

以下是getcoverge请求的一个工作示例(请注意,正在请求350kb tif,因此这可能需要一秒钟):

WCS GetCoverage live example

WCS 1.1.0+问题

MapServer 5.2支持WCS 1.1.0和更高版本的WCS协议。在大多数情况下,WCS 1.1.0的映射文件设置与WCS 1.0.0类似,但实际协议发生了实质性的变化。

GetCapabilities

getCapabilities请求与wcs 1.0相同,但版本值不同:

SERVICE=WCS&VERSION=1.1.0&REQUEST=GetCapabilities

返回的功能文档的格式从WCS 1.0大幅度更改,并将OWS用于服务描述。

DescribeCoverage

DescribeCoverage请求类似于WCS 1.0,但使用identifiers关键字而不是coverage来命名所请求的覆盖范围::

SERVICE=WCS&VERSION=1.1.0&REQUEST=DescribeCoverage&IDENTIFIERS=spaceimaging

GetCoverage

getcoverge的格式从1.0大幅度更改。以下是getcoverge所需参数的列表:

**版本=版本:**请求版本

**请求=getcoverage:**请求名称

**identifier=coverageu name:**可用覆盖范围的名称,如getcapabilities中所述

**边界框=minx、miny、maxx、maxy、crs:**边界框角(左下、右上)及其所在的crs。使用URN描述CRS。

**格式=输出格式:**网格产品的输出格式(mime类型),如getCapabilities中所述。

如果需要其他空间分辨率,则必须使用以下关键字集指定要生成的输出网格的采样原点和步长。生成的网格将由多个像素和线条组成,这些像素和线条可以以网格偏移分辨率从网格原点开始放置在边界框中。

**grid base crs=crs:**grid base crs(urn)。

**gridcs=crs:**grid crs(urn)。

**gridtype=urn:ogc:def:method:wcs:1.1:2dgridin2dcrs:**这是MapServer唯一支持的值。

**gridorigin=x_origin,y_origin:**左上角像素的采样点。

**gridoffsets=x step,y step:**网格采样的x和y步长(分辨率)。两者都是积极的。

此外,还提供以下可选参数。

**range subset=选择:**选择一个范围子集和插值方法。目前只允许对波段进行子集设置。根据范围集名称的不同,可以采用“BandsName[波段[1]]”的形式来选择波段1,或“BandsName:双线性[波段[1]]”的形式来选择具有双线性插值的波段1。

所以一个简单的getcoverge可能看起来像:

SERVICE=WCS&VERSION=1.1.0&REQUEST=GetCoverage&IDENTIFIER=dem&FORMAT=image/tiff
  &BOUNDINGBOX=43,33,44,34,urn:ogc:def:crs:EPSG::4326

更复杂的请求可能如下所示:

SERVICE=WCS&VERSION=1.1.0&REQUEST=GetCoverage&IDENTIFIER=dem&FORMAT=image/tiff
  &BOUNDINGBOX=33,43,34,44,urn:ogc:def:crs:EPSG::4326
  &GridBaseCRS=urn:ogc:def:crs:EPSG::4326&GridCS=urn:ogc:def:crs:EPSG::4326
  &GridType=urn:ogc:def:method:WCS:1.1:2dGridIn2dCrs
  &GridOrigin=33,44&GridOffsets=0.01,0.01
  &RangeSubset=BandsName:bilinear[bands[1]]

还应该注意的是,来自wcs 1.1getcoverge请求的返回结果是多部分mime格式的。通常,这包括一个XML文档引用消息的其他部分的第一部分和一个图像文件部分。但是,对于返回多个文件的输出格式,每个文件将是一个单独的部分。例如,这意味着可以返回一个包含世界文件的jpeg文件,输出格式是适当配置的。

URNs

在WCS 1.1中,URN引用协议坐标系。一些典型的骨灰缸是:

urn:ogc:def:crs:EPSG::4326
urn:ogc:def:crs:EPSG:27700
urn:ogc:def:crs:OGC::CRS84

前两个大致相当于epsg:4326和epsg:27700,而第三个则是由ogc定义的crs(基本上是wgs84)。需要注意的一点是,WCS1.1遵循EPSG为地理坐标系定义的轴/元组顺序。这意味着在urn:ogc:def:epsg::4326(wgs84)中报告或提供的坐标实际上被处理为lat、long、not long、lat。因此,例如,加利福尼亚地区的边界框可能如下所示:

BOUNDINGBOX=34,-117,35,-116,urn:ogc:def:crs:EPSG::4326

同样地,getCapabilities报告的界限和describeCoverage也将在这个顺序中进行适当的排序。

WCS 2

概述

版本6.0引入了对新版本2.0的WCS规范的支持。本节记录新的WCS版本的用法。

Web覆盖服务(WCS)2.0接口标准

本规范采用新的OGC核心和扩展模型,目前可从 OGC'c WCS Standard page

WCS版本1.1.2的技术更改完全基于 GML 3.2.1 Application Schema Coverages 以及采用 OWS Common 2.0 . 另一个主要变化是引入了修剪和切片的概念,下面将详细解释这些概念。

WCS 2.0 Schemas 定义所有请求和响应应根据其进行验证。

WCS 2.0 kvp请求参数

以下kvp请求参数在WCS 2.0中可用:

覆盖ID: COVERAGE wcs 1.0或 IDENTIFIER 参数 对于WCS 1.1. 在DescribeCoverage请求中,可以通过用逗号连接多个ID来请求它们。

SUBSET=axis[,crs](low,high): This parameter subsets the coverage on the given axis. This parameter can be given multiple times, but only once for each axis. The optional sub-parameter crs 可以是epsg定义(如epsg:4326)、urn或uri或“imagecrs”(默认值)。所有 crs 所有子参数 SUBSET 参数必须相等。(例如:您不能在imagecrs中设置一个轴,在epsg:4326中设置另一个轴)。

备注

的语法 crs 子参数不标准,已弃用。请使用 SUBSETTINGCRS 改为参数。

备注

轴子参数的可识别值为:“x”、“x axis”、“x轴”、“x轴”、“long”、“long_轴”、“long轴”、“lon”、“lon_轴”、“lon轴”、“y轴”、“y axis”、“y轴”、“y_轴”、“lat”、“lat_轴”和“lat轴”。

**subsetingcrs=crs:**此参数定义了crs subseting all SUBSETs 用表示,如果没有,也用输出CRS表示。 OUTPUTCRS 指定。默认情况下,所有子集都被解释为与覆盖范围CRS相关。

**output crs=crs:**此参数定义输出图像应在哪个crs中表示。

**mediatype=mediatype:**当需要多部分XML/图像输出时,此参数与getcoverge请求相关。应将其设置为“multipart/related”(当前是此参数的唯一可能值)。

**scaleFactor=factor:**使用此参数(正浮点)可以调整输出图像的大小。所有轴的比例都相等。

**scaleaxes=轴(值)[,轴(值)]:**使用此参数,可以应用特定于轴的缩放。任何未提及的轴

**缩放大小=轴(大小)[,轴(大小)]:**这类似于 SCALEAXES 参数,但允许返回覆盖的绝对像素大小的轴特定设置。

**scaleextent=轴(最小:最大值)[,轴(最小:最大值)]:**此参数被视为 SCALESIZE 带“轴(最大-最小)”的参数。

INTERPOLATION=interpolation_method: 这定义了用于重新缩放图像的插值方法。可能的值为“最近”、“双线性”和“平均”。

**rangesubset=band1[,band2[,…]:**使用此参数可以选择波段。此外,还可以对带进行重新排序。可以通过名称(可以使用DescribeCoverage请求检索)或索引(从第一个波段的“1”开始)引用波段。此外,还可以给出一系列波段: 班德克斯:班迪. 这还包括下限和上限。顾名思义,下限必须引用索引较低的带。可以将直接引用到带和间隔混合。例如:rangesubset=band1,band3:band:5,band7

以下参数是 WCS 2.0 Specification - GeoTIFF Coverage Encoding Profile 并且仅适用于geotiff输出格式:

**geotiff:compression=compression:**返回图像的压缩方法。有效选项包括:无、压缩位、deflate、huffman、lzw和jpeg。

**geotiff:jpeg_quality=1-100:**选择压缩方法jpeg时,此值定义算法的质量。

GEOTIFF:PREDICTOR=None|Horizontal|FloatingPoint: LZW和放气压缩方法的预测值。

**geotiff:interleave=band pixel:**定义图像是带还是像素交错。

**geotiff:tiling=true false:**定义输出图像是否应在内部平铺。

geotiff:tilewidth=tilewidth, geotiff:tileheight=tileheight: 定义内部平铺的大小。必须是可被16整除的正整数。

以下请求参数不是WCS 2.0核心或其任何扩展的一部分,并保持向后兼容性。它们起源于一个没有指定最重要的标准扩展的时代,而没有这个时代,WCS核心就不太有用。他们被否决了。

**大小=轴(值):**此参数将所需轴的大小设置为所需值(像素)。

**分辨率=轴(值):**此参数将所需轴的分辨率设置为所需值(像素/单位)。

备注

这个 SIZERESOLUTION 在一个轴上是互斥的,但可以在不同的轴上混合(例如:X轴上的大小和Y轴上的分辨率)。轴名称也位于 SUBSET, SIZERESOLUTION 参数不能混合。例如:…&subset=x(0100)&size=lon(200)&…虽然轴名称在逻辑上引用同一轴,但不合法。

不变的kvp参数

自WCS标准的最后一个版本以来,以下参数没有(或只是稍微)更改。

**版本=版本:对于WCS 2.0,应将其设置为“2.0.1”。这个

参数不推荐用于与OGC Web服务公共标准2.0.0相关的getCapabilities。

服务=服务

请求=请求

acceptVersions=版本

节=节

更新序列=更新序列

**acceptFormats=格式:**此参数当前被忽略。

**AcceptLanguages=语言:**用于多语言服务的语言协商。

**格式=格式:**现在还可以使用映射文件中定义的outputformat对象的名称设置所需的格式。与以前版本的wcs不同,当指定了本机格式或可以通过gdal确定本机格式时,此参数是可选的。

map = MpFrase*

kvp请求示例

下面的示例请求概述了新的kvp请求语法:

# GetCapabilities
http://www.yourserver.com/wcs?SERVICE=WCS&ACCEPTVERSIONS=1.0.0,2.0.1
  &REQUEST=GetCapabilities
http://www.yourserver.com/wcs?SERVICE=WCS&REQUEST=GetCapabilities
# DescribeCoverage 2.0
http://www.yourserver.com/wcs?SERVICE=WCS&VERSION=2.0.1
  &REQUEST=DescribeCoverage&COVERAGEID=grey
# GetCoverage 2.0 image/tiff full
http://www.yourserver.com/wcs?SERVICE=WCS&VERSION=2.0.1
  &REQUEST=GetCoverage&COVERAGEID=grey&FORMAT=image/tiff
# GetCoverage 2.0 multipart/related (GML header & image/tiff) full
http://www.yourserver.com/wcs?SERVICE=WCS&VERSION=2.0.1
  &REQUEST=GetCoverage&COVERAGEID=grey&FORMAT=image/tiff
  &MEDIATYPE=multipart/related
# GetCoverage 2.0 image/tiff trim x y both in imageCRS
http://www.yourserver.com/wcs?SERVICE=WCS&VERSION=2.0.1
  &REQUEST=GetCoverage&COVERAGEID=grey&FORMAT=image/tiff
  &SUBSET=x(10,200)&SUBSET=y(10,200)
  &SUBSETTINGCRS=imageCRS
# GetCoverage 2.0 reproject to EPSG 4326
http://www.yourserver.com/wcs?SERVICE=WCS&VERSION=2.0.1
  &REQUEST=GetCoverage&COVERAGEID=grey&FORMAT=image/tiff
  &SUBSET=x(-121.488744,-121.485169)
  &SUBSETTINGCRS=http://www.opengis.net/def/crs/EPSG/0/4326

请参阅 WCS 2.0 tests in msautotest 更多样品请求。

对以前版本的更改

层名称必须是有效的ncname,即:不能以数字开头,并且只能包含字母数字字符。此约束派生的gml:id属性必须是ncname,该属性与覆盖率id相关,覆盖率id本身取自层名称。

指定覆盖范围特定的元数据

对于MapServer中启用了WCS的层,声明WCS 2.0的覆盖率元数据的可能性不同。在最简单的情况下,可以从源映像中检索所有必需的元数据。

出于某种原因,这可能是不可取的,可能是因为源映像不提供这些元数据。并非每个输入图像格式都附加了地理空间元数据。在这种情况下,可以使用层元数据来提供这些信息。

约定在层元数据中设置(wcs_ows)范围和(wcs_ows)大小和(wcs_ows)分辨率之一后,将从中检索所有覆盖范围特定的元数据。否则,如果可能,将通过gdal查询源映像。

相关层元数据字段为(wcs ows)bandcount,(wcs ows)imagemode,(wcs ows)本机格式,以及所有 New band related metadata entries .

HTTP-POST支持

由于版本6.0,MapServer还支持HTTP-POST XML请求。所有可能通过HTTP GET的请求也可以通过POST发送。符合相关标准的WCS 1.1或WCS 2.0可能会发出POST请求。

这是一个getCapabilities请求示例:

<?xml version="1.0" encoding="UTF-8"?>
<wcs:GetCapabilities
  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
  xsi:schemaLocation="http://www.opengis.net/wcs/2.0
    http://schemas.opengis.net/wcs/2.0/wcsAll.xsd"
  xmlns="http://www.opengis.net/wcs/2.0"
  xmlns:wcs='http://www.opengis.net/wcs/2.0'
  xmlns:ows="http://www.opengis.net/ows/2.0"
  service="WCS">
  <ows:AcceptVersions>
    <ows:Version>2.0.1</ows:Version>
  </ows:AcceptVersions>
  <ows:Sections>
    <ows:Section>OperationsMetadata</ows:Section>
    <ows:Section>ServiceIdentification</ows:Section>
  </ows:Sections>
</wcs:GetCapabilities>

这是一个描述Coverage请求的示例,仅对WCS 2.0有效:

<?xml version="1.0" encoding="UTF-8"?>
<wcs:DescribeCoverage
  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
  xsi:schemaLocation="http://www.opengis.net/wcs/2.0
    http://schemas.opengis.net/wcs/2.0/wcsAll.xsd"
  xmlns="http://www.opengis.net/wcs/2.0"
  xmlns:wcs="http://www.opengis.net/wcs/2.0"
  service="WCS"
  version="2.0.1">
  <wcs:CoverageId>SOME_ID</wcs:CoverageId>
</wcs:DescribeCoverage>

此示例演示了wcs 2.0 post-xml getcoverge请求的用法:

<?xml version="1.0" encoding="UTF-8"?>
<wcs:GetCoverage
  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
  xsi:schemaLocation="http://www.opengis.net/wcs/2.0
    http://schemas.opengis.net/wcs/2.0/wcsAll.xsd"
  xmlns="http://www.opengis.net/wcs/2.0"
  xmlns:wcs="http://www.opengis.net/wcs/2.0"
  xmlns:wcscrs="http://www.opengis.net/wcs/crs/1.0"
  xmlns:scal="http://www.opengis.net/wcs/scaling/1.0"
  xmlns:int="http://www.opengis.net/wcs/interpolation/1.0"
  service="WCS"
  version="2.0.1">
  <wcs:CoverageId>SOME_ID</wcs:CoverageId>
  <wcs:DimensionTrim>
    <wcs:Dimension>x</wcs:Dimension>
    <wcs:TrimLow>16.5</wcs:TrimLow>
    <wcs:TrimHigh>17.25</wcs:TrimHigh>
  </wcs:DimensionTrim>
  <wcs:DimensionTrim>
    <wcs:Dimension>y</wcs:Dimension>
    <wcs:TrimLow>47.9</wcs:TrimLow>
  </wcs:DimensionTrim>
  <wcs:format>image/tiff</wcs:format>
  <wcs:mediaType>multipart/related</wcs:mediaType>
  <wcs:Extension>
    <wcscrs:subsettingCrs>http://www.opengis.net/def/crs/EPSG/0/4326</wcscrs:subsettingCrs>
    <wcscrs:outputCrs>http://www.opengis.net/def/crs/EPSG/0/32611</wcscrs:outputCrs>
    <scal:ScaleToSize>
      <scal:TargetAxisSize>
        <scal:axis>x</scal:axis>
        <scal:targetSize>50</scal:targetSize>
      </scal:TargetAxisSize>
      <scal:TargetAxisSize>
        <scal:axis>y</scal:axis>
        <scal:targetSize>50</scal:targetSize>
      </scal:TargetAxisSize>
    </scal:ScaleToSize>
    <int:Interpolation>
      <int:globalInterpolation>NEAREST</int:globalInterpolation>
    </int:Interpolation>
  </wcs:Extension>
</wcs:GetCoverage>

这些是其他一些缩放选项:

<wcs:GetCoverage
  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
  xsi:schemaLocation="http://www.opengis.net/wcs/2.0
    http://schemas.opengis.net/wcs/2.0/wcsAll.xsd"
  xmlns="http://www.opengis.net/wcs/2.0"
  xmlns:wcs="http://www.opengis.net/wcs/2.0"
  xmlns:scal="http://www.opengis.net/wcs/scaling/1.0"
  service="WCS"
  version="2.0.1">

  <!-- ... -->
  <wcs:Extension>
    <scal:ScaleByFactor>
      <scal:scaleFactor>1.5</scal:scaleFactor>
    </scal:ScaleByFactor>

    <!-- or -->

    <scal:ScaleAxesByFactor>
      <scal:ScaleAxis>
        <scal:axis>x</scal:axis>
        <scal:scaleFactor>1.5</scal:scaleFactor>
      </scal:ScaleAxis>
      <scal:ScaleAxis>
        <scal:axis>y</scal:axis>
        <scal:scaleFactor>2.0</scal:scaleFactor>
      </scal:ScaleAxis>
    </scal:ScaleAxesByFactor>

    <!-- or -->

    <scal:ScaleToExtent>
      <scal:TargetAxisExtent>
        <scal:axis>x</scal:axis>
        <scal:low>10</scal:low>
        <scal:high>20</scal:high>
      </scal:TargetAxisExtent>
      <scal:TargetAxisExtent>
        <scal:axis>y</scal:axis>
        <scal:low>20</scal:low>
        <scal:high>30</scal:high>
      </scal:TargetAxisExtent>
    </scal:ScaleToExtent>
  </wcs:Extension>
</wcs:GetCoverage>

geotiff参数使用如下:

<wcs:GetCoverage
   xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
   xsi:schemaLocation="http://www.opengis.net/wcs/2.0
     http://schemas.opengis.net/wcs/2.0/wcsAll.xsd"
   xmlns="http://www.opengis.net/wcs/2.0"
   xmlns:wcs="http://www.opengis.net/wcs/2.0"
   xmlns:geotiff="http://www.opengis.net/gmlcov/geotiff/1.0"
   service="WCS"
   version="2.0.1">

   <!-- ... -->
   <wcs:Extension>
     <geotiff:parameters>
       <geotiff:compression>LZW</geotiff:compression>
       <geotiff:predictor>Horizontal</geotiff:predictor>
       <geotiff:interleave>Band</geotiff:interleave>
       <geotiff:tiling>yes</geotiff:tiling>
       <geotiff:tilewidth>256</geotiff:tilewidth>
       <geotiff:tileheight>256</geotiff:tileheight>
     </geotiff:parameters>
   </wcs:Extension>
 </wcs:GetCoverage>

请参阅 WCS 2.0 Specification - XML/POST Protocol Binding Extension 以及 WCS 2.0 Schemas 有关WCS 2.0中发布请求的更多信息。

激发下载服务支持

从7.2版开始,MapServer WCS 2.0还支持INSPIRE下载服务。要启用此功能,请使用 wcs_inspire_capabilities 设置必须设置为 urlembed

请参阅 激励下载服务 进一步元数据选项的文档。

多语言支持

Part of the INSPIRE download service support is the support for multi-lingual WCS services. With the wcs_languages a (comma-separated) list of language specifiers can be set. When this is set, client and server can negotiate the result language using the ACCEPTLANGUAGES parameter (or the <ows:AcceptLanguages>/<ows:Language> tags when using XML). The first item in the accept languages list contained in the list specified with wcs_languages will be used for the resulting capabilities document

有关更多信息,请参见 对某些功能字段的多语言支持 .

参考截面

为了避免混淆,在OGC WCS服务中只评估“wcs_u*”和“ows_*”前缀元数据条目。以前的版本使用“wms_u*”前缀项作为回退,在版本6.0中删除该回退项,以便强制执行显式决策。模块将按此顺序查找“wcs_u*”和“ows_*”元数据前缀。

以下元数据在映射文件的设置中可用:

Web对象元数据

ows_allowed_ip_list (或wcs-allowed-ip-u列表)

  • *描述:*(可选)允许访问服务的IP地址列表。

    例子::

    METADATA
      "ows_allowed_ip_list" "123.45.67.89 11.22.33.44"
    END
    

ows_denied_ip_list (或wcs_拒绝的_ip_列表)

  • *描述:*(可选)拒绝访问服务的IP地址列表。

    例子::

    METADATA
      "ows_denied_ip_list" "123.45.67.89 11.22.33.44"
    END
    

wcs_abstract

  • *描述:*(可选)服务的简要描述,映射到OWS:abstract(仅限WCS 1.1+)。

wcs_accessconstraints

  • *描述:*(可选)描述服务提供者施加的任何访问约束的代码列表。关键字none是保留的,表示没有施加访问约束。

wcs_地址,wcs_城市,wcs_联系人电子邮箱地址,wcs_联系人设备电话,wcs_联系人组织,wcs_联系人,wcs_联系人位置,wcs_联系人语音电话,wcs_国家/地区,wcs_邮编,wcs_状态或提供

  • *说明:*(可选)联系地址信息。如果提供,则需要所有12个元数据项。您也可以使用 responsibleparty

wcs_band_names

wcs_description

  • *描述:*(可选)服务器的描述。

wcs_enable_request (或) ows_enable_request)

  • *说明:*要启用的请求的以空格分隔的列表。默认值为“无”。可以启用以下请求: GetCapabilities, GetCoverageDescribeCoverage.

  • 实例:

    GetCapabilitiesGetCoverage:

    "wcs_enable_request" "GetCapabilities GetCoverage"
    

    启用除'getcapabilities'之外的所有请求`

    "wcs_enable_request" "* !GetCapabilities"
    

wcs_fees

  • *说明:*(可选)一个文本字符串,指示服务提供商收取的任何费用。

wcs_keywords

  • *说明:*(可选)用于目录搜索的短词。

wcs_label

  • *描述:*(必需)服务器的可读标签。

wcs_metadatalink_format

  • *描述:*(可选)元数据记录的文件格式mime类型(例如“text/plain”)。还必须指定Web元数据wcs_metadatalink_type和wcs_metadatalink_href。

  • 若要输出多个元数据链接,请使用 wcs_metadatalink_list

wcs_metadatalink_href

  • *描述:*(可选)服务器元数据的URL。还必须指定Web元数据wcs_metadatalink_格式和wcs_metadatalink_类型。

  • 若要输出多个元数据链接,请使用 wcs_metadatalink_list

wcs_metadatalink_list

  • 描述: (可选)以空格分隔的元数据键部分列表,以便能够指定多个元数据链接。如果wcs_metadatalink_list的值是“foo bar”,则WCS_metadatalink_foo_href、wcs_metadatalink_foo_Format、wcs_metadatalink_foo_type、wcs_metadatalink_bar_href、wcs_metadatalink_bar_Format、wcs_metadatalink_href、WCS_metadatalink_Format和WCS_metadatalink_type项的语义将被查询。

    示例:

    "wcs_metadatalink_list" "xml html"
    
    "wcs_metadatalink_xml_format" "text/xml"
    "wcs_metadatalink_xml_type" "TC211"
    "wcs_metadatalink_xml_href" "http://example.com/testXML"
    
    "wcs_metadatalink_html_format" "text/html"
    "wcs_metadatalink_html_type" "TC211"
    "wcs_metadatalink_html_href" "http://example.com/testHTML"
    
  • 8.0 新版功能.

wcs_metadatalink_type

  • *说明:*(可选)元数据符合的标准。目前只有两种类型有效:“TC211”是指[ISO 19115],而“FGDC”是指[FGDC-STD-001-1988]。还必须指定Web元数据wcs_metadatalink_格式和wcs_metadatalink_href。

  • 若要输出多个元数据链接,请使用 wcs_metadatalink_list

wcs_name

  • *描述:*(可选)服务器的名称。

WCS责任部门地址_行政区域,WCS责任部门地址_城市,WCS责任部门地址_国家,WCS责任部门地址_交付地点,WCS责任部门地址_电子邮箱地址,WCS责任部门地址_邮政编码,WCS责任部门名称,WCS责任部门资源,WCS责任部门eparty_organizationname,wcs_responsibility party_phone_faxix,wcs_responsibility party_phone_voice,wcs_responsibility party_positionname

  • Description: (Optional) Contact address information. If provided then all twelve metadata items are required. You can also use the address*

wcs_service_onlineresource

  • *描述:*(可选)顶级OnlineResource URL。MapServer使用OnlineResource元数据(如果提供)的顺序如下:

    1. wcs_service_onlineresource

    2. ows_service_onlineresource

    3. WCS联机资源(或自动生成的URL,请参阅本文档的联机资源部分)

wcs_languages

层对象元数据

ows_allowed_ip_list

与Web对象中的“允许使用”列表相同。

ows_denied_ip_list

与Web对象中的“OWS拒绝”列表相同。

wcs_abstract

  • *描述:*(可选)服务的简要描述,映射到OWS:abstract(仅限WCS 1.1+)。

wcs_description

  • *描述:*(可选)层的描述。

wcs_enable_request (或) ows_enable_request)

  • *说明:*要启用的请求的以空格分隔的列表。默认值为“无”。可以启用以下请求: GetCapabilities, GetCoverageDescribeCoverage.

  • 实例:

    GetCapabilitiesGetCoverage:

    "wcs_enable_request" "GetCapabilities GetCoverage"
    

    启用除'getcapabilities'之外的所有请求`

    "wcs_enable_request" "* !GetCapabilities"
    

wcs_extent

  • *说明:*(可选)层的边界框,必须为平铺数据提供。逗号分隔,格式为:minx、miny、maxx、maxy

wcs_formats

  • *说明:*(可选)此层可能需要的格式,用空格分隔。(例如“gtiff mrsid”)

wcs_keywords

  • *说明:*(可选)用于目录搜索的短词。

wcs_label

  • *描述:*(必需)层的可读标签。

wcs_metadatalink_format

  • *描述:*(可选)元数据记录的文件格式mime类型(例如“text/plain”)。还必须指定Web元数据wcs_metadatalink_type和wcs_metadatalink_href。

wcs_metadatalink_href

  • *描述:*(可选)层元数据的URL。还必须指定Web元数据wcs_metadatalink_格式和wcs_metadatalink_类型。

wcs_metadatalink_type

  • *说明:*(可选)元数据符合的标准。目前只有两种类型有效:“TC211”是指[ISO 19115],而“FGDC”是指[FGDC-STD-001-1988]。还必须指定Web元数据wcs_metadatalink_格式和wcs_metadatalink_href。

wcs_name

  • *描述:*(可选)层的名称。

wcs_nativeformat

  • *说明:*(可选)提供的栅格层的当前格式。(例如,“gtiff”)(用于WCS 1.0)

wcs_native_format

  • *说明:*(可选)所服务栅格层当前格式的mime类型(例如“image/tiff”)。此字段仅在层元数据提供覆盖率元数据时使用(当设置了wcs_范围和wcs_大小/wcs_分辨率时)。设置后,当没有指定其他格式时,wcs 2.0 getcoverge请求将使用此格式(那么,format参数是可选的)。

wcs_outputformat_{OUTPUTFORMATNAME}_creationoption_{OPTIONNAME}

  • *描述:*(可选)(在MapServer 7.2.0中添加)以特定于(gdal)输出格式和特定于层的方式提供创建选项。output format name应由用户用层允许的输出格式的output format.name值替换。和optionname由对outputformat.driver有效的有效gdal创建选项创建。

    此元数据项的目的是提供依赖于层的创建选项,通常是在依赖于该层的生成的栅格文件中配置一些元数据(对于非依赖于层的配置选项,应该使用outputformat.formatOption)。

    For GDAL drivers that support band-specific creation output (at time of writing, only the GRIB driver in GDAL 2.3.0), with a BAND_{bandnumber}_{OPTIONNAME} syntax for the GDAL creation option, it is also possible to use a MapServer metadata item named wcs_outputformat_{OUTPUTFORMATNAME}_creationoption_BAND_{bandnumber}_{OPTIONNAME}. bandnumber will be automatically adjusted when passed to GDAL so that the WCS band subsetting is properly taken into account. You can consult WCS GRIB output in msautotest as a practical example of how to configure GRIB2 WCS output (requires GDAL 2.3.0)

wcs_outputformat_{OUTPUTFORMATNAME}_mdi_{DOMAIN}_{KEY}

  • 描述: (可选)(在MapServer 8.0.0中添加),以特定于GDAL输出格式和特定于层的方式提供元数据项(MDI)选项。用户应将{OUTPUTFORMATNAME}替换为层允许的输出格式的OUTPUTFORMAT.NAME值。{DOMAIN}是GDAL元数据域的名称。通常,您应该使用“Default”作为默认的元数据域。其中,{key}是GDAL元数据项的key。

    该元数据项的目的是提供依赖于该层的GDAL元数据,通常用于配置依赖于该层的结果栅格文件中的某些元数据。

    对于支持波段特定元数据的GDAL驱动程序(例如GeoTIFF、netCDF),也可以使用名为的MapServer元数据项 wcs_outputformat_{{OUTPUTFORMATNAME}}_mdi_BAND_{{bandnumber}}_{{DOMAIN}}_{{KEY}} 。当传递给GDAL时,频段编号将自动调整,以便正确考虑WCS频段子集。

    NetCDF输出是一个典型的用例。对于数据集级别的元数据,键必须以 NC_GLOBAL#

    例子::

    "wcs_outputformat_netCDF_mdi_default_NC_GLOBAL#title" "A succinct description of what is in the dataset"
    

    对于波段元数据::

    "wcs_outputformat_netCDF_mdi_BAND_1_default_NETCDF_VARNAME" "wind"
    "wcs_outputformat_netCDF_mdi_BAND_1_default_long_name"      "wind from direction"
    "wcs_outputformat_netCDF_mdi_BAND_1_default_standard_name"  "wind_from_direction"
    

    NETCDF_VARNAME是GDAL netCDF驱动程序用来确定变量名的特殊密钥名称。所有其他键都映射到属于相应变量的netCDF属性。

    在该层的数据既是netCDF数据集又是WCS请求的输出的特殊情况下,并且没有定义手动WCS_outputFormat_netCDF_MDI_*项,则MapServer会自动将元数据从输入数据集中转发到输出文件。

    对于netCDF输出,如果输入数据集具有多个波段,则可以生成额外维度通常为Time或Z的3D数据集。

    对于每个波段,MapServer元数据项 wcs_outputformat_{{OUTPUTFORMATNAME}}_mdi_BAND_{{bandnumber}}_default__NETCDF_DIM_{{DIMNAME}} 必须定义,其中DIMNAME是额外维度的名称(例如“时间”)

    除此之外,还可以通过设置以下形式的元数据项在额外维度上定义netCDF属性

    wcs_outputformat_{OUTPUTFORMATNAME}_mdi_default_{DIMNAME}#{ATTRNAME}

    其中,{ATTRNAME}替换为要在额外维上设置的属性的名称(例如“STANDARD_NAME”、“UNITS”等)。

    例子::

    # Metadata items to apply to the "time" extra dimension.
    "wcs_outputformat_netCDF_mdi_default_time#calendar" "standard"
    "wcs_outputformat_netCDF_mdi_default_time#standard_name" "time"
    "wcs_outputformat_netCDF_mdi_default_time#units" "hours since 1900-01-01 00:00:00"
    
    # Values of each band along the "time" extra dimension.
    "wcs_outputformat_netCDF_mdi_BAND_1_default_NETCDF_DIM_time" "10"
    "wcs_outputformat_netCDF_mdi_BAND_2_default_NETCDF_DIM_time" "20"
    "wcs_outputformat_netCDF_mdi_BAND_3_default_NETCDF_DIM_time" "30"
    "wcs_outputformat_netCDF_mdi_BAND_4_default_NETCDF_DIM_time" "40"
    

    在该层的数据为netCDF 3D数据集且WCS请求的输出也为netCDF且未定义手动WCS_outputFormat_netCDF_MDI_*项的特殊情况下,MapServer会自动将输入数据集中的元数据转发到输出文件中,以生成netCDF 3D数据集。

Axes Descriptions

MapServer允许您为一个层定义一个数字。定义特定元数据(如描述)时,单个轴按名称标识。所有定义的轴都必须列在rangeset_axes元数据标记中,以便mapserver提前知道需要什么。通过将名称“bands”添加到rangeset_axes列表中,自动生成多波段日期的特殊范围集。如果找到,MapServer将自动为图像带生成元数据。当然,您可以使用下面的命名约定扩展这个基本支持。

wcs_rangeset_axes

  • Description: (Optional) Delimited list of defined range sets. If defined, you can also use the following nine metadata items, where rangeset axis 与此中提供的轴名称匹配 wcs_rangeset_axes 元数据:(仅限WCS 1.x)

    范围集轴u语义

    **范围集轴

    **范围集轴

    范围集轴_描述

    范围集轴_标签

    范围集轴_值

    范围集轴_值_语义

    范围集轴_值_类型

    范围集轴_间隔

wcs_rangeset_description

  • *描述:*(可选,用于DescribeCoverage请求)RangeSet描述(仅限WCS 1.0)

wcs_rangeset_label

  • *描述:*(必需,用于DescribeCoverage请求)RangeSet标签(仅限WCS 1.x)

wcs_rangeset_name

  • *描述:*(必需,对于DescribeCoverage请求)RangeSet名称(仅限WCS 1.x)

wcs_rangeset_nullvalue

  • *描述:*(可选,用于DescribeCoverage请求)RangeSet单个空值(仅限WCS 1.x)

wcs_srs

  • 描述: (可选)层的空间参考系统,格式为:EPSG:CODE(例如,EPSG:3978)

wcs_timeitem

  • *描述:*(可选)时空索引中包含时间值的属性。

wcs_timeposition

  • *描述:*(可选)给定覆盖范围的开始和结束时间列表(即“2000-11-11t11:11:11z,2001-11-11t11:11:11z”),在发布getcapabilities时使用。

层元数据API

如果 wcs_metadatalink_href 未定义,则MapServer将提供指向给定层的层元数据API的链接。请参阅 Layer Metadata API 文档以获取更多信息。

在MapServer WCS中处理SRS的规则

待办事项!

时空指标

MapServer长期以来支持将数据集拆分为更小、更易于管理的块或块的方法。在这种情况下,shapefile用于存储每个图块的边界,属性保存实际数据的位置。在mapserver mapfile中,层关键字tileindex和tileitem用于激活tiling。

举一个例子,一个组织想要为数百甚至数千个modis场景提供服务。五幅图像覆盖了空间范围,每组五幅图像随拍摄日期而变化。对于对WCS感兴趣的组织来说,这是一个相当常见的场景,现有的平铺支持没有充分解决这一问题。在MapServer的早期版本中,开发人员必须为每组五张图像创建一个图块索引和一个层定义。这可能导致配置文件太长,难以管理。

为了更有效地支持WCS规范,在MapServer中实现了一种新的平铺方案。一种支持空间子设置,但也支持基于图块索引中的任何属性的特殊子设置。在许多情况下,可以使用时间属性,但子设置不限于这种情况。新方案引入了分块索引层的概念,即用一个单独的层定义来描述分块索引数据集。通过这一点,我们可以获得任何mapserver层的所有好处,最重要的是我们可以将mapserver过滤器应用于数据。过滤器可以在运行时使用mapserver cgi、mapscript或通过wcs服务器接口定义。使用索引的层的语法保持不变,除非 瓦片索引 引用索引层而不是外部形状文件。

因此,再次查看上面的示例,我们可以将mapserver配置减少到两个层定义,一个用于tile索引,另一个用于图像本身。提取一个具有图像价值的单一日期现在是在平铺索引层中设置适当的过滤器的问题。

建筑时空瓦指标

仅仅因为没有现成的工具,开发这些平铺索引比开发基本索引更困难。幸运的是,我们可以利用MapServer中现有的工具或支持库(如gdal)对其输出进行后处理。

在上面的例子中,如果您愿意卷起袖子编写一些代码,那么构建一个索引就相对简单了。首先,需要建立基本的空间指标。gdal实用程序gdalindex已经这样做了。只需将gdaltindex指向包含modis映像集合的目录,它将构建一个适用于mapserver的shapefile索引。下一步是添加时间信息。伪代码看起来像:

  • 打开index.dbf文件进行读取

  • 创建新列以保存图像采集日期

  • 对于每个图像;1)提取图像采集日期,2)将其插入新列

  • 关闭index.dbf文件

这种一般方法可用于许多情况。像Perl、PHP或Python这样的脚本语言工作得很好,因为它们都有操作.dbf文件的现成模块。最坏的情况是使用桌面工具(如mircosoft access或esri arcview)手工编辑生成的.dbf文件。

WCS 2.0应用概况-地球观测(EO-WCS)

OGC目前正在讨论为WCS 2.0(EO-WCS)采用地球观测(EO)应用概要(见 public RFC on EO-WCS )有关实现,请参考开源项目 EOxServer 它已经基于MapServer实现了这一提议的EO-WCS。

待办事项和已知限制

  • MapServer没有从给定的数据集中派生出它所能获得的所有元数据。例如,必须明确列出一个层所覆盖的时间段。随着时间的推移,情况会有所好转。

  • 在目前的实现中,只有空间、简单的时间和辐射波段子集是可能的。未来的增强应该允许基于像素值或平铺/图像属性的任意子集。

  • 可用的WCS 2.0规范文档集尚未完成。因此,对于一些实现细节,必须根据为WCS 1.1和1.0所采取的方法来预期一些即将到来的扩展的内容。一旦新的规范文件可用,将立即调整实施。

  • 如果要使用libxml2或其派生工具(如xmllint)进行验证,请注意libxml2中当前有一个bug破坏了GML3.2.1的验证。

信用

加拿大气象局为每层创建选项提供了资金支持。