WFS服务器

作者

杰夫麦克纳

联系

jmckenna在gatewaygeomatics.com

作者

甚至鲁奥

联系

甚至.rouault at mines-paris.org

最后更新

2019-07-02

介绍

WFS(Web功能服务)将功能级别的地理空间数据发布到Web。这意味着,客户机不再像MapServer以往那样返回图像,而是在几何图形和属性级别上获取有关基础数据的特定地理空间特征的细粒度信息。与其他OGC规范一样,这个接口使用XML overHTTP作为其传递机制,更准确地说,使用GML(地理标记语言),它是XML的一个子集。

在版本7.0中,MapServer支持WFS规范的版本1.0、1.1和2.0。

软件需求

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

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

  • GDAL/OGR:I/O支持库。需要1.6.0或更高版本。

请看地图服务器 UNIX Compilation and Installation HowTo 有关编译支持这些库和功能的MapServer的详细说明。对于Windows用户, MS4W 安装人员随时准备为WFS和WMS服务。

支持的GML版本

MAPServer可以同时输出GML2和GML3。默认情况下,mapserver服务于gml2。您可以通过将“outputformat”参数添加到getFeature请求来测试这一点,例如:

对于WFS 2.0,默认输出格式为“application/gml+xml;version=3.2”。

有关支持的版本的详细讨论,请参阅 bug#884 .

配置映射文件以服务WFS层

与在WMS支持中一样,WFS发布是通过向映射文件中添加某些magic元数据关键字/值对来实现的。

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

  • 数据源为矢量类型(shapefile、ogr、postgis、sde、sdo等)

  • 必须设置层名称。设置WFS服务器时,层名称必须以字母开头(层名称不应以数字开头或包含空格)。

  • 层类型是:线、点、多边形

  • “WFS联机资源”元数据:

    WFS联机资源元数据在映射的Web对象元数据中设置,并指定访问服务器时应使用的URL。这对于getCapabilities输出是必需的。如果没有提供WFS-OnlineResource,那么MapServer将尝试使用脚本名和主机名提供默认的资源,但您不应该过于依赖它。强烈建议您提供WFS联机资源元数据。

    见第12.3.3节 WFS 1.0.0 specification 关于在线资源URL的整个故事。基本上,您需要的是一个完整的HTTP URL,包括http://prefix、hostname、script name,可能是一个“map=”参数,并以“?”结尾。或“&”。

    以下是有效的联机资源URL:

    http://my.host.com/cgi-bin/mapserv?map=mywfs.map&
    

    通过在服务器上创建包装脚本,可以从URL中隐藏“map=”参数,然后服务器的联机资源URL可以类似于:

    http://my.host.com/cgi-bin/mywfs?
    

    这将在 WMS Server 文件。

  • “WFS_启用_请求”元数据(见下文)。

WFS服务器映射文件示例

下面是一个最小值为空的WFS服务器映射文件的示例。注意所需参数的注释。

MAP
  NAME "WFS_server"
  STATUS ON
  SIZE 400 300
  SYMBOLSET "../etc/symbols.txt"
  EXTENT -180 -90 180 90
  UNITS DD
  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
      "wfs_title"          "WFS Demo Server for MapServer" ## REQUIRED
      "wfs_onlineresource" "https://demo.mapserver.org/cgi-bin/wfs?" ## Recommended
      "wfs_srs"            "EPSG:4326 EPSG:4269 EPSG:3978 EPSG:3857" ## Recommended
      "wfs_abstract"       "This text describes my WFS service." ## Recommended
      "wfs_enable_request" "*"  # necessary
    END
  END

  PROJECTION
    "init=epsg:4326"
  END

  #
  # Start of layer definitions
  #

  ##################
  # World Continents
  ##################
  LAYER
    NAME "continents"
    METADATA
      "wfs_title"         "World continents" ##REQUIRED
      "wfs_srs"           "EPSG:4326" ## REQUIRED
      "gml_include_items" "all" ## Optional (serves all attributes for layer)
      "gml_featureid"     "ID" ## REQUIRED
      "wfs_enable_request" "*"
    END
    TYPE POLYGON
    STATUS ON
    DATA 'shapefile/countries_area'
    PROJECTION
      "init=epsg:4326"
    END
    CLASS
      NAME 'World Continents'
      STYLE
        COLOR 255 128 128
        OUTLINECOLOR 96 96 96
      END
    END
  END #layer

