作者:非法小恋
支持对地理要素的插入,更新,删除,检索和发现服务。该服务根据HTTP客户请求返回GML(Geography Markup Language、地理标识语言)数据。
WFS服务多用于查询要素,WFS通过OGC Filter构造查询条件,支持基于空间几何关系的查询,基于属性域的查询,当然还包括基于空间关系和属性域的共同查询。
目前分为以下几种操作:(这里使用iServer7C范例进行展示)
一个 WFS可以描述其能力,并且必须指出它可以服务的要素类型和每个要素类型所能支持的操作,通俗的讲就是获取WFS的能力文件。
例如构建请求地址:
http://localhost:8090/iserver/services/data-world/wfs100/utf-8?SERVICE=WFS&REQUEST=GetCapabilities&VERSION=1.0.0
表示查看该WFS服务的能力文件。
WFS能够在请求中描述其可以提供服务的任何要素类型的结构。通俗的讲就是获取某个数据集中的字段类型。
例如构建请求地址:
http://localhost:8090/iserver/services/data-world/wfs100/utf-8?REQUEST=DescribeFeatureType&TypeName=World:Countries
表示查看World:Countries数据集字段类型。
WFS可以为一个获取要素实例的请求提供服务。另外,客户端可以指定获取要素的哪些属性,并且可以使用空间和非空间的查询限制条件。通俗的讲就是通过查询,获取某个数据集中的具体内容。
例如构建请求地址:
http://localhost:8090/iserver/services/data-world/wfs100/utf-8?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=World:Capitals&MAXFEATURES=5
表示查看World:Capitals 中的前5个要素。
针对iServer Java 7C发布的WFS,我们在使用iClient对接时,需要注意以下几个参数,这里我用iClient for JavaScript代码作为示范。
//WFS属性过滤器
var filter = new SuperMap.Filter.Comparison({
type:SuperMap.Filter.Comparison.EQUAL_TO, //等于
property:"COUNTRY", //(*)查询字段名
value:"俄罗斯" //具体某个名称
});
var protocolRead = new SuperMap.Protocol.WFS({
version:"1.0.0", //请求服务版本
url:"http://localhost:8090/iserver/services/data-world/wfs100", //(*)请求WFS
featureType:"Countries", //(*)请求查询数据集
featureNS:"http://www.supermap.com/World", //要素的命名空间
featurePrefix:"World", //(*)请求数据源
geometryName:"the_geom" //几何图形属性名称
});
protocolRead.read({
filter:filter, //过滤
maxFeatures: 1,
callback: queryCompleted //回调函数
});
如果是iServer发布的WFS服务,那么其中带(*)的部分,我们尤为要注意。那我们该如何获取这参数些信息呢?
1. 首先,启动iServer7C。
2. 浏览器中输入WFS服务地址,例如范例中使用如下地址: http://localhost:8090/iserver/services/data-world/wfs100 。
3. 选择utf-8字符集。
4. 搜索FeatureTypeList节点下的,每一个FeatureType都是一个数据集,例如下图所示,World:Countries就是一个数据集,其命名方式为:【数据源名称:数据集名称】
5. 过滤参数字段获取办法,可由DescribeFeatureType操作获取,例如:
http://localhost:8090/iserver/services/data-world/wfs100/utf-8?REQUEST=DescribeFeatureType&TypeName=World:Countries
最终通过代码实现,返回结果:
针对ArcgGIS的WFS服务,我们在使用iClient对接时,需要注意以下几个参数,这里我用iClient for JavaScript代码作为示范。
//WFS属性过滤器
var filter = new SuperMap.Filter.Comparison({
type:SuperMap.Filter.Comparison.EQUAL_TO, //等于
property:"COUNTRY", //(*)查询字段名
value:"俄罗斯" //具体某个名称
});
var protocolRead = new SuperMap.Protocol.WFS({
version: "1.0.0", //请求服务版本
srsName: "EPSG:4326",
url: "http://192.168.15.99:6080/arcgis/services/world1/MapServer/WFSServer",
featureType: "world", //(*)查询数据集名称
featurePrefix:"world1", //(*)请求数据源
geometryName:"Shape" //(*)几何图形属性名称
});
protocolRead.read({
filter:filter, //过滤
maxFeatures: 1,
callback: queryCompleted //回调函数
});
如果是ArcGIS发布的WFS服务,那么其中带(*)的部分,我们也要注意。那我们该如何获取这参数些信息呢?
1. 获取能力表述文件
http://192.168.15.99:6080/arcgis/services/world1/MapServer/WFSServer?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetCapabilities
2. 搜索FeatureTypeList节点下的,每一个FeatureType都是一个数据集,例如下图所示,World:Countries就是一个数据集,其命名方式为:【数据源名称:数据集名称】
3. 过滤参数字段获取办法,可由DescribeFeatureType操作获取,例如:
http://192.168.15.99:6080/arcgis/services/world1/MapServer/WFSServer?SERVICE=WFS&VERSION=1.0.0&REQUEST=DescribeFeatureType&TypeName=world1:world
最终通过代码实现,返回结果:
1.请查看url请求地址是否正确。
2.查看geometryName,featurePrefix,featureType,version等参数是否正确。
3.是否设置过滤参数无查询结果。
4.查看是否请求跨域。
修改ArcGIS发布WFS服务里面的经纬度顺序,如原本是YX 则修改为XY。
在webapps\\iserver\\WEB-INF文件夹下的iserver-services-interfaces.xml
文件里interface节点下添加期望返回结果,例如:
<config class="com.supermap.services.wfs.WFSConfig"><maxFeatures>期望返回的结果</maxFeatures></config>