这学期修了这一门课,写作业的时候,从网上找了很多资料,发现都讲的很笼统,或者没有解决老师布置的题目。
后来去翻阅OGC的官方文档,找到了很多有用且直观的例子。在这里先整理其他博主的文章精华,再列出自己的题目实例。
(只是为了记录自己的作业和相关的理解)
一、WFS支持的常见操作
- GetCapabilities —— 获取WFS服务的元数据(介绍服务中的要素类和支持的操作)
- DescribeFeatureType —— 获取WFS服务支持的要素类的定义(要素类的元数据,比如要素包含哪些字段)
- GetFeature —— 获取要素数据
- GetGmlObject —— 通过XLink获取GML对象
- Transaction —— 创建、更新、删除要素数据的事务操作
- LockFeature —— 在事务过程中锁定要素
二、WFS URL的结构
格式如下:
http://服务器/services/<文件夹名称(如果适用)>/<服务名称>/<服务类型/WFSServer?
- 服务器名称是 Web 服务器计算机的名称。
- 端口号是您的 web 服务器计算机用于与其他计算机通信的端口。
- 服务类型可以是 MapServer 或 GeoDataServer,这取决于您是从地图还是从地理数据库创建 WFS 服务。
三、作业题目:
1.查询名为“massgis:GISDATA.AQUIFERS_POLY”的图层/类性下,所有实例(实体/对象/要素)的指定(部分)Property字段。
http://giswebservices.massgis.state.ma.us/geoserver/wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&PROPERTYNAME=area_sq_ft&TYPENAMES=massgis:GISDATA.AQUIFERS_POLY
各参数说明:propertyName可指定输出的字段列表.
2.查询该图层所有要素,所有字段
http://giswebservices.massgis.state.ma.us/geoserver/wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&TYPENAMES=massgis:GISDATA.AQUIFERS_POLY
3.查询ID为GISDATA.AQUIFERS_POLY.122的要素的所有字段
http://giswebservices.massgis.state.ma.us/geoserver/wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=getfeature&FeatureID=GISDATA.AQUIFERS_POLY.122
4.查询ID为GISDATA.AQUIFERS_POLY.122的要素area_sq_ft字段
http://giswebservices.massgis.state.ma.us/geoserver/wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=getfeature&propertyname=area_sq_ft&RESOURCEID=GISDATA.AQUIFERS_POLY.122
5.查询满足area_acres字段值在150和200之间的前十个要素。(使用了Filter)
http://giswebservices.massgis.state.ma.us/geoserver/wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&TYPENAMES=massgis:GISDATA.AQUIFERS_POLY&COUNT=10&FILTER=<Filter xmlns="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"><And><PropertyIsLessThan><PropertyName>area_acres</PropertyName><Literal>200</Literal></PropertyIsLessThan><PropertyIsGreaterThan><PropertyName>area_acres</PropertyName><Literal>150</Literal></PropertyIsGreaterThan></And></Filter>
FILTER详解:Filter是一种基于XML的并且符合OGC规范的语言。SLD用它来实现复杂的Rule选择。WFS在所有需要定位操作对象的地方都会使用Filter。Filter的作用是构建一个表达式,返回值就是Feature的集合,换句话说Filter就如他的名字一般为我们从一个集合中过滤出一个满足我们要求的子集。而过滤的方法就是Filter定义的操作符。Filter定义了三种操作符