END #mapfile

MapServer WFS中的SRS处理规则

OGC WFS 1.0规范不允许在多个SRS中公布层(功能类型)。此外,默认情况下没有适用于所有层的默认SRS。但是,可以在不同的SRS中通告WFS服务器中的每一层。

METADATA ows_srs) .

以下是MapServer如何决定要为WFS中的每个层发布和使用SRS:

  • 如果定义了顶级映射SRS,则使用此SRS并将其应用于此WFS中的所有层(要素类型)。在这种情况下,即使设置了各个层的SRS,也会被忽略。

  • 如果没有定义顶级映射SRS,那么每个层都会在其自身的SRS中在功能中进行通告。

注解

wfs_srs / ows_srs

注解

wfs_srs / ows_srs PROJECTION 块。

注解

wfs_srs / ows_srs

wfs_srs / ows_srs wfs_srs / ows_srs wfs_srs / ows_srs

wfs_srs / ows_srs wfs_srs / ows_srs

WFS 1.1和2.0中的轴方向

WFS规范先前版本中的轴顺序是始终使用东距(x或lon)和北距(y或lat)。WFS 1.1规定,根据特定的SRS,X轴可能朝西或不朝东,Y轴可能朝南或不朝北。WFS描绘操作应考虑轴顺序。这会影响一些常用的EPSG代码,如ESPG:4326。当前的实现确保返回到服务器的GetFeature请求的坐标反映了EPSG代码在4000到5000之间的逆轴顺序。

对于SRS,对于WFS 2.0,它将始终以*“urn:ogc:def:crs:epsg::”*语法报告。这可能也适用于WFS 1.1.0。可以将“wfs-return-srs-as-urn”Web元数据项设置为“true”或“false”,以启用或禁用此行为。WFS 2.0默认为“真”,旧版本默认为“假”。

测试WFS服务器

验证功能元数据

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

使用Web浏览器,访问服务器的联机资源URL,在其末尾添加参数“request=getCapabilities”,例如。

https://demo.mapserver.org/cgi-bin/wfs?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetCapabilities

如果一切顺利,您应该有一个完整的XML功能文档。搜索“警告”一词…MapServer插入以“<!”开头的XML注释。--警告:“在XML输出中,如果检测到丢失的mapfile参数或元数据项。如果您在XML输出中发现任何警告,那么您必须在将服务器注册到WFS客户机之前修复所有警告,否则事情可能不起作用。

注解

所有WFS请求都需要服务参数。当一个请求发生时,它将通过mapserver中的wms、wfs和wcs(按该顺序)传递,直到其中一个服务响应它。

使用GetFeature请求进行测试

好了,既然我们知道我们的服务器可以生成有效的XML getCapabilities响应,那么我们应该测试getFeature请求。只需将“service=wfs&version=1.0.0&request=getFeature&typename=yourlayername1,yourlayername2”添加到服务器的URL,就可以返回与这些层关联的GML。

https://demo.mapserver.org/cgi-bin/wfs?SERVICE=WFS&VERSION=1.0.0&REQUEST=getfeature&TYPENAME=continents&MAXFEATURES=100

对于WFS 2.0,相同的请求是:

https://demo.mapserver.org/cgi-bin/wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&TYPENAMES=continents&COUNT=100

用真正的客户进行测试

如果您有权访问WFS客户机,那么用它注册新服务器的在线资源,您应该关闭并运行。

如果您还没有安装自己的WFS客户机,下面是一些提示:

  • mapserver本身可以用作WFS客户机,请参见 WFS Client HowTo .

  • QGIS 是一个完整的地理信息系统包,包括WFS客户端支持。(推荐)

  • Deegree 提供WFS客户端。

  • uDig 可以从WMS/WFS服务器添加层。

支持GET和POST请求

从4.2版开始,MapServer支持XML编码的POST请求和GET请求。mapserver中的默认值是post。

支持筛选器编码

