ArcGIS server10.1支持WFS的大部分功能,部分查询有BUG,如within在以Polygon进行过滤时实际使用的是其边界范围。与GEOServer相比,WFS-T的配置也相对繁琐。在本篇记录详细的配置过程,并附上客户端调用方法。

在搭建GIS服务时,目前得到的结论是:

  1. 搜索,图层展示使用WMS与arcgis默认的mapserver相结合的方式,由于在有表关联,即图层存在join(1:1)或relate(1:M)关系)的情况下,WFS完全失效。故不建议使用WFS进行查询。而Feature access在图层展示时不支持多字段分类展示,也不建议使用。

  2. 数据维护使用WFS-T,建议单独将空间库共享为geoservice。这样可以实现数据的维护与查询分离,功能上互不干扰。但又可以达到数据同步的目的。

设想这样一个场景

空间库 A 中有空间表 video_pt, 此表仅有两个字段,主键ID,空间字段GEOM

关联库 B 中有信息表 video_info, 其中包含基本的属性信息。如名称,地址,服务器名等信息。

两表通过主键1对1关联。

要完成的目标:客户端只更新video_pt的空间字段,查询出图时则需使用关联后的数据。

步骤一:转换普通数据库为空间库,具体配置方法参考另一篇文章。此过程会在当前库中创建SDE的相关表以及存储过程,所以在转换时强烈建议使用新建数据库。在此库中一律存放空间信息。

步骤二:新建db version

arccatalog -> database connections -> 数据库名右键properties -> connections标签下点击show connected users... -> 弹窗中选择versions选项卡 -> 右键DEFAULT new version -> 输入下级version的名称和描述,这里填wfs,访问方式选public。

此过程的步骤说明在desktop help中WFS-T的相关文档中也能找到。

步骤三:切换数据库版本到刚刚建立的version,并注册到arcgis server上

arccatalog -> database connections -> 数据库名右键geodatabase connection properties

在transactional version下,可以看到有两个版本,DEFAULT和我们刚刚建立的WFS,选择WFS,点OK。

这样就成功切换到了新的数据库版本。注册到arcgis server的过程与平常一样,只是如果之前已经注册过建议删除后重新注册。

步骤四:将需要更新的表注册到相应的数据库版本下

右键表选择 manage -> Register as versioned, 弹框中勾上同步到base version.

步骤五:共享空间库

右键库 share as geodata service... 后面的配置过程同发布map service差不多,注意勾上WFS一项,并且勾上启动事务和事务锁。(经过测试,有没有锁的情况下更新效率差不多)。

客户端调用

http post 方式,请求格式为XML,包含在POST BODY里面

更新数据分两步操作

GetFeatureWithLock:

    根据过滤条件获取事务锁和要素ID,如果要素已被锁定则不能进行更新。

    注意其中两个参数,

    expiry:锁超时时间,单位分钟,默认为3分钟

    lockAction: 可选参数为 ALL,SOME

    
        
            
                
OBJECTID
                
5779
            
         
                     

Transaction:更新操作,需要使用上一步获得的锁ID

releaseAction参数与lockAction相对应,可选参数为ALL,SOME,默认为ALL

    
    
        
            
GEOM
            
                
                    
113,23