WFS客户端

作者

让·弗朗索瓦·多永

联系

jdoyon在nrcan.gc.ca

作者

杰夫麦克纳

联系

jmckenna在gatewaygeomatics.com

最后更新

2020-06-09

介绍

CONNECTIONTYPE

OGR) . 见 通过MapServer的OGR矢量层 数据文件。

WFS(Web功能服务)将功能级别的地理空间数据发布到Web。这意味着可以使用此数据作为数据源来呈现地图。实际上,这与通过Web访问shapefile没有什么不同,只是它不是shapefile,而是XML编码的地理空间数据(确切地说是GML),包括几何图形和属性信息。

软件需求

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

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

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

  • libcurl:用于帮助mapserver充当HTTP客户机。需要7.10或更高版本。

有关编译支持这些库和功能的mapserver的详细说明,请参阅mapserver unix编译和安装howto。对于Windows用户,请查看MapServer网站,查看是否有任何二进制文件可以满足这些要求。

设置WFS客户端映射文件

存储临时文件

你必须设置 IMAGEPATH 参数,因为MapServer使用此目录存储从远程WFS服务器下载的临时文件。 Windows 用户必须为imagepath指定完整路径,例如:imagepath“c:/tmp/ms_tmp/”。

MAP
  ...
  WEB
    IMAGEPATH "/tmp/ms_tmp/"
    IMAGEURL ...
  END
  ...
END

配置HTTPS连接

请遵循 通过HTTPS访问OGC服务 文档以确保您的本地服务器可以通过HTTPS安全连接进行连接。

WFS层

WFS层是一个常规的映射文件层,它可以使用类对象、表达式等。

从MapServer 4.4开始,定义WFS客户机层的建议方法是通过连接参数和层的元数据。必要的mapfile参数定义如下:

  • METADATA:

    • wfs_connectiontimeout

    • wfs_filter: Filter Encoding Howto 有关筛选的详细信息)。WFS_筛选器的内容是有效的筛选器编码元素。

      ...
      METADATA
        "wfs_filter"   "<PropertyIsGreaterThan><PropertyName>POP_RANGE</PropertyName>
                        <Literal>4</Literal></PropertyIsGreaterThan>"
      END
      ...
      
    • wfs_geometryname

    • wfs_latlongboundingbox

    • wfs_maxfeatures

    • wfs_request_method

      ...
      METADATA
        "wfs_request_method"   "GET"
      END
      ...
      
    • wfs_typename (必选):在GetCapability中找到的层的<name>。GetCapability请求的示例为: `https://demo.mapserver.org/cgi-bin/wfs?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetCapabilities`_ _

    • wfs_version

备注

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

可选层参数和元数据

  • “wfs-auth-username”元数据-msencrypt-style授权字符串。也接受空字符串。

    METADATA
      "wfs_auth_username" "foo"
      "wfs_auth_password" "{FF88CFDAAE1A5E33}"
    END
    
  • “wfs-auth-type”元数据-授权类型。支持的类型包括:

    • 基本的

    • 消化

    • NTLM

    • 任意(底层HTTP库在远程服务器支持的选项中选择最佳选项)

    • anysafe(底层HTTP库仅在远程服务器支持的选项中选择安全方法)

    METADATA
      "wfs_auth_type" "ntlm"
    END
    
  • “WFS_ConnectionTimeout”元数据

    • 等待远程WFS层加载的最长时间,以秒为单位设置(默认为30秒)。可以在层级别添加此元数据,以便它只影响该层,或者可以在映射级别(在Web对象中)添加此元数据,以便它影响所有层。请注意,层级别的WFS_ConnectionTimeout优先于映射级别。

    METADATA
      ...
      "wfs_connectiontimeout" "60"
      ...
    END
    
  • “wfs-proxy-auth-type”元数据-用于代理连接的授权类型。支持的类型包括:

    • 基本的

    • 消化

    • NTLM

    • any(底层HTTP库在远程服务器支持的操作中选择最好的)

    • anysafe(底层HTTP库仅在远程服务器支持的选项中选择安全方法)

    METADATA
      "wfs_proxy_auth_type" "ntlm"
    END
    
  • “WFS_proxy_host”元数据-要使用的代理的主机名,格式为“点四”格式,带有可选端口组件(例如“192.168.2.10:8080”)。

    METADATA
      "wfs_proxy_host" "192.168.2.10"
    END
    
  • “WFS_proxy_port”元数据-用于代理连接的端口。

    METADATA
      "wfs_proxy_port" "8080"
    END
    
  • “WFS_proxy_type”元数据-代理连接的类型。有效值是'http'和'socks5',区分大小写。

    METADATA
      "wfs_proxy_type" "http"
    END
    
  • “wfs_proxy_username”元数据-msencrypt-style字符串,用于代理连接。也接受空字符串。

    METADATA
      "wfs_proxy_username" "foo"
      "wfs_proxy_password" "{FF88CFDAAE1A5E33}"
    END
    

WFS层示例

LAYER
  NAME "continents"
  TYPE POLYGON
  STATUS ON
  CONNECTION "https://demo.mapserver.org/cgi-bin/wfs?"
  CONNECTIONTYPE WFS
  METADATA
    "wfs_typename"          "continents"
    "wfs_version"           "1.0.0"
    "wfs_connectiontimeout" "60"
    "wfs_maxfeatures"       "10"
  END
  PROJECTION
    "init=epsg:4326"
  END
  CLASS
    NAME "Continents"
    STYLE
      COLOR 255 128 128
      OUTLINECOLOR 96 96 96
    END
  END
END # Layer

连接-已弃用

从MapServer v4.4开始,已经定义了在连接参数中指定所有连接信息的方法。上面提到了首选方法。如果没有提供元数据,则将从连接中提取版本、服务和类型名,如下所示

CONNECTION    "https://demo.mapserver.org/cgi-bin/wfs?SERVICE=WFS&VERSION=1.0.0&TYPENAME=continents"

TODO/已知限制

  1. 临时WFS(GML)文件被写入IMAGEPATH目录,但这可能成为一个安全问题,因为它使可以猜测GML文件名的人可以下载原始GML数据。我们应该考虑使用一个“wfs-cache-dir”元数据,如果设置了该元数据,那么它将定义一个应该在其中写入临时文件的目录。如果没有设置“wfs_tmpdir”,默认值仍然是使用imagepath的值。