从4.2版开始,MapServer支持WFS GetFeature请求中的过滤器编码(FE)。有关筛选器编码的服务器端的详细信息,请参阅 Filter Encoding HowTo .

支持排序

WFS 1.1和2.0支持排序。WFS客户端可以添加 SORTBY 查询字符串的参数,用于根据一个或多个属性值对结果进行排序,例如。 SORTBY=Field1 DESC,Field2 ASC .

支持排序的驱动程序列表(除非另有指定,否则排序是在MapServer 7.0中实现的):

  • OGR

  • 邮政地理信息系统

  • 甲骨文公司

  • MS SQL Server(7.4版)

MapServer Shapefile提供程序不支持排序。如果需要,则必须使用OGR Shapefile提供程序。

有关进一步排序实现的详细信息,请参见 MS RFC 105:支持WFS 2.0(服务器端) .

MapServer WFS扩展

STARTINDEX

这是WFS 2.0中的标准配置,也可以作为WFS 1.0和1.1的MapServer扩展。除了maxfeatures=n关键字(在wfs 2.0中被count替换),mapserver还支持wfs getfeature请求中的startindex=n关键字。这可用于跳过结果集中的某些功能,并与maxfeatures(或count)结合使用,提供了使用WFS GetFeature在结果中分页的能力。请注意,startindex=0表示从第一个功能开始,跳过“无”。

OUTPUTFORMAT

对于WFS 1.0,输出格式通常应为GML2,对于WFS 1.1,输出格式应为“text/xml;subtype=gml/2.1.2”或“text/xml;subtype=gml/3.1.1”。对于WFS 2.0,默认值为“application/gml+xml;version=3.2”,但也可以请求gml2和gml3。但是,作为规范的扩展,也可以为各种其他功能输出格式配置MapServer。这在 OGR Output 文件。

存储查询(WFS 2.0)

存储的查询是存储在服务器上的查询(<wfs:query>),可能带有参数,这些参数的值可以在GetFeature请求期间由客户端分配。

在web.metadata级别,可以使用以逗号分隔的存储查询ID列表指定“wfs-storedquerys”元数据项。

然后,对于每个存储的查询ID,“wfs_u[stored query id]_inlinedef”必须指定一个有效的<storedquerydescription>作为值。由于指定内联XML内容并不总是方便的,因此也可以指定“wfs storedqueryid u filedef”,其值是包含<storedquerydescription>xml内容的文件名。

"wfs_storedqueries"           "bboxstoredquery"
"wfs_bboxstoredquery_filedef" "/data/bboxstoredquery.xml"

使用/data/bboxstoredquery.xml,例如包含:

<?xml version="1.0" encoding="UTF-8"?>
<StoredQueryDescription xmlns:xs="http://www.w3.org/2001/XMLSchema"
                        xmlns:gml="http://www.opengis.net/gml/3.2"
                        id="bboxstoredquery">
    <Title>query title</Title>
    <Abstract>query abstract</Abstract>
    <Parameter name="longmin" type="xs:double"/>
    <Parameter name="latmin" type="xs:double"/>
    <Parameter name="longmax" type="xs:double"/>
    <Parameter name="latmax" type="xs:double"/>
    <QueryExpressionText isPrivate="false"
                        language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
                        xmlns:ms="http://mapserver.gis.umn.edu/mapserver"
                        returnFeatureTypes="ms:firstLayer ms:secondLayer">
        <Query xmlns:fes="http://www.opengis.net/fes/2.0" typeNames="ms:firstLayer">
            <fes:Filter>
                <fes:BBOX>
                    <gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326">
                        <gml:lowerCorner>${latmin} ${longmin}</gml:lowerCorner>
                        <gml:upperCorner>${latmax} ${longmax}</gml:upperCorner>
                    </gml:Envelope>
                </fes:BBOX>
            </fes:Filter>
        </Query>
        <Query xmlns:fes="http://www.opengis.net/fes/2.0" typeNames="ms:secondLayer">
            <fes:Filter>
                <fes:BBOX>
                    <gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326">
                        <gml:lowerCorner>${latmin} ${longmin}</gml:lowerCorner>
                        <gml:upperCorner>${latmax} ${longmax}</gml:upperCorner>
                    </gml:Envelope>
                </fes:BBOX>
            </fes:Filter>
        </Query>
    </QueryExpressionText>
