WFS客户端¶
- 作者
让·弗朗索瓦·多永
- 联系方式
jdoyon在nrcan.gc.ca
- 作者
Jeff McKenna
- 联系方式
jmckenna at gatewaygeomatics.com
- 最后更新
2019-11-21
介绍¶
MapServer可以从WFS服务器检索和显示数据。以下文档说明如何使用mapserver的connectiontype``wfs`显示来自WFS服务器的数据。
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客户端 Mapfile¶
存储临时文件¶
你必须设置 IMAGEPATH 参数,因为MapServer使用此目录存储从远程WFS服务器下载的临时文件。 Windows 用户必须为imagepath指定完整路径,例如:imagepath“c:/tmp/ms_tmp/”。
MAP
...
WEB
IMAGEPATH "/tmp/ms_tmp/"
IMAGEURL ...
END
...
END
WFS层¶
WFS层是一个常规的 Mapfile 层,它可以使用类对象、表达式等。
从MapServer 4.4开始,定义WFS客户机层的建议方法是通过连接参数和层的元数据。必要的mapfile参数定义如下:
CONNECTIONTYPE:
CONNECTION :WFS服务器的URL。e、 g.https://demo.mapserver.org/cgi-bin/wfs?如果GetCapabilities请求中需要映射文件,则需要WFS服务器上映射文件的路径。例如,您必须在以下服务器的连接中指定映射参数: http://map.ns.ec.gc.ca/MapServer/mapserv.exe?MAP=/mapserver/services/envdat/config.map &SERVICE=WFS&VERSION=1.0.0&REQUEST=GetCapabilities
METADATA:
*WFS_ConnectionTimeout*(可选):等待远程WFS层加载的最长时间,以秒为单位设置(默认为30秒)。可以在图层级别添加此元数据,以便它只影响该图层,或者可以在地图级别(在Web对象中)添加此元数据,以便它影响所有图层。请注意,层级别的WFS_ConnectionTimeout优先于映射级别。
wfs_filter: Filter Encoding Howto 有关筛选的详细信息)。WFS_筛选器的内容是有效的筛选器编码元素。
... METADATA "wfs_filter" "<PropertyIsGreaterThan><PropertyName>POP_RANGE</PropertyName> <Literal>4</Literal></PropertyIsGreaterThan>" END ...
*wfs_geometry name*(可选):过滤器参数中用于空间过滤的几何体列的名称(默认情况下为几何体)。此参数用于Arcgis或GeoServer WFS服务,因为可以选择多个几何体列(或使用不同的几何体默认名称)。
*wfs-latlongboundingbox*(可选):该层地理坐标中的边界框,格式为“lon-min-lat-min-lon-max-lat-max”。如果设置了该选项,则只有当地图视图与该边界框重叠时,MapServer才会请求该层。您通常从服务器的功能输出中得到这个。
*WFS_MaxFeatures*(可选):限制要返回的GML功能的数量。敏感值是大于0的整数。如果指定0,则不会返回任何功能。
wfs_request_method:(可选)可以设置为“get”以向不支持POST请求的WFS服务器执行get请求。mapserver中的默认方法是post。
... METADATA "wfs_request_method" "GET" END ...
wfs_typename (required): the <Name> of the layer found in the GetCapabilities. An example GetCapabilities request is: https://demo.mapserver.org/cgi-bin/wfs?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetCapabilities
wfs_version
注解
上述每一个元数据也可以称为“OWS”而不是“WFS”。mapserver首先尝试使用'wfs_*'元数据,如果找不到,则尝试使用相应的'ows_*'名称。使用它可以减少支持多个OGC接口的 Mapfile 中的重复量,因为“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"