您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > ArcGIS查询WFS服务解决方案
ArcGIS访问WFS服务ESRI中国(北京)有限公司广州办事处肖干林一、概述OGC全称OpenGeospatialConsortium,是一个非盈利的、国际化的、自愿协商的标准化组织,它的主要目的就是制定与空间信息、基于位置服务相关的标准。这些标准就是OGC的“产品”,而这些标准的用处就在于使不同厂商、不同产品之间可以通过统一的接口进行互操作。这些标准中,一般我们接触的都集中在数据交换和服务互操作方面,比如GML、KML和WFS、WMS等,其实这也是一些标准存在意义较大的场合。WFS(OpenGIS®WebFeatureService)当前版本是1.1.0。WFS标准定义了一些操作,这些操作允许用户在分布式的环境下通过HTTP对空间数据迚行查询、编辑等操作。WFS服务要求服务的接口必须由XML描述,另外数据交互必须由GML进行,数据过滤采用CQL语言。当一个客户端想要访问WFS服务时,一般会涉及到以下的流程:1.通过操作获取WFS服务支持的操作和要素类(FeatureType,可以理解为WFS中的数据集)。2.(可能)通过操作获取WFS服务支持的要素类的定义。3.客户端发送某个操作的请求。4.WFS服务处理请求。5.WFS服务返回处理的结果和状态。上面几个步骤中所提到的“操作”包括:1.GetCapabilities(获取服务中的要素类及支持的操作)2.DescribeFeatureType(描述要素类的信息)3.GetFeature(获取要素)4.GetGmlObject(通过XLink获取GML对象)5.Transaction(创建、更新、删除数据的事务操作)6.LockFeature(在事务过程中锁定要素)但是,这些操作并不是必须全部实现,而是实现全部或部分。根据所支持的操作不同,WFS可以分为3类:1.BasicWFS(就是最常被提及的WFS,必须支持GetCapabilities/DescribeFeatureType/GetFeature操作,在功能上意味着提供一个只读的数据服务)2.XLinkWFS(必须在BasicWFS基础上加上GetGmlObject操作)3.TransactionWFS(也有称为WFS-T,必须在BasicWFS基础上加上Transaction操作以支持编辑数据,另外也可以加上GetGmlObject/LockFeature操作)。详细OGC标准说明和WFS各类方法说明见(《OGC标准介绍.pdf》)资料。以下演示使用到的环境:Windows7ArcGIS10ArcGISAPIForFlex2.3二、ArcGISServer构建WFS在研究GIS访问WFS之前,需要有相关的WFS地图服务可以使用。通过ArcGISServer软件可以构建OGC标准的地图服务,如:WMS和WFS服务,供给其他客户端使用,其构建过程如下:1、首先使用ArcGISDesktop的ArcMap软件制作需要发布的地图内容,包括:添加需要发布的地图图层数据,并设置相应的符号、颜色、大小等信息,然后保存为MXD文档(名称如:demo.mxd),如下图:2、在制作好地图文档后,使用ArcCatalog软件将该文档发布为ArcGISServer的地图服务,如下图:第一步打开ArcCatalog软件,并找到“GISServer”目录下的“AddArcGISServer”,然后双击,如下图:选择“ManageGISServices”选项,然后点击“下一步”按钮,如下图:然后在“HostName”输入安装有ArcGISServer的服务器名称(如:XGLESRI),并点击“Finish”按钮完成增加ArcGISServer管理。如下图:第二步,发布地图文档,选择制作好的地图文档(如:demo.mxd),然后点击鼠标右键,选择“PublishtoArcGISServer”,如下图:设置发布的服务信息(如:服务名称,服务所在目录等),如下图:点击“下一步”按钮,选择地图服务类型(选择WFS和WMS),如下图:点击“下一步”按钮,完成发布服务过程,如下图:点击“Finish”按钮,然后可以在第一步增加的GISServer目录下出现刚才发布的地图服务,如下图:这样可以使用其他客户端访问刚才发布的“demo”服务(该服务具有WMS和WFS服务类型)。可以直接在浏览器中访问WFS服务,查看器返回的结果,在浏览器地址栏中输入=Getfeature&service=WFS&typename=cities,如下图:三、构建WFS服务查询语句使用GIS客户端访问和查询WFS服务,需要对查询WFS服务的查询方式进行构建,并对WFS查询语句表达方式进行了解。但首先需要了解WFS查询谓词(空间和属性)的含义:首先介绍空间关系谓词,包括:Disjoint,Touches,Crosses,Within,Overlaps,Contains,Intersects,Equals,DWithin,Beyond,BBOX。前面八个是OGC定义的空间关系谓词,其解释如下:(1)Disjoint任意给两个空间实体a和b(拓扑闭合的):a.disjoint(b)Ia∩Ib=Ø(2)Touchestouch关系适合于面/面、线/线、线/面、点/面、点/线间的相互关系,但点/点间没有定义这种关系。对于满足要求的空间实体a和b:a.touch(b)(Ia∩Ib=Ø)∧(a∩b≠Ø)touch关系的几个例子如图2所示:图2Touch关系的例子(3)Crossescrosses关系适用于点/线、点/面、线/线及线/面间关系。令dim(a)表示空间对象a的维度,则crosses关系定义为:a.crosses(b)(dim(I(a)∩I(b))max(dim(I(a)),dim(I(b))))∧(a∩b)≠a∧(a∩b)≠bcrosses关系的几个例子如图3所示:图3Cross关系的例子(4)Withinwithin关系定义为:a.within(b)(a∩b)=a∧(I(a)∩I(b))≠Øoverlaps的几个例子如图4所示:图4Within关系的例子(5)Overlapsoverlaps关系适用于面/面、线/线和点/点关系,定义如下:a.overlaps(b)(dim(I(a))=dim(I(b))=dim(I(a)I(b)))∧(a∩b≠a)∧(a∩b≠b)overlaps的几个例子如图5所示:图5Overlaps关系的例子除了上述5个关系,为了使用的方便,还定义了以下几个关系:(6)Contains:a.contains(b)b.within(a)(7)Intersects:a.intersects(b)spanstyle=mso-spacerun:yesa.disjoints(b)(8)Equals:a.equals(b)a.within(b)∧b.within(a)后面三个是WFS定义的空间关系谓词。DWithin可以查询一个圆形范围内的要素,需要给一个距离参数。BBOX查询矩形范围内的要素。属性查询类似于数据库SQL语句,提供如下属性比较谓词:Equal,NotEqual,Less,Greater,LessOrEqual,GreaterOrEqual,Like,IsNull,Between。①Equal:等于。②NotEqual:不等于。③Less:小于。④Greater:大于。⑤LessOrEqual:小于等于。⑥GreaterOrEqual:大于等于。⑦Like:相似。使用通配符“*”表示任意数量的字符,“?”表示一个字符。⑧IsNull:为空,字段值为空。⑨Between:介于两者之间。3.1、属性查询语句可以直接通过写查询语句,实行WFS查询操作。这样您就需要知道WFS查询语句如何编写。WFS查询条件中And、Or、Not这三个逻辑判断谓词需要使用××/××的形式将条件包含其中,这一点和SQL差异比较大。SQL语句:条件1And条件2,WFS语句是And条件1条件2/And。以下说明每种属性比较谓词如何写成WFS查询条件:1)、Equal(=):第一个%s填写字段名称,第二个%s填写字段值:PropertyIsEqualToPropertyName%s/PropertyNameLiteral%s/Literal/PropertyIsEqualTo;2)、NotEqual():第一个%s填写字段名称,第二个%s填写字段值:PropertyIsNotEqualToPropertyName%s/PropertyNameLiteral%s/Literal/PropertyIsNotEqualTo;3)、Less():第一个%s填写字段名称,第二个%s填写字段值:PropertyIsLessThanPropertyName%s/PropertyNameLiteral%s/Literal/PropertyIsLessThan;4)、Greater():第一个%s填写字段名称,第二个%s填写字段值:PropertyIsGreaterThanPropertyName%s/PropertyNameLiteral%s/Literal/PropertyIsGreaterThan;5)、LessOrEqual(=):第一个%s填写字段名称,第二个%s填写字段值:PropertyIsLessThanOrEqualToPropertyName%s/PropertyNameLiteral%s/Literal/PropertyIsLessThanOrEqualTo;6)、GreaterOrEqual(=):第一个%s填写字段名称,第二个%s填写字段值:PropertyIsGreaterThanOrEqualToPropertyName%s/PropertyNameLiteral%s/Literal/PropertyIsGreaterThanOrEqualTo;7)、Like:第一个%s填写字段名称,第二个%s填写字段值:PropertyIsLikewildCard=*singleChar=?escapeChar=\PropertyName%s/PropertyNameLiteral%s/Literal/PropertyIsLike;8)、IsNull:第一个%s填写字段名称:PropertyIsNullPropertyName%s/PropertyName/PropertyIsNull;9)、Between:第一个%s填写字段名称,第二个%s填写字段值下限,第三个%s填写字段值上限:PropertyIsBetweenPropertyName%s/PropertyNameLowerBoundary%s/LowerBoundaryUpperBoundary%s/UpperBoundary/PropertyIsBetween;综上所述,例子中属性查询语句部分可以直接写成:=Getfeature&service=WFS&typename=Tbeijing_qiao&Filter=ogc:Filterogc:Andogc:PropertyIsLikewildCard='*'singleChar='?'escapeChar=''ogc:PropertyNamename/ogc:PropertyNameogc:Literal*河*/ogc:Literal/og
本文标题:ArcGIS查询WFS服务解决方案
链接地址:https://www.777doc.com/doc-2898345 .html