</StoredQueryDescription>

相应的有效GetFeature请求可以是:

REQUEST=GetFeature&STOREDQUERY_ID=bboxstoredquery&LONGMIN=2&LATMIN=49&LONGMAX=3&LATMAX=50

预定义的urn:ogc:def:query:ogc-wfs::getFeatureByID存储查询

WFS 2.0定义了一个强制*“urn:ogc:def:query:ogc-wfs::getFeatureByID”*存储查询。此查询接受一个ID参数,该参数的值必须是功能ID。

有效的请求是:request=getfeature&storedquery_id=urn:ogc:def:query:ogc-wfs::getfeaturebyid&id=mylayer.3

MapServer中硬编码的定义是:

<?xml version="1.0" encoding="UTF-8"?>
<StoredQueryDescription id="urn:ogc:def:query:OGC-WFS::GetFeatureById">
  <Title>Get feature by identifier</Title>
  <Abstract>Returns the single feature whose value is equal to the specified value of the ID argument</Abstract>
  <Parameter name="ID" xmlns:xs="http://www.w3.org/2001/XMLSchema" type="xs:string"/>
  <QueryExpressionText isPrivate="true"
        language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
        returnFeatureTypes="">
    <Query xmlns:fes="http://www.opengis.net/fes/2.0" typeNames="?">
      <fes:Filter>
        <fes:ResourceId rid="${ID}"/>
      </fes:Filter>
    </Query>
  </QueryExpressionText>
</StoredQueryDescription>

与更标准的存储查询描述相比,有两个奇怪之处:运行时将“returnFeatureTypes”属性的值替换为mapfile的有效WFS层的名称(在发出响应文档以描述storedqueries请求时)。而typenames属性的值是在运行时根据传递的id参数的值推导出来的。

可以通过定义*“wfs-urn:ogc:def:query:ogc-wfs::getFeatureByID_inlineDef”“wfs-urn:ogc:def:query:ogc-wfs::getFeatureByID_inlineDef”*来重写此硬编码定义(例如为其他语言提供备用值)。但是,<queryExpressionText>属性和子元素的值必须与硬编码定义完全相同,才能正确执行。

使用“*”urn:ogc:def:query:ogc-wfs::getFeatureByID“*的getFeature似乎与带有resourceID参数的getFeature相同,但存在差异。GetFeatureByID直接返回功能作为响应:

<?xml version='1.0' encoding="UTF-8" ?>
<ms:province gml:id="province.977" xmlns:ms="http://mapserver.gis.umn.edu/mapserver"
    xmlns:gml="http://www.opengis.net/gml/3.2"
    xmlns:wfs="http://www.opengis.net/wfs/2.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://mapserver.gis.umn.edu/mapserver
      http://localhost/path/to/wfs_simple?myparam=something&amp;
        SERVICE=WFS&amp;VERSION=2.0.0&amp;REQUEST=DescribeFeatureType&amp;
        TYPENAME=province&amp;
        OUTPUTFORMAT=application%2Fgml%2Bxml%3B%20version%3D3.2
      http://www.opengis.net/wfs/2.0
      http://schemas.opengis.net/wfs/2.0/wfs.xsd
      http://www.opengis.net/gml/3.2
      http://schemas.opengis.net/gml/3.2.1/gml.xsd">
<gml:boundedBy>
  <gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326">
  <gml:lowerCorner>47.76789 -61.51051</gml:lowerCorner>
  <gml:upperCorner>47.79644 -61.45764</gml:upperCorner>
  </gml:Envelope>
</gml:boundedBy>
<ms:msGeometry>
  <gml:Polygon gml:id="province.977.1" srsName="urn:ogc:def:crs:EPSG::4326">
    <gml:exterior>
      <gml:LinearRing>
      <gml:posList srsDimension="2">47.77424 -61.51051 47.78860 -61.50894
        47.79644 -61.49272 47.78743 -61.45764 47.76789 -61.45998 47.76961
        -61.48350 47.77424 -61.51051 </gml:posList>
      </gml:LinearRing>
    </gml:exterior>
  </gml:Polygon>
