数据准备
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 oneAGSLocalMapResource 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 tostart 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对话框也相应地改变。刚才的图中左上角可是没有五角星的哦J另外还可以看一下Editing对话框下面的提示“Started Editing”,说明编辑已经成功地启动了。
接下来我们来创建一个新的要素吧,选择“Create Streets layer from sde”下的工具,在五角星的旁边画一个三角形,画完以后“Editing”工具条又发生变化了,其他的大家可以自己去试,工具条的最下面是属性表,我们可以给这个新画的三角形设置它的属性,随便输几个吧,记住“FULL_NAME=我创建的三角形”,这个就是它的标签啦。
创建完成以后点“Save Edit(s)”工具,将编辑结果提交给SDE。接下来我们打开ArcMap看看吧,从ArcCatalog里把数据拖到ArcMap里,版本切换到Version 1:
呵呵,看到了刚才创建的三角形,上面还打着我的戳呢J
概括
基于Web浏览器的编辑是ServerAdvanced版本才有的功能,由于编辑的时候需要选择版本,而版本支持是SDE才有的功能,我还测试过filegeodatabase,结果可以参考前面的批注。不过,用户既然买了server,当然也就有了sde啦。
上面的例子自己不用添加任何代码,只要在几个关键的地方不出差错,程序就能出来了,如果觉得不过瘾,咱们可以把它导入到Eclipse下面进行再加工……
加油,哥们,现在开始!