ArcGIS Server 9.2实现基于web浏览器的在线编辑
Server 9.2开始支持基于web浏览器的数据在线编辑,要实现这样的功能,对数据有特殊的要求,先来看一下文档是怎么描述的:
??Geodata Access
??
??Allows an end user to perform replication?and data extraction in??AcrMap
??
??Map document with a layer from a geodatabase
??
1、将需要在线编辑的数据通过SDE导入到数据库;
2、将该数据注册为版本(Register As Versioned…);
3、在ArcMap中加载这个数据(Layer from a geodatabase);
4、如果有其他的数据也添加到ArcMap中,保存成一个mxd文档;
数据准备就完成了!
发布服务
在Manager->Services中选择“Publish GIS Resource”,选择发布刚才保存mxd文档。可以看到,在Capabilities中“GeoData Access”被自动勾选了。
发布完成以后,Manager会自动创建两个同名的服务:一个是Map Service,另一个是Geodata Service。
注意,这里需要检查一下这两个服务的Pooled参数,一般默认发布服务的时候都选Pooled,因为这样有利于提高访问效率(就像JDBC的数据库连接池)。但是基于web的在线编辑不能用pooled。因为pooled的原理就是在服务器程序启动的时候先创建好n个完全相同的实例,客户端访问的时候直接从池中获取实例,用完以后再释放到池中以供其他用户使用。所以池化的实例只适用于进行只读的操作,或者对实例进行一些属性进行临时的修改,释放的时候调用reset方法。但是在线编辑修改的是SDE中的底层数据,这样的话就不能确保第一次创建的pooled实例(SOC中的map service实例)跟第二次创建的pooled实例是完全相同的。
第一次发布的时候没有修改pooled参数,导致在Web应用中点击“Editingtask”没有任何反应,也不报错误。后来把程序导入到Eclipse中编译运行在Console中看到如下的错误信息才想起上面的道理:
????严重: At least one AGSLocalMapResource with NotPooled Service is required to display Editing task.
????????2006-12-2714:45:59 com.esri.adf.web.ags.tasks.EditingTask a
????严重: Error while attempting to start editing?com.esri.adf.web.ADFException: No layer available.
创建Web应用
在Manager中创建web应用有向导可以使用,步骤基本模板化。需要注意的有以下几个地方:
1、在layers对话框中,选择添加刚才我们发布的Map service。
2、在tasks的“Select Tasks”标前页中,添加Editing任务,至于其他的任务视需要自行添加。
3、在tasks的“Supporting Resources”标前页中,选择同名的那个service。可以留意一下,这个界面的service比步骤1中的service少,而且有好些是同名的。why?就是因为有些mxd文档中带有一些特殊图层,比如geoprocess、network,还有这个例子中的geodata access,这样的地图发布以后就会创建若干个同名的服务来支持map中的特殊图层。只是这里的图标很有迷惑性,大部分是map service的图标。
4、接下来就是关键的一步,配置Editing task了:
首先是选择要编辑的数据,这里我只发布了一个sde图层,所以没得选(下拉框只有一个内容);我们可以选的是编辑的数据版本,当时为了测试创建了5个版本,这里就选择成序列的version1~3。?
?
Parent Win”和“Row Level”。
需要注意的就是以上几点,其他的步骤跟发布普通map应用都差不多。
实例的使用
创建完成以后,把这个应用部署到服务器上,就可以开始测试了。
点击任务中的“Editing”,弹出对话框,从中我们可以选择要编辑的数据的版本,刚才选中的Version 1~3系列就出来了,选中一个版本(比如version 1)以后,点击“Start Editing”提交。
提交以后,地图刷新,将version 1的地图从SDE中读取出来,Editing对话框也相应地改变。刚才的图中左上角可是没有五角星的哦:)另外还可以看一下Editing对话框下面的提示“Started Editing”,说明编辑已经成功地启动了。
接下来我们来创建一个新的要素吧,选择“Create Streets layer from sde”下的工具,在五角星的旁边画一个三角形,画完以后“Editing”工具条又发生变化了,其他的大家可以自己去试,工具条的最下面是属性表,我们可以给这个新画的三角形设置它的属性,随便输几个吧,记住“FULL_NAME=我创建的三角形”,这个就是它的标签啦。
创建完成以后点“Save Edit(s)”工具,将编辑结果提交给SDE。接下来我们打开ArcMap看看吧,从ArcCatalog里把数据拖到ArcMap里,版本切换到Version 1:
呵呵,看到了刚才创建的三角形,上面还打着我的戳呢:)
概括
基于Web浏览器的编辑是Server Advanced版本才有的功能,由于编辑的时候需要选择版本,而版本支持是SDE才有的功能,我还测试过filegeodatabase,结果可以参考前面的批注。不过,用户既然买了server,当然也就有了sde啦。
上面的例子自己不用添加任何代码,只要在几个关键的地方不出差错,程序就能出来了,如果觉得不过瘾,咱们可以把它导入到Eclipse下面进行再加工……
A、浏览器中编辑
B、ArcMap查看编辑结果
??