目录
作者:kxj
前言
SuperMap iServer使用工作空间发布数据服务之后,可以通过对 features 资源执行 GET 请求获取数据集中的要素列表,当数据集为点、线、面数据集、文本数据集、复合数据集或纯属性表数据集时,对 features 资源执行 POST 请求可以完成对数据集中的要素进行添加、删除或修改。接下来具体介绍一下如何对数据服务进行要素的添加、删除和修改。(本文以SuperMap iServer 11i(2023) SP1为例)
一、设置数据服务可编辑
1.在iServer服务管理页面找到对应数据服务,点击进入
- 在基本信息页面开启【是否启用编辑】
二、接口介绍
2.1 请求参数
features 资源表示的是数据集中的要素集合。对 features 资源执行 POST 请求默认是在创建新的要素。但可以在 features 资源的 URI 中包含如下参数来控制 POST 请求的预期是删除要素还是修改要素。
注:三维模型数据集不支持创建要素。
URI 中的参数如下:
名称 | 类型 | 含义 |
---|---|---|
isUseBatch | boolean | 【可选参数】 是否使用批量添加要素功能,要素添加时有效。 批量添加能够提高要素编辑效率。true 表示批量添加;false 表示不使用批量添加。默认不传时为 false。 |
returnContent | boolean | 【可选参数】 要素添加时,isUseBatch 不传或传为 false 的情况下有效。 true 表示直接返回新创建的要素的 ID 数组;false 表示返回创建的 featureResult 资源的 URI。默认不传时为 false。 |
_method | String | POST 请求应实现的功能。 可能的值有:GET、PUT、POST、DELETE、HEAD,分别表示实现对应 HTTP 请求的功能。这里,_method 可取 DELETE 或 PUT,分别表示删除要素或修改要素。 |
对 features 资源执行 POST 请求,对要素进行添加(无 _method 参数)或修改(_method=PUT)时,需要在请求体中包含添加/修改的要素信息集合,其中单个要素信息的结构如下:
名称 | 类型 | 含义 |
---|---|---|
fieldNames | String[] | 要素的属性字段名集合。其中,系统字段是创建数据集和要素时系统默认生成的字段,用户不能进行编辑,字段内容除了 SMUSERID 外都是不能修改的。 |
fieldValues | String[] | 要素的属性字段值集合。 |
geometry | Geometry | 要素对应的几何对象。暂不支持Elasticsearch数据源中既有Geo_Point类型,又有Geo_Shape类型的数据。 |
对要素进行删除时(_method=DELETE),需要在请求体中包含欲删除要素的 ID 数组或SQL查询条件,这时,请求体结构如下:
名称 | 类型 | 含义 |
---|---|---|
IDs | int[] | 以ID 数组方式删除要素时,需传入要素的 ID 数组。 对于字符串和数值类型的数据,是否加引号均可。 |
attributeFilter | String | 以SQL条件方式删除要素时,需传入 SQL查询条件。对于Elasticsearch数据,当字段值包含大写时,查询条件不加引号。例如:MAPTN = G12 ;对于Elasticsearch数据,查询条件暂不支持区分大小写。 |
2.2 响应结构
对 features 资源执行 POST 请求,对要素集中的要素进行添加、修改或删除,返回操作结果的表述结构如下:
字段 | 类型 | 说明 |
---|---|---|
succeed | boolean | 操作是否成功。 |
newResourceID | String | 创建的 featureResult 资源的 ID。 |
newResourceLocation | String | 创建的 featureResult 资源的 URI。isUseBatch为 true 时无效。 |
error | HttpError | 出错信息,如果操作成功,则没有本字段。 |
三、请求示例
请求示例均以示例服务World的Countries数据集为例
3.1删除要素
3.1.1 通过ID数组删除要素
对 URI:http://ip:端口号/iserver/services/data-World/rest/data/datasources/World/datasets/Countries/features.rjson?_method=DELETE&deleteMode=IDS执行 POST 请求,在请求体中包含如下参数,删除 ID 为1、2的参数:
[1,2]
删除成功,返回 rjson 格式的操作结果表述如下:
{"succeed": true}
3.1.2通过 SQL 查询条件删除要素
对 URI:http://ip:端口号/iserver/services/data-World/rest/data/datasources/World/datasets/Countries/features.rjson?_method=DELETE&deleteMode=SQL执行 POST 请求,在请求体中包含如下参数,删除 SmID<10 的参数:
{"attributeFilter":"SmID < 10"}
删除成功,得到 rjson 格式的操作结果表述如下:
{"succeed": true}
3.2添加要素
3.2.1添加JSON格式的几何对象
对 URI:http://ip:端口号/iserver/services/data-World/rest/data/datasources/World/datasets/Countries/features.rjson 执行 POST 请求,在请求体中包含如下参数:
[
{
"fieldNames": [
"SMID",
"SMSDRIW",
"SMSDRIN",
"SMSDRIE",
"SMSDRIS",
"SMUSERID",
"SMAREA",
"SMPERIMETER",
"SMGEOMETRYSIZE",
"SQKM",
"SQMI",
"COLOR_MAP",
"CAPITAL",
"COUNTRY",
"POP_1994",
"CONTINENT"
],
"fieldValues": [
"22",
"-7.433472633361816",
"62.35749816894531",
"-6.38972282409668",
"61.388328552246094",
"6",
"0.25430895154659083",
"5.743731026651685",
"4500",
"1474.69",
"569.38",
"5",
"示例首都",
"示例国家",
"47067.0",
"亚洲"
],
"geometry": {
"id": 22,
"parts": [
3
],
"points": [
{
"x": -40,
"y": 60
},
{
"x": -45,
"y": 62
},
{
"x": -40,
"y": 55
},
{
"x": -40,
"y": 60
}
],
"style": null,
"type": "REGION",
"prjCoordSys":null
}
}
]
创建成功的情况下,得到 rjson 格式的操作结果表述如下:
{
"postResultType": "CreateChild",
"newResourceID": "9df3b263e93140a4ad55483e1f8f796e_2cf958dc059843a89225e499dcf150cf",
"succeed": true,
"newResourceLocation": "http://localhost:8091/iserver/services/data-World/rest/data/featureResults/9df3b263e93140a4ad55483e1f8f796e_2cf958dc059843a89225e499dcf150cf.rjson"
}
3.2.2添加GeoJSON格式的几何对象
对示例 features 资源执行 POST 请求:http://ip:端口号/iserver/services/data-World/rest/data/datasources/World/datasets/Countries/features.rjson。需要添加请求头:X-RequestEntity-ContentType 为 application/geojson,在请求体中包含如下参数:
[
{
"geometry": {
"coordinates": [
[
[
[
10.781665802002,
79.6502685546875
],
[
10.7558326721191,
79.6597137451172
],
[
10.7383308410645,
79.6794281005859
],
[
10.7122192382813,
79.7136077880859
],
[
10.7263870239258,
79.7177581787109
],
[
10.760555267334,
79.7188720703125
],
[
10.8866653442383,
79.7222137451172
],
[
10.9177761077881,
79.7210998535156
],
[
10.945276260376,
79.7191467285156
],
[
10.9819412231445,
79.7119293212891
],
[
11.0349979400635,
79.7008209228516
],
[
11.0716648101807,
79.6727600097656
],
[
11.0761089324951,
79.6627655029297
],
[
10.9527759552002,
79.6527709960938
],
[
10.9227752685547,
79.6510925292969
],
[
10.781665802002,
79.6502685546875
]
]
]
],
"type": "MultiPolygon"
},
"properties": {
"SQKM": "61909.1",
"SMSDRIW": "10.487914",
"SMSDRIS": "74.34305",
"POP_1994": "3148.0",
"SMSDRIN": "80.76416",
"SMID": "1",
"COUNTRY": "",
"CONTINENT": "欧洲1",
"SMAREA": "6.243427603572511E10",
"SMGEOPOSITION": "290488320",
"COLORID": "1",
"SMPERIMETER": "5196430.901327391",
"SQMI": "23903.1",
"SMGEOMETRYSIZE": "35816",
"CAPITAL": "",
"COLOR_MAP": "1",
"SMSDRIE": "33.637497",
"SMUSERID": "0"
},
"type": "Feature"
}
]
创建成功的情况下,得到 rjson 格式的操作结果表述如下:
{
"postResultType": "CreateChild",
"newResourceID": "9df3b263e93140a4ad55483e1f8f796e_62c9f50b14864e479436a519ffa14d98",
"succeed": true,
"newResourceLocation": "http://localhost:8091/iserver/services/data-World/rest/data/featureResults/9df3b263e93140a4ad55483e1f8f796e_62c9f50b14864e479436a519ffa14d98.rjson"
}
3.3修改要素
对 URI:http://ip:端口号/iserver/services/data-World/rest/data/datasources/World/datasets/Countries/features.rjson?_method=PUT 执行POST 请求,修改几何对象,在请求体中包含如下参数:
[
{
"fieldNames": [
"SMID",
"SMSDRIW",
"SMSDRIN",
"SMSDRIE",
"SMSDRIS",
"SMUSERID",
"SMAREA",
"SMPERIMETER",
"SMGEOMETRYSIZE",
"SQKM",
"SQMI",
"COLOR_MAP",
"CAPITAL",
"COUNTRY",
"POP_1994",
"CONTINENT"
],
"fieldValues": [
"22",
"-7.433472633361816",
"62.35749816894531",
"-6.38972282409668",
"61.388328552246094",
"6",
"0.25430895154659083",
"5.743731026651685",
"4500",
"1474.69",
"569.38",
"5",
"示例首都",
"示例国家",
"47067.0",
"欧洲"
],
"geometry": {
"id": 22,
"parts": [
3
],
"points": [
{
"x": -40,
"y": 60
},
{
"x": -45,
"y": 70
},
{
"x": -40,
"y": 55
},
{
"x": -40,
"y": 60
}
],
"style": null,
"type": "REGION",
"prjCoordSys":null
}
}
]
修改成功的情况下,得到 rjson 格式的操作结果表述如下:
{"succeed": true}