如何利用SOE for Java实现数据编辑

0
分享 2017-11-08
最近遇到好几个用户咨询在Java SOE中实现数据编辑的问题。小编简单测试了一下,特分享出来。
准备工作
在Eclipse中基于SOE模板创建一个最简单的SOE应用。
场景1:简单编辑
场景描述:添加一个点要素 代码参考如下:
IMapServer3 ms = (IMapServer3)mapServerDataAccess;
String mapName = ms.getDefaultMapName();

// 指定待编辑图层的图层ID
int layerID = 0;
FeatureClass editedFeatureClass = new FeatureClass mapServerDataAccess.getDataSource(mapName, layerID));

// 获取待编辑要素类所在的工作空间
Workspace fcWorkspace = new Workspace(editedFeatureClass.getWorkspace());

// 创建要素
Feature feature = (Feature)editedFeatureClass.createFeature();
Point addedPoint = new Point();
addedPoint.setX(137);
addedPoint.setY(39);
feature.setShapeByRef(addedPoint);

// 保存要素
feature.store();

注意事项: 1. 简单要素类的编辑无需调用startEditing开启编辑操作 2. 待编辑数据须存放在SDE数据库中,否则将报如下错误: AutomationException: Workspace or data source is read only.

注:如果数据源本身存放在SDE库中,但是由于数据所在的SDE库未注册到Server上,导致发布服务时数据被拷贝到ArcGIS for Server的arcgisinput文件夹下的gdb文件中。此种情形也会导致这一错误。



场景2:多用户编辑
// 获取待编辑的要素类
FeatureClass editedFeatureClass = new FeatureClass(mapServerDataAccess.getDataSource(mapName, layerID));

// 获取要素类所在的工作空间
Workspace fcWorkspace = new Workspace(editedFeatureClass.getWorkspace());

IWorkspaceEdit2Proxy editWorkspace = new IWorkspaceEdit2Proxy(fcWorkspace); IMultiuserWorkspaceEditProxy multiUserEditWorkspace = new IMultiuserWorkspaceEditProxy(editWorkspace);

// 后续不再赘述开启编辑和结束编辑的操作,直接参考ArcGIS Engine的开发
multiUserEditWorkspace.startMultiuserEditing(esMode);
editWorkspace.startEditOperation();

最后,小编想要吐槽的就是,为什么不用Feature Service直接进行在线编辑,而要通过SOE吭哧吭哧自己实现呢?搞得小编现在离正统之路越来越偏离了。
文章来源:http://blog.csdn.net/zssai2015/article/details/78475404

0 个评论

要回复文章请先登录注册