</ms:msGeometry>
</ms:province>

参考截面

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

注解

下面的每个元数据也可以称为“OWS”而不是“WFS”。mapserver首先尝试使用'wfs_*'元数据,如果找不到,则尝试使用相应的'ows_*'名称。使用它可以减少支持多个OGC接口的映射文件中的重复量,因为“OWS”元数据几乎可以在任何地方用于多个OGC接口共享的公共元数据项。

Web对象元数据

ows_allowed_ip_list (或WFS_允许的_IP_列表)

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

    例子::

    METADATA
      "ows_allowed_ip_list" "123.45.67.89 11.22.33.44"
    END
    

ows_denied_ip_list (或WFS_拒绝的_IP_列表)

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

    例子::

    METADATA
      "ows_denied_ip_list" "123.45.67.89 11.22.33.44"
    END
    
ows_schemas_location

(可选)(注意名称“OWS”模式“位置”,而不是“WFS/”…这是因为所有OGC Web服务(OWS)都使用同一个元数据)根目录树,其中包含OGC WFS XMLSchema文件系列。如果希望在验证XML分析器中验证WFS输出,则此URL必须是实际.xsd文件所在的有效URL。默认值为http://schemas.opengis.net。

ows_updatesequence

(可选)updateSequence参数可用于维护服务元数据文档内容的客户端缓存的一致性。参数值可以是整数、时间戳(采用[ISO 8601:2000]格式)或任何其他数字或字符串。

wfs_abstract

(可选)有关服务器的详细信息的描述性叙述。

WFS标记名:摘要(WFS 1.0.0,第2.3.3)

wfs_accessconstraints

(可选)描述服务提供者对WFS施加的任何访问约束或从此服务检索到的数据的文本。

WFS标记名:accessConstraints(WFS 1.0.0,节2.3.3)

wfs_compute_number_matched

(可选,仅限WFS 2.0)当此元数据项设置为“true”时,服务器将确定与GetFeature请求匹配的功能数,并将其返回到响应中<FeatureCollection>元素的“numberMatched”属性中。计算这个数字可能需要很长时间,因此强烈建议 NOT 定义此项。未定义时,“numberMatched”属性设置为“Unknown”。

有关影响resultType=hits getFeature请求的类似设置,请参阅“wfs_maxFeatures_ignore_for_resultType_hits”。

wfs_enable_request (或) ows_enable_request)

GetCapabilities, GetFeatureDescribeFeatureType.

实例:

GetCapabilitiesGetFeature:

"wfs_enable_request" "GetCapabilities GetFeature"

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

"wfs_enable_request" "* !GetCapabilities"
wfs_feature_collection

将包含元素(<msFeatureCollection>)的功能的默认名称替换为用户定义的值。

wfs_features_cache_count

(可选,因为MapServer 7.2)在第一次查询传递期间检索到的最大功能数,应缓存这些功能,以免再次向数据源发出请求。这可能被设置为与WFS_MaxFeatures相同的值,但不一定。如果还设置了wfs_features_cache_大小,则将遵守最严格的限制。注意:这是一个高级设置。

wfs_features_cache_size

(可选,因为MapServer 7.2)第一次查询传递期间允许缓存功能的最大RAM量,以便在生成GML或OGR输出时不再向数据源请求。如果还设置了wfs_features_cache_count,则将遵守最严格的限制。默认情况下,值以字节为单位,除非指定了“mb”后缀。注意:这是一个高级设置。

wfs_fees

(可选)服务提供商因使用本服务或从WFS检索数据而收取的任何费用。

WFS标签名称:费用(WFS 1.0.0,第2.3.3)

wfs_getcapabilities_version

(可选)用于没有版本参数的getCapabilities请求的默认版本。如果未设置,将返回最新支持的版本。从MapServer 7.0开始,此默认版本为“2.0.0”。有效值为“1.0.0”、“1.1.0”和“2.0.0”。

wfs_keywordlist

(可选)帮助目录搜索的单词列表。

WFS标记名:关键字(WFS 1.0.0,节2.3.3)

wfs_languages

wfs_maxfeatures

