feature 资源表示一个要素。通过 feature 资源可以完成对要素信息的获取,修改和删除(当要素类型为点、线、面、文本、复合数据集或纯属性表数据集时才能修改和删除)。
feature 资源可以通过要素的 ID 号({featureId}) 来获取(URI1),也可以通过要素的索引号来获取(URI2)。
注意:URI2 是一种简化的访问 feature 的 URI,直接在最后把数据源、数据集、要素的索引用“-”连接,快速地确定一个要素。在示意 URI 中,{datasourceIndex}表示数据源索引,{datasetIndex}表示数据集索引,{featureIndex}表示要素索引。例如:http://supermapiserver:8090/iserver/services/data-world/rest/data/feature/0-2-7,就表示索引为0的数据源中,索引为2的数据集下,索引为7的要素,该 URI 同样有 rjson、json、html、xml、kml 五种表述格式。
支持的方法:
支持的表述格式:RJSON、JSON、HTML、XML、KML、GeoRSS、GeoJSON。
注:当要素类型为点、线、面时,GeoJSON表述可用。
对如下 URI 执行 HTTP 请求,以 rjson 输出格式为例加以说明,其中,supermapiserver 是服务器名。
http://supermapiserver:8090/iserver/services/data-world/rest/data/datasources/name/World/datasets/name/Countries/features/featureid.rjson
获取一个要素的信息,包括属性字段名称列表、属性字段值列表,以及要素对应的几何对象。
对 feature 资源执行 GET 请求,获取要素的信息,可以在 URI 中包含如下参数:
名称 | 类型 | 含义 |
hasGeometry | boolean | 是否获取几何对象的信息,true 表示获取在表述中包含几何对象的信息,false 表示不包含几何对象的信息。默认为 true。 |
当不传参数时,默认地,对 feature 资源执行 GET 请求,得到的表述中会包含几何对象的信息。
对 feature 资源执行 GET 请求,返回的资源表述的结构如下(资源表述在响应消息的实体主体里):
名称 | 类型 | 含义 |
ID | int | 要素的 ID。 |
fieldNames | String[] | 要素的属性字段名集合。 |
fieldValues | String[] | 要素的属性字段值集合。 |
stringID | String | 要素ID 。 |
geometry | Geometry | 要素对应的几何对象。 具体包括几何对象的类型、几何对象的样式信息、组成要素的几何点的坐标等。 |
注:视频数据集中的 feature 资源执行 GET 请求,返回的资源表述的结构如下(资源表述在响应消息的实体主体里):
名称 | 类型 | 含义 |
ID | int | 要素的 ID。 |
fieldNames | String[] | 要素的属性字段名集合。 |
fieldValues | String[] | 要素的属性字段值集合。 |
stringID | String | 要素ID 。 |
address | Sting | 视频流的获取地址。 |
videoParameters | videoParameters | 相机参数。 |
name | Sting | 视频名称。 |
startTime | Sting | 视频开始时间。 |
cameraLocation | cameraLocation | 相机外参。包括拍摄视频的摄像头的x、y、z坐标及侧偏角、俯仰角和偏航角等值。 |
endTime | String | 视频结束时间。 |
geometry | Geometry | 当前视频参数对应的的视频视角空间范围。 具体包括几何对象类型(只支持矩形 REGION)、几何对象的样式信息、组成要素的几何点的坐标、中心点坐标等。 |
对示例 feature 资源执行 GET 请求,以 URI1 为例,不返回几何对象的信息,构建 URI 如下:
http://supermapiserver:8090/iserver/services/data-world/rest/data/datasources/name/World/datasets/name/Countries/features/247.rjson?hasGeometry=false
则返回 ID 为247的要素的资源表述如下:
{
"ID": 247,
"fieldNames": [
"SMID",
"SMSDRIW",
"SMSDRIN",
"SMSDRIE",
"SMSDRIS",
"SMUSERID",
"SMAREA",
"SMPERIMETER",
"SMGEOMETRYSIZE",
"SQKM",
"SQMI",
"COLOR_MAP",
"CAPITAL",
"COUNTRY",
"POP_1994",
"CONTINENT"
],
"fieldValues": [
"247",
"73.62005",
"53.55374",
"134.76846",
"3.8537261",
"0",
"960.4537031350538",
"6.685997649733246E7",
"147412",
"9367281.0",
"3616707.25",
"1",
"北京",
"中华人民共和国",
"1.128139689E9",
"亚洲"
],
"geometry": null
}
当要素所在数据集的类型为EPS,对 feature 资源执行 GET 请求后,将返回组成几何对象的点的属性信息。以 URI1 为例,构建 URI 如下:
http://supermapiserver:8090/iserver/services/data-China400/rest/data/datasources/EPS_all/datasets/PointEPS/features/1.rjson
则返回 ID 为1的要素的资源表述如下:
{
"ID": 1,
"fieldNames": [
"SMID",
"SMSDRIW",
"SMSDRIN",
"SMSDRIE",
"SMSDRIS",
"SMUSERID",
"SMGEOMETRYSIZE",
"SMGEOPOSITION"
],
"fieldValues": [
"1",
"525.26154",
"460.002",
"525.26154",
"460.002",
"0",
"0",
"0"
],
"geometry": {
"center": null,
"id": 1,
"parts": [1],
"points": [{
"name": "",
"type": "None",
"x": 525.261530541407,
"y": 460.00202477444,
"z": 0
}],
"prjCoordSys": null,
"style": null,
"type": "POINTEPS"
}
}
当要素所在数据集的类型为VIDEO,对 feature 资源执行 GET 请求后,将返回视频要素的信息。以 URI1 为例,构建 URI 如下:
http://localhost:8090/iserver/services/data-test0104/rest/data/datasources/NewDatasource/datasets/ptz_2/features/1.rjson?hasGeometry=true
则返回 ID 为1的要素的资源表述如下:
{
"stringID": null,
"address": "http://192.168.113.1:8090/iserver/services/video-test0104/restjsr/hls/stream/NewDatasource-ptz_2/1/index.m3u8",
"videoParameters": {
"auxiliaryCalibrationParameter": {
"tiltGrowsUp": false,
"iterationCount": 1000,
"samplesCount": 200,
"supportHeight": false,
"panGrowsClockwise": false,
"cameraIteratorParameters": [
{
"minValue": "NaN",
"cameraParameterType": "X",
"maxValue": "NaN",
"value": 1.29295170697E7
},
{
"minValue": "NaN",
"cameraParameterType": "Y",
"maxValue": "NaN",
"value": 3279448.7247
},
{
"minValue": 0,
"cameraParameterType": "Z",
"maxValue": 80,
"value": "NaN"
},
{
"minValue": "NaN",
"cameraParameterType": "FOV_X",
"maxValue": "NaN",
"value": "NaN"
},
{
"minValue": "NaN",
"cameraParameterType": "FOV_Y",
"maxValue": "NaN",
"value": "NaN"
}
]
},
"videoParameterList": [
{
"videoWidth": 1540,
"calibrationModel": {
"isRansac": false,
"centerY": 0,
"centerX": 0,
"calibrationModelType": 0,
"calibrationPoints": [
{
"spatialPoint": {
"x": 1.2929429979064863E7,
"y": 3279405.072826336,
"z": 0
},
"videoPoint": {
"x": 546,
"y": 196
}
},
{
"spatialPoint": {
"x": 1.2929372108815093E7,
"y": 3279432.230745163,
"z": 0
},
"videoPoint": {
"x": 855,
"y": 445
}
},
{
"spatialPoint": {
"x": 1.2929376742628248E7,
"y": 3279481.6986007923,
"z": 0
},
"videoPoint": {
"x": 1281,
"y": 414
}
},
{
"spatialPoint": {
"x": 1.2929298549258841E7,
"y": 3279409.595201617,
"z": 0
},
"videoPoint": {
"x": 694,
"y": 590
}
},
{
"spatialPoint": {
"x": 1.2929325804647576E7,
"y": 3279495.6764664766,
"z": 0
},
"videoPoint": {
"x": 1244,
"y": 534
}
},
{
"spatialPoint": {
"x": 1.2929358878926704E7,
"y": 3279505.9148433916,
"z": 0
},
"videoPoint": {
"x": 1409,
"y": 456
}
},
{
"spatialPoint": {
"x": 1.2929424599934718E7,
"y": 3279463.9504835536,
"z": 0
},
"videoPoint": {
"x": 1273,
"y": 217
}
},
{
"spatialPoint": {
"x": 1.2929371030474676E7,
"y": 3279383.6257988643,
"z": 0
},
"videoPoint": {
"x": 432,
"y": 448
}
}
],
"fovX": 0,
"fovY": 0,
"isIntrinsic": false,
"isExtrinsic": false,
"cameraLocation": {
"cameraRoll": -0.7656412825751551,
"cameraYaw": -90.89065135311759,
"cameraY": 3279448.7247,
"cameraZ": 65.78334160898069,
"cameraX": 1.29295170697E7,
"cameraPitch": -39.80838777192129
}
},
"clipRegion": {
"center": {
"x": 770,
"y": 385
},
"parts": [5],
"style": null,
"prjCoordSys": null,
"id": 0,
"type": "REGION",
"partTopo": [1],
"points": [
{
"x": 0,
"y": 0
},
{
"x": 1540,
"y": 0
},
{
"x": 1540,
"y": 770
},
{
"x": 0,
"y": 770
},
{
"x": 0,
"y": 0
}
]
},
"zoom": 1,
"time": 0,
"validBounds": {
"OUT_TOP": 2,
"OUT_RIGHT": 4,
"size": {
"width": 1540,
"height": 770
},
"x": 0,
"width": 1540,
"y": 0,
"OUT_BOTTOM": 8,
"location": {
"x": 0,
"y": 0
},
"OUT_LEFT": 1,
"height": 770
},
"tilt": 23.9,
"pan": 156,
"videoHeight": 770
},
{
"videoWidth": 1540,
"calibrationModel": {
"isRansac": false,
"centerY": 0,
"centerX": 0,
"calibrationModelType": 0,
"calibrationPoints": [
{
"spatialPoint": {
"x": 1.2929429979064863E7,
"y": 3279405.072826336,
"z": 0
},
"videoPoint": {
"x": 120,
"y": 126
}
},
{
"spatialPoint": {
"x": 1.2929371395548986E7,
"y": 3279432.6098156744,
"z": 0
},
"videoPoint": {
"x": 410,
"y": 442
}
},
{
"spatialPoint": {
"x": 1.2929377985228604E7,
"y": 3279478.5103589036,
"z": 0
},
"videoPoint": {
"x": 820,
"y": 444
}
},
{
"spatialPoint": {
"x": 1.2929298549258841E7,
"y": 3279409.595201617,
"z": 0
},
"videoPoint": {
"x": 228,
"y": 564
}
},
{
"spatialPoint": {
"x": 1.292926073318682E7,
"y": 3279503.7847872227,
"z": 0
},
"videoPoint": {
"x": 735,
"y": 641
}
},
{
"spatialPoint": {
"x": 1.2929358878926704E7,
"y": 3279505.9148433916,
"z": 0
},
"videoPoint": {
"x": 947,
"y": 504
}
},
{
"spatialPoint": {
"x": 1.2929424599934718E7,
"y": 3279463.9504835536,
"z": 0
},
"videoPoint": {
"x": 859,
"y": 262
}
},
{
"spatialPoint": {
"x": 1.2929388108285695E7,
"y": 3279545.695535939,
"z": 0
},
"videoPoint": {
"x": 1324,
"y": 465
}
},
{
"spatialPoint": {
"x": 1.2929322376055904E7,
"y": 3279573.704751997,
"z": 0
},
"videoPoint": {
"x": 1183,
"y": 579
}
}
],
"fovX": 0,
"fovY": 0,
"isIntrinsic": false,
"isExtrinsic": false,
"cameraLocation": {
"cameraRoll": -0.7656412825751551,
"cameraYaw": -70.89065135311759,
"cameraY": 3279448.7247,
"cameraZ": 65.78334160898069,
"cameraX": 1.29295170697E7,
"cameraPitch": -39.80838777192129
}
},
"clipRegion": {
"center": {
"x": 770,
"y": 385
},
"parts": [5],
"style": null,
"prjCoordSys": null,
"id": 0,
"type": "REGION",
"partTopo": [1],
"points": [
{
"x": 0,
"y": 0
},
{
"x": 1540,
"y": 0
},
{
"x": 1540,
"y": 770
},
{
"x": 0,
"y": 770
},
{
"x": 0,
"y": 0
}
]
},
"zoom": 1,
"time": 12.733333333333333,
"validBounds": {
"OUT_TOP": 2,
"OUT_RIGHT": 4,
"size": {
"width": 1540,
"height": 770
},
"x": 0,
"width": 1540,
"y": 0,
"OUT_BOTTOM": 8,
"location": {
"x": 0,
"y": 0
},
"OUT_LEFT": 1,
"height": 770
},
"tilt": 23.9,
"pan": 136,
"videoHeight": 770
},
{
"videoWidth": 1540,
"calibrationModel": {
"isRansac": false,
"centerY": 0,
"centerX": 0,
"calibrationModelType": 0,
"calibrationPoints": [
{
"spatialPoint": {
"x": 1.292947775352481E7,
"y": 3279486.5758288642,
"z": 0
},
"videoPoint": {
"x": 1111,
"y": 52
}
},
{
"spatialPoint": {
"x": 1.2929377985228604E7,
"y": 3279478.5103589036,
"z": 0
},
"videoPoint": {
"x": 374,
"y": 420
}
},
{
"spatialPoint": {
"x": 1.292926073318682E7,
"y": 3279503.7847872227,
"z": 0
},
"videoPoint": {
"x": 263,
"y": 611
}
},
{
"spatialPoint": {
"x": 1.2929358878926704E7,
"y": 3279505.9148433916,
"z": 0
},
"videoPoint": {
"x": 491,
"y": 499
}
},
{
"spatialPoint": {
"x": 1.2929424599934718E7,
"y": 3279463.9504835536,
"z": 0
},
"videoPoint": {
"x": 448,
"y": 248
}
},
{
"spatialPoint": {
"x": 1.2929388108285695E7,
"y": 3279545.695535939,
"z": 0
},
"videoPoint": {
"x": 860,
"y": 506
}
},
{
"spatialPoint": {
"x": 1.2929407825861763E7,
"y": 3279565.077638886,
"z": 0
},
"videoPoint": {
"x": 1046,
"y": 497
}
},
{
"spatialPoint": {
"x": 1.2929445928769993E7,
"y": 3279564.7923564096,
"z": 0
},
"videoPoint": {
"x": 1269,
"y": 418
}
}
],
"fovX": 0,
"fovY": 0,
"isIntrinsic": false,
"isExtrinsic": false,
"cameraLocation": {
"cameraRoll": -0.7656412825751551,
"cameraYaw": -50.89065135311759,
"cameraY": 3279448.7247,
"cameraZ": 65.78334160898069,
"cameraX": 1.29295170697E7,
"cameraPitch": -39.80838777192129
}
},
"clipRegion": {
"center": {
"x": 770,
"y": 385
},
"parts": [5],
"style": null,
"prjCoordSys": null,
"id": 0,
"type": "REGION",
"partTopo": [1],
"points": [
{
"x": 0,
"y": 0
},
{
"x": 1540,
"y": 0
},
{
"x": 1540,
"y": 770
},
{
"x": 0,
"y": 770
},
{
"x": 0,
"y": 0
}
]
},
"zoom": 1,
"time": 23.266666666666666,
"validBounds": {
"OUT_TOP": 2,
"OUT_RIGHT": 4,
"size": {
"width": 1540,
"height": 770
},
"x": 0,
"width": 1540,
"y": 0,
"OUT_BOTTOM": 8,
"location": {
"x": 0,
"y": 0
},
"OUT_LEFT": 1,
"height": 770
},
"tilt": 23.9,
"pan": 116,
"videoHeight": 770
}
],
"parameterInterpolation": false
},
"fieldNames": [
"SMID",
"SMUSERID"
],
"name": "ptz旋转画面.mp4",
"startTime": "2023/11/22 09:16:51",
"geometry": {
"center": {
"x": 1.292926198036702E7,
"y": 3279399.5618885513
},
"parts": [5],
"style": null,
"prjCoordSys": null,
"id": 1,
"type": "REGION",
"partTopo": [1],
"points": [
{
"x": 1.2929466274270147E7,
"y": 3279386.794475903
},
{
"x": 1.2929463599646807E7,
"y": 3279488.8953134995
},
{
"x": 1.2929031336155694E7,
"y": 3279642.3491254174
},
{
"x": 1.292908470565614E7,
"y": 3279156.774651685
},
{
"x": 1.2929466274270147E7,
"y": 3279386.794475903
}
]
},
"endTime": "2023/11/22 09:16:58",
"fieldValues": [
"1",
"0"
],
"ID": 1,
"cameraLocation": {
"cameraRoll": -0.7656412825751551,
"cameraYaw": -90.89065135311759,
"cameraY": 3279448.7247,
"cameraZ": 65.78334160898069,
"cameraX": 1.29295170697E7,
"cameraPitch": -39.80838777192129
}
}
修改一个要素(当要素类型为点、线、面、文本、复合数据集或纯属性表数据集、三维模型数据集和视频数据集时)。需要注意的是,SuperMap 系统字段,即字段名以 SM、sm 开头的字段,是只读字段,不允许被修改。
此外,若您修改的要素在当前数据集中不存在,当您传入的请求体参数与当前数据集的要素类型对应时,将创建一个新的要素;当请求体参数与当前数据集的要素类型不对应时,将返回出错信息。
对于视频要素,当前仅支持修改视频地址 address 参数和视频名称 name 参数。若您修改的要素在当前数据集中不存在,将返回出错信息。
请注意:当您更新的要素中包含中文字段时,需在请求头中添加编码,即 Content-Type application/json;charset=UTF-8。
对 feature 资源执行 PUT 请求,对本要素进行修改,需要在请求体中包含修改后的要素的描述,请求体结构如下:
名称 | 类型 | 含义 |
fieldNames | String[] | 预修订的要素属性字段名集合。SuperMap 系统字段,即字段名以 SM、sm 开头的字段,是只读字段,不允许被修改。 |
fieldValues | String[] | 预修订的要素的属性字段值集合,与 fieldNames 对应。 |
geometry | Geometry | 要素对应的几何对象。 |
对 feature 资源执行 PUT 请求,返回的操作结果表述的结构如下(表述在响应消息的实体主体里):
字段 | 类型 | 说明 |
succeed | boolean | 操作是否成功。 |
error | HttpError | 出错信息,如果操作成功,则没有本字段。 |
对示例 feature 资源:http://supermapiserver:8090/iserver/services/data-world/rest/data/datasources/name/World/datasets/name/Countries/features/247.rjson 执行 PUT 请求,修改 POP_1994 字段的值为 1,600,000,000,即1.6E9,请求体中包含参数如下:
{
"ID": 247,
"fieldNames": [
"POP_1994"
],
"fieldValues": [
"1.6E9"
]
}
则操作成功时,返回 rjson 的操作结果的表述如下:
{"succeed": true}
删除 feature 资源所标识的要素(当要素类型为点、线、面、文本、复合数据集或纯属性表数据集时)。
无。
对 feature 资源执行 DELETE 请求,删除该 feature 资源(也就是一个要素),返回的操作结果的表述结构如下:
字段 | 类型 | 说明 |
succeed | boolean | 删除要素是否成功 |
error | HttpError | 出错信息,如果操作成功,则没有本字段。 |
对示例 feature 资源:http://supermapiserver:8090/iserver/services/data-world/rest/data/datasources/name/World/datasets/name/Countries/features/247.rjson 执行 DELETE 请求,删除 World 数据源 Countries 数据集中 ID 为 247 的要素,在删除成功的情况下,返回的操作结果的表述如下:
{"succeed": true}
返回跟 GET 请求一样的 HTTP 响应头,但是没有响应实体。可以在不必传输整个响应内容的情况下,获取包含在响应消息头中的元数据信息。元数据信息包括媒体类型,字符编码,压缩编码,实体内容长度等。
HEAD 请求可以用来判断 feature 资源是否存在,或者客户端是否有权限访问 feature 资源。通过对加.<format>的 URI 执行 HEAD 请求,还可以快速判断 feature 资源是否支持<format>格式的表述。