首页 / 浏览问题 / WebGIS / 问题详情
编辑、删除绘制的多边形并提交至iserver服务
sw
6EXP 2023年10月18日
利用leaflet-geoman-free插件绘制了一个多边形,调用EditFeaturesParameters、featureService等类将绘制的多边形提交至iserver服务器成功了,但是编辑已经存在于iserver的多边形提交就失败了,不知道怎么弄,删除也不知道怎么弄,求大神指点

附上代码:

一、

// 监听编辑事件
that.lm.on('pm:edit',function (event) {
console.log(event)
var layer = event.layer; // 编辑后的图层
var geometry = layer.toGeoJSON(); //编辑后的几何数据
that.updateGeometryData = geometry
console.log('---2---->>>',geometry)
geometry.properties = {
"SmUserID": "0",
"NAME":"编辑测试",
"TYPE":2,
"PARENT":3
}
})

二、

/**
* 编辑图形并提交至iserver
*/
update(data){
let obj = {
returnContent: true,
features: this.updateGeometryData
}
if (data){
obj.features = data
}
console.log('--->>>',obj)
new DataService().editData(
'update',
iserver.data.xinqu.url,
iserver.data.xinqu.dataSource,
iserver.data.xinqu.dma, obj).then(res => {
console.log('=======>>>>', res)
})
},

三、封装的supermap的方法:

/**
* 编辑数据
* @param url 数据服务url
* @param {'add'|'update'|'delete'} editType 操作类型
* @param {String} datasource 数据源
* @param {String} dataset 数据集
* @param {Object} options 操作参数
* @param {boolean} [options.isUseBatch] 是否使用批量添加要素功能
* @param {L.GeoJSON} [options.features] 当前需要创建或者是修改的要素集。
* @param {string[]|number[]} [options.IDs] 执行删除时要素集 ID 集合
* @param {boolean} [options.returnContent] 要素添加时,isUseBatch 不传或传为 false 的情况下有效。 true 表示直接返回新创建的要素的 ID 数组;false 表示返回创建的 featureResult 资源的 URI。
* @returns {Promise<Object>}
*
*/
editData(editType, url, datasource, dataset, options) {
return new Promise((resolve, reject) => {
// 指定编辑服务参数
var params = new SuperMap.EditFeaturesParameters({
editType: {
add: SuperMap.EditType.ADD,
update: SuperMap.EditType.UPDATE,
delete: SuperMap.EditType.DELETE,
}[editType],
features: options?.features,
IDs: options?.ids,
isUseBatch: options?.isUseBatch,
returnContent: options?.returnContent,
dataSetName: dataset,
dataSourceName: datasource,
});
// 创建编辑实例
new L.supermap.featureService(url).editFeatures(
params,
function (serviceResult) {
// 获取服务器返回的结果
var result = serviceResult.result;
if (result) {
resolve(result);
}
reject(serviceResult);
}
);
});
}

1个回答

你好,1、无法提交的报错信息是什么?可以看一下f12的请求返回。

2、检查数据服务是否开启编辑功能。

3、检查参数是否正确,EditFeaturesParameters传入feature需要是<(FeatureVector|GeoJSONObject|ol.Feature)>    类型
1,865EXP 2023年10月18日

1、无法提交的报错信息是什么?:答:报错信息是features 为null,即下列代码中加黑的jeoJSON数据没获取到,控制台不打印geometr

(// 监听编辑事件
that.lm.on('pm:edit',function (event) {
console.log(event)
var layer = event.layer; // 编辑后的图层
var geometry = layer.toGeoJSON(); //编辑后的几何数据
that.updateGeometryData = geometry
console.log('---2---->>>',geometry)
geometry.properties = {
"SmUserID": "0",
"NAME":"编辑测试",
"TYPE":2,
"PARENT":3
}
}))

数据服务是否开启编辑功能在哪里查看或者设置呢????

参数传入是正确的

1、点击服务详情页面,有是否开启编辑选项,勾选即可。

2、报错信息是features为null,是修改接口报错还是自身代码报错,如果是自身代码报错,检查一下修改后的feature。保证在修改要素后得到图层的几何信息无误,再传入到修改接口中。

3、完成2中的操作,输出一下Geometry,然后在iServer上直接添加看有没有问题,例如:https://iserver.supermap.io/iserver/services/data-world/rest/data/datasources/World/datasets/Capitals/features

...