最近遇到好几个用户咨询在Java SOE中实现数据编辑的问题。小编简单测试了一下,特分享出来。
在Eclipse中基于SOE模板创建一个最简单的SOE应用。
场景描述:添加一个点要素
代码参考如下:
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文件中。此种情形也会导致这一错误。
// 获取待编辑的要素类
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吭哧吭哧自己实现呢?搞得小编现在离正统之路越来越偏离了。