数据准备 ??Geodata Access ??Allows an end user to perform replication?and data extraction in??AcrMap ??Map document with a layer from a geodatabase 具体操作可以参考下面的步骤: 第二步是选择在客户端可以执行的操作种类以及与操作相关的一些选项,都是一些顾名思义的东西,不多说了。? 最后一步是设置冲突处理原则,这里就按照默认设置“Parent Win”和“Row Level”。 A、浏览器中编辑 B、ArcMap查看编辑结果 ??
Server 9.2开始支持基于web浏览器的数据在线编辑,要实现这样的功能,对数据有特殊的要求,先来看一下文档是怎么描述的:
??
??
??
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。?
需要注意的就是以上几点,其他的步骤跟发布普通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下面进行再加工……
详细解决方案
ArcGIS Server 9.2兑现基于web浏览器的在线编辑
热度:342 发布时间:2012-07-04 19:33:54.0
相关解决方案
- myeclipse联接sql server 2008看不到用户表
- 在哪找的SQL Server 2005数据库驱动文件?为什么sql server2005安装盘上面没有找到
- ASP上Set GetSession("conn")=server.CreateObject("adodb.connection")
- SOS-(奇怪现象)服务器暂不可用500 internal server error,该怎么解决
- sql server 设置非空默认值之后,hibernate添加出现异常
- 可以安装在win7系统的sql server
- exchange server 2000提供全部用户邮件到达的java api吗
- IM聊天系统的有关问题,用Tigase Server 如何实现挤线功能
- com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa' 登录失败。该用户与可托 SQL Server
- 如何用JDBC将一个文件夹里的东西存储进sql server
- 关于SQL SERVER 2005里面的image类型解决方案
- IIS 筹建 TFS,访问<server>/tfs/web时说无权访问此页面,何解?
- IIS 搭建 TFS,访问<server>/tfs/web时说无权访问此页面,何解?该怎么处理
- Server Error in '/' Application.解决方法
- sql server 2005 约束有关问题
- 给listbox和<INPUT id="xx" name="xx" runat="server"> 赋值有关问题
- Microsoft Team Foundation Server 2010 怎么备份数据
- 求个asp.net(C#)+sql server 2005写的小型论坛。该如何解决
- C# + SQL server +oracle QQ交流群142703980解决方法
- 装配vs2008时组件microsoft sql server compact 3.5 for devices无法安装!求解
- arcgis Engine中axToolbarControl中的按钮调用有关问题
- 安装vs2008时组件microsoft sql server compact 3.5 for devices无法安装!求解!解决办法
- C# 经过.ini或.txt文件连接sql server
- DELPHI +SQL SERVER 2005 掉线 急该如何处理
- 小弟我为什么在使用Page.Server.Transfer()进行页面跳转时报错,转不了
- SAP Crystal Server Client Tools开发过水晶报表过程中的参数有关问题
- Server Error in '/' Application.该怎么处理
- windows server 2008 + IIS 7.5 上 网站自定义权限过滤有关问题
- ArcGIS Server发布map服务显示空白
- 部类“Button”的控件“Button2”必须放在具有 runat=server 的窗体标记内