(可选)WFS服务器返回的最大和默认元素数。如果用户在getFeatureRequest中设置了“maxFeatures”参数,则将使用其值,前提是该值不超过wfs_MaxFeatures。如果没有指定wfs_MaxFeatures,服务器将无限制地返回与查询匹配的所有功能,当服务具有大量功能的层时,可能会使服务器长时间繁忙。敏感值是大于0的整数。如果指定0,则不会返回任何功能。在WFS 2.0中,此项用于填充针对getCapabilities请求的响应文档的“countDefault”参数,以便客户机了解服务器限制。另请参见“wfs_maxfeatures_ignore_for_resultType_hits”项。

wfs_maxfeatures_ignore_for_resulttype_hits

(可选,在MapServer 7.2中添加)控制在resultType=hits getFeature请求中是否也考虑“wfs_MaxFeatures”设置的限制。

参见“结果类型参数”一章( OGC WFS 2.0 specification 教派。7.3.3.6)

将此项设置为“假”时,在处理resultType=hits GetFeature请求时也会考虑“wfs_MaxFeatures”设置的限制,即返回的命中数不会大于wfs_MaxFeatures。这是7.2之前的MapServer版本中的行为,也是更高版本中的常规默认行为。除非查询的所有图层都是Postgis图层,在这种情况下,计算命中数时不考虑WFS_MaxFeatures。该项可以显式设置为“真”,以便在计算命中数(对于任何层类型)时不考虑WFS_MaxFeatures,因为这可能会对大型层和/或访问速度较慢的后端显示性能问题。

如果未设置WFS_MaxFeatures,则此项无效。

wfs_namespace_prefix

(可选)用于响应WFS GetFeature请求的用户定义的命名空间前缀。例如,“wfs_namespace_prefix”“someprefix”。

wfs_namespace_uri

(可选)用于响应WFS GetFeature请求的用户定义的命名空间URI。例如,“wfs_-namespace_-uri”“http://somehost/someurl”。

wfs_onlineresource

(推荐)HTTP GET请求的URL前缀。

WFS标记名:OnlineResource(WFS 1.0.0,节2.3.3)

wfs_return_srs_as_urn

(可选)在WFS 2.0中默认为“真”,在WFS 1.0和1.1中默认为“假”。当设置为“true”时,GetFeature响应文档中的SRS将始终使用*“urn:ogc:def:crs:epsg::”*语法进行报告。

wfs_service_onlineresource

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

  1. wfs_service_onlineresource

  2. ows_service_onlineresource

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

wfs_srs

(推荐)要用于此服务器中所有层的SRS。(例如epsg:4326)请参见WFS中有关SRS规则的说明。

wfs_storedqueries

(可选,WFS 2.0)存储查询ID的逗号分隔列表。必须使用WFS_[storedqueryid]_inlinedef或WFS_[storedqueryid]_filedef定义每个存储查询。

wfs_[storedqueryid]_inlinedef

(可选,WFS 2.0)在WFS存储查询中列出的存储查询的内联XML内容。此内容必须是有效的<storedquerydescription>文档。

wfs_[storedqueryid]_filedef

(可选,WFS 2.0)包含有效文档的文件名。

wfs_title

(必需)用于标识服务器的可读标题。WFS标签名称:标题(WFS 1.0.0,第2.3.3)

层对象

gml_constants

(可选)以逗号分隔的常量列表。此选项允许您定义不属于基础数据集的数据,并将其添加到GML输出中。许多应用程序模式需要一种或另一种形式的常量。要指定常量的值和类型,请使用gml_u[item name]_value和gml_[item name]_type。

"gml_constants" "const1,const2"
"gml_const1_type" "Character"
"gml_const1_value" "abc"
"gml_const2_type" "Integer"
"gml_const2_value" "999"
gml_default_items

(可选)不带显式属性名的getFeature响应文档中要放入的项的逗号分隔列表,或“all”。处理不带显式属性名的GetFeature请求时,默认情况下MapServer返回所有项。从MapServer 7.0开始,可以通过指定“gml_default_items”来修改此行为,以指定必须返回哪些项(可选项中)。

gml_exclude_items

