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

严景焕
2023-12-01

最近遇到好几个用户咨询在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吭哧吭哧自己实现呢?搞得小编现在离正统之路越来越偏离了。

 类似资料: