在线分析功能
在线分析矢量图层
利用 ServiceFeatureTable
和 QueryParameters
对矢量图层进行分析查询
// 1. 创建ServiceFeatureTable对象加载在线图层数据
ServiceFeatureTable service_feature_table
= new ServiceFeatureTable("http://ip:port/0");
// 2. 开始异步加载
service_feature_table.loadAsync();
// 3. 监听数据加载完成
service_feature_table.addDoneLoadingListener(() -> {
// 4. 创建 QueryParameters 查询对象
QueryParameters query_parameters = new QueryParameters();
// 5. 设置查询图形与图层中图形的空间关系
query_parameters.setSpatialRelationship(
QueryParameters.SpatialRelationship.INTERSECTS);
// 6. 设置查询返回图形的坐标系
query_parameters.setOutSpatialReference(SpatialReference.create(4490));
// 7. 设置是否返回图形对象
query_parameters.setReturnGeometry(true);
// 8. 设置查询的图形
query_parameters.setGeometry(geometry);
// 9. 设置查询添加 为SQL语句 WHERE 后的语句
query_parameters.setWhereClause("");
// 10. 开启查询,设置返回字段为 LOAD_ALL
ListenableFuture<FeatureQueryResult> query_results;
query_results = service_feature_table.queryFeaturesAsync(
QueryParameters, ServiceFeatureTable.QueryFeatureFields.LOAD_ALL);
// 11. 监听查询完成
query_results.addDoneListener(() -> {
try {
// 12. 获取查询返回值,如果报错说明查询失败
FeatureQueryResult query_result = query_results.get();
// 13. 遍历查询到的 Feature 集合
for (Object result : query_result) {
if (result instanceof Feature) {
// 14. 获取 Feature 对象,必要时候可以在此将基础参数的图形
// 与返回的 Feature 图形进行相交计算
Feature feature = (Feature) result;
}
}
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
});
});
编辑功能
在线编辑矢量图层
利用 ServiceFeatureTable
对可编辑的在线矢量图层进行编辑(新建、删除、更新)。需要在发布在线图层服务时打开相应的权限。
注意事项:
- 如果未向
操作图层
中添加该图层使用FeatureLayer.getSelectedFeaturesAsync()
时会查询获取不到对象。(具体原因未测试) - 如果修改的属性类型为
esriSmallInteger
的话 要使用short
类型的数值类型,否则会报错要修改的类型不符合。
// ====== 不添加矢量图层对图层数据进行更新 ======
ServiceFeatureTable table = new ServiceFeatureTable("url");
table.loadAsync();
table.addDoneLoadingListener(() -> {
// 使用 QueryParameters 对象查询数据并修改
QueryParameters query = new QueryParameters();
query.setWhereClause("设置查询条件");
ListenableFuture<FeatureQueryResult> queryResults;
queryResults = table.queryFeaturesAsync(
query, ServiceFeatureTable.QueryFeatureFields.LOAD_ALL);
try {
// 如果报错可能说明查询失败
FeatureQueryResult queryResult = queryResults.get();
for (Feature feature: queryResult) {
// 可以进行条件判断选择更新
feature.getAttributes().put("key", "new value");
ListenableFuture<Void> updateResult;
updateResult = table.updateFeatureAsync(feature);
updateResult.addDoneListener(() -> {
try {
// 报错的话可能是修改失败
updateResult.get();
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
});
}
table.applyEditsAsync();
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
});