(可选)要排除的项的逗号分隔列表。从MapServer4.6开始,您可以使用元数据控制为数据层公开的属性(字段)的数量。以前的行为只是一直公开所有属性。默认情况是根本不公开任何属性。排除特定字段的示例如下:

"gml_include_items" "all"
"gml_exclude_items" "Phonenum"
gml_featureid

(对于MapServer 4.10是必需的)字段,用于输出GML中功能的ID。可以指定WFS_FeatureID或OWS_FeatureID。

gml_geometries

为几何图形元素提供除默认“msgeometry”之外的名称。该值被指定为用于几何元素名称的字符串。”“无”将从MapServer集成输出中排除几何体(ogr outputformat不支持此设置)。

gml_uu[geometry name]_发生

mapserver将默认值0和1分别应用于几何元素的“minoccurs”和“maxoccurs”属性,如前面的示例所示。要覆盖这些默认值,将为gml_uu[geometry name]_occurrences layer metadata项分配一个值,其中[geometry name]再次是为gml_geometries指定的字符串值,该值是一个逗号分隔的对,包含各自的下限和上限。

gml_uu[geometry name]_类型

当使用gml_几何图形时,还需要指定层的几何类型。这是通过为gml_uuu几何名称类型提供一个值来实现的,其中[几何名称]是为gml_u几何指定的字符串值,并且是以下值之一:

  • 多点

  • 线

  • 多线

  • 多边形

  • 多多边形

ows/wfs_geomtype

(可选,元数据与共享 OGR output )。设置从此MapServer层创建的OGR层的几何类型。“point”、“linestring”、“polygon”、“multipoint”、“multilistering”、“multipolygon”、“geometrycollection”、“geometry”或“none”之一。大多数都相当明显,但是“几何体”可以用来表示几何体类型的混合,“无”有时适用于没有几何体的图层。请注意,混合多边形和多多边形的层通常必须描述为“几何体”。要生成2.5d输出,请将“25d”附加到几何类型(即“polygon25d”)。请注意,只有在使用“点”支持构建时,mapserver才携带z值。

"ows_geomtype"  "Polygon25D"

注解

对于GML输出,仅考虑值的“25d”后缀以确定是否应输出Z坐标。

gml_groups

(可选)以逗号分隔的层组名列表。

gml_u[group name]_组

(可选)组中以逗号分隔的属性列表。下面是一个例子:

"gml_include_items" "all"
"gml_groups"        "display"
"gml_display_group" "Name_e,Name_f"
gml_include_items

(可选)要包含的项的逗号分隔列表,或关键字“all”。从MapServer 4.6开始,您可以使用此元数据控制为数据层公开的属性(字段)的数量。以前的行为只是一直公开所有属性。您可以使用关键字“all”启用完全曝光,例如:

"gml_include_items" "all"

可以指定部分曝光的属性(字段)列表,例如:

"gml_include_items" "Name,ID"

新的默认行为是完全不公开属性。

gml_u[item name]_别名

(可选)属性名称的别名。服务的gml将通过别名引用此属性。下面是一个例子:

"gml_province_alias" "prov"
gml_u[item name]_精度

(可选)为重要格式(如shapefiles)指定指定字段的精度。Precision是小数位数,仅用于“real”字段。目前,这只用于基于OGR的输出格式,而不是WFS GML2/GML3输出。

gml_[item name]_type (可选)

指定属性的类型。有效值为ogr数据类型:integer |Long| 真实 |Character| 日期布尔值。MapServer将这些转换为有效的GML数据类型。注意:long用于64位整数,从mapserver 7.0.1开始。

gml_u[item name]_值

用于指定gml_常量的值。

gml_u[item name]_width

(可选)为重要格式(如shapefiles)指定指定字段的宽度。

gml_mandatory_items

(可选)以逗号分隔的强制项列表,或关键字“all”。参见gml_可选项。

gml_optional_items

(可选)要设置为可选的项目的逗号分隔列表,或关键字“all”。默认情况下,从MapServer 7.0开始,所有项目都被视为可选(在GML应用程序模式中minoccurs=“0”)。如果指定了“gml_optional_items”,则只有列出的元素是可选的,其他包含的项目是必需的。如果有更多的强制性项目,那么指定“gml_强制性项目”可能更方便。

gml_types

(可选)如果此字段为“自动”,则某些输入功能驱动程序(例如,ogr、postgis、oraclespace和本机形状文件)将根据源文件自动填充层的类型、宽度和精度元数据。这主要用于基于OGR的输出格式,以及WFS GML2/GML3输出到格式日期。

"gml_types"   "auto"
gml_xml_items

(可选)不应进行XML编码的项的逗号分隔列表。

ows_allowed_ip_list

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

ows_denied_ip_list

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

wfs_abstract

与Web对象中的WFS_摘要相同。

wfs_enable_request (或) ows_enable_request)

GetCapabilities, GetFeatureDescribeFeatureType.

实例:

GetCapabilitiesGetFeature:

"wfs_enable_request" "GetCapabilities GetFeature"

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

"wfs_enable_request" "* !GetCapabilities"
wfs_extent

(可选)用于层的boundingbox标记,用于MapServer无法(或非常低效)探测数据源以确定其范围的情况。此元数据的值为“minx miny maxx maxy”,由空格分隔,值以层的投影单位为单位。如果提供了WFS_扩展数据块,则它具有优先级,并且MapServer不会尝试读取源文件的扩展数据块。

wfs_featureid

(对于MapServer 4.10是必需的)字段,用于输出GML中功能的ID。可以指定gml_featureid或ows_featureid。

wfs_getfeature_formatlist

(可选)应对GetFeature请求有效的格式的逗号分隔列表。如果定义了,那么只有这些格式才会在功能文档中公布。

wfs_keywordlist

与Web对象中的WFS关键字列表相同。

wfs_metadataurl_about

(可选)用于引用元素的方面,该方面包括元数据提供的有关metadataurl元素。还必须指定层元数据wfs_metadataurl_href。参见表11 OGC WFS 2.0 specification (仅限WFS 2)

wfs_metadataurl_format

(可选)元数据记录的文件格式。有效值为“xml”、“sgml”或“html”。还必须指定层元数据wfs_metadataurl_type和wfs_metadataurl_href。参见第12.3.5节 WFS 1.0.0 spec (未用于WFS 2.0)。

wfs_metadataurl_href

(可选)层元数据的URL。还可以指定WFS 1.0和1.1的层元数据WFS_metadataurl_type和WFS_metadataurl_格式,或WFS 2.0的WFS_metadataurl_about。参见第12.3.5节 WFS 1.0.0 spec 以及表11 OGC WFS 2.0 specification

wfs_metadataurl_type

(可选)元数据符合的标准。目前只有两种类型是有效的:“TC211”是指[ISO 19115],而“FGDC”是指[FGDC CSDGM]。还必须指定层元数据wfs_metadataurl_format和wfs_metadataurl_href。参见第12.3.5节 WFS 1.0.0 spec (未用于WFS 2.0)。

wfs_srs

如果在映射文件的顶层没有定义SRS,那么该SRS将用于在功能中通告此功能类型(层)。请参阅WFS中有关SRS规则的说明。

wfs_title

与Web对象中的WFS_标题相同。

wfs_use_default_extent_for_getfeature

(可选,因为mapserver 7.0.4)在没有其他空间过滤器的情况下,是否应在对数据源的请求中使用map.extent。这是默认行为,但在某些用例中,这可能会影响性能。在这些情况下,将此项设置为否将避免附加到请求的默认空间过滤器。这仅对OGR数据源实现。

层元数据API

如果 wfs_metadataurl_href 未定义,MapServer将为中的给定层提供指向层元数据API的链接。 <MetadataURL> 元素。见 Layer Metadata API 有关详细信息的文档。

待办事项和已知限制

  • 这只是一个基本的WFS(只读):不支持事务请求,可能永远不会给出mapserver的性质。 GeoServerTinyOWS 建议用于需要WFS-T支持的人员。

  • WFS规范似乎要求给定特征类型的特征必须都是相同的几何类型(点、线、多边形)。这对shapefiles很好,但MapServer支持的某些数据源格式允许在单个层中混合几何类型,这与WFS规范不符。欢迎就如何处理此问题提出建议(将建议发送到 mapserver-dev mailing list .