/featureResults[.<format>]
featureResults 资源表示数据查询结果的集合,通过对该资源执行 POST 请求,可以对数据源中的数据进行查询(可跨数据源),获取符合条件的要素集合,对数据进行查询的的步骤如下:
对 featureResults 执行 POST 请求,在请求体中包含必要的参数,返回一个确定的结果资源(featureResult 资源)的 URI;
对返回的 URI 进行 GET 操作,得到需要的结果。
进行数据查询,获取要素集合的方式有多种: ID 模式、几何对象的缓冲区模式、缓冲区加属性过滤器模式、空间查询模式、空间查询加属性过滤器的模式、SQL 模式等。
关于本资源的使用方法,可参考开发指南:数据要素的缓冲区查询。
支持的方法:
支持的表述格式:RJSON、JSON、HTML、XML。
对如下 URI 执行 HTTP 请求,以 rjson 输出格式为例加以说明,其中,supermapiserver 是服务器名。
http://supermapiserver:8090/iserver/services/data-China400/rest/data/featureResults.rjson
对 featureResults 资源执行 GET 请求,可以获取数据查询结果资源的集合。
无。
对 featureResults 资源执行 GET 请求,得到的是 featureResult 资源信息的集合,其中单个 featureResult 资源信息的结构如下:
字段 | 类型 | 说明 |
name | String | featureResult 资源的名称。 |
path | String | featureResult 资源的访问路径。 |
resourceConfigID | String | 资源配置项 ID。 |
resourceType | String | 资源类型。 |
supportedMediaTypes | String[] | 数据源资源支持的表述的媒体类型。 |
在一次成功的数据查询(即对 featureResults 成功执行 POST 请求)后,featureResults 资源里保存了查询结果的信息,对 featureResults 资源执行 GET 请求,返回 rjson 格式的资源描述如下:
[
{
"name": "c97763682c0f4eebb392a704ab8273b2_8fe12768e9244972bd4c051fde8b53ee",
"path": "http://supermapiserver:8090/iserver/services/data-China400/rest/data/featureResults/c97763682c0f4eebb392a704ab8273b2_8fe12768e9244972bd4c051fde8b53ee.rjson",
"resourceConfigID": null,
"resourceType": "ArithResultResource",
"supportedMediaTypes": [
"application/xml",
"text/xml",
"application/json",
"application/fastjson",
"application/rjson",
"text/html",
"application/jsonp",
"application/x-java-serialized-object"
]
}
]
根据给定条件,创建一个数据查询结果资源。
对 featureResults 资源执行 POST 请求,对数据进行查询(即创建一个 featureResult 资源),需传递参数如下:
URI 中的参数
名称 | 类型 | 含义 |
returnContent | boolean | true 表示直接返回查询结果,即元素类型为 Feature 的数组;false 表示返回创建的 featureResult 资源的 URI。默认不传时为 false。 |
fromIndex | int | 查询结果的最小索引号。
默认值是0,如果该值大于查询结果的最大索引号,则查询结果为空。 |
toIndex | int | 查询结果的最大索引号。
如果该值大于查询结果的最大索引号,则以查询结果的最大索引号为终止索引号。 |
在请求体中包含查询参数,如下所示。其中,getFeatureMode 标识了数据查询的模式,数据查询模式不同,所需要的参数也不同。
名称 | 类型 | 含义 |
getFeatureMode | GetFeatureMode | 【必选参数】
数据查询的模式。有 ID、SQL、BOUNDS、BOUNDS_ATTRIBUTEFILTER、BUFFER、BUFFER_ATTRIBUTEFILTER、SPATIAL、SPATIAL_ATTRIBUTEFILTER 等。 如果对三维点、线、面、模型数据集进行查询,则目前支持的查询模式有 ID、SQL、BOUNDS、BOUNDS_ATTRIBUTEFILTER。 |
datasetNames | String[] | 【必选参数】
数据集名称数组(datasourceName:datasetName)。 数据集名称由数据源名和数据集名构成,例如 World 数据源下的 Ocean 数据集,这里的数据集名称就是“World:Ocean”。 |
ids | int[] | 要获取的资源的 ID 数组。
当 getFeatureMode(查询模式)为如下值时必选:ID。 |
bounds | Rectangle2D | 进行范围查询时,需要设置的矩形坐标范围。
当 getFeatureMode(查询模式)为如下值时必选:BOUNDS、BOUNDS_ATTRIBUTEFILT。 |
geometry | Geometry | 几何对象。
当 getFeatureMode(查询模式)为如下值时必选:BUFFER、BUFFER_ATTRIBUTEFILTER、SPATIAL、SPATIAL_ATTRIBUTEFILTER。 |
bufferDistance | double | 缓冲区半径,单位和数据集坐标单位一致。
当 getFeatureMode(查询模式)为如下值时必选:BUFFER、BUFFER_ATTRIBUTEFILTER。 |
attributeFilter | String | 属性查询过滤器。
当 getFeatureMode(查询模式)为如下值时必选:BUFFER_ATTRIBUTEFILTER、SPATIAL_ATTRIBUTEFILTER、BOUNDS_ATTRIBUTEFILTER。 当 getFeatureMode(查询模式)为 SQL 时,如果在系统配置文件(参见:iServer 配置文件说明)中设置了 SQL 查询表达式中需要屏蔽掉的字符串,那么在属性查询过滤器中一旦发现输入了已经设置的字符串,系统会认为该条查询表达式非法并返回400参数异常,防止 SQL 注入。如果在系统配置文件中没有设置 SQL 查询表达式中需要屏蔽掉的字符串,那么在属性查询过滤器中会默认屏蔽掉分号。 |
spatialQueryMode | SpatialQueryMode | 空间查询模式。
当 getFeatureMode(查询模式)为如下值时必选:SPATIAL、SPATIAL_ATTRIBUTEFILTER。 |
maxFeatures | int | 进行 SQL 查询时,用于设置服务端返回查询结果条目的数量,默认为1000。 |
queryParameter | QueryParameter | 查询参数。
这里已包含设置获取的结果字段名。 当 getFeatureMode(查询模式)为如下值时必选:SQL。 |
targetPrj | PrjCoordSys | 动态投影的目标坐标系。
当此参数设置的坐标系统不同于数据的原有坐标系统时, 系统会进行动态投影,并返回动态投影后的查询结果。 参数使用时,需按照PrjCoordSys中的字段结构来构建,同时也支持通过只传递 epsgCode 的方式传入坐标参考系。 建议当目标投坐标系无对应的EpsgCode时,使用此参数。 使用时,需在请求url中添加returnContent参数,并设值为true |
targetEpsgCode | int | 动态投影的目标坐标系对应的EPSG
Code。 使用时,需在请求url中添加returnContent参数,并设值为true
targetEpsgCode和targetPrj均可设置动态投影的目标坐标系,当两者都设置时,以targetEpsgCode为准。 |
对 featureResults 资源执行 POST 请求,返回的创建结果的结构如下:
字段 | 类型 | 说明 |
succeed | boolean | 数据查询是否成功。 |
newResourceID | String | 创建的 featureResult 资源的 ID。 |
newResourceLocation | String | 创建的 featureResult 资源的 URI。 |
如果 URI 参数 returnContent 为 true,则返回查询结果要素集合,即 Feature 集合,其中单个元素的描述结构如下:
名称 | 类型 | 含义 |
ID | int | 要素的 ID。 |
fieldNames | String[] | 要素的属性字段名集合。 |
fieldValues | String[] | 要素的属性字段值集合。 |
geometry | Geometry | 要素对应的几何对象。 |
对示例 featureResults 资源:http://supermapiserver:8090/iserver/services/data-China400/rest/data/featureResults.rjson 执行 POST 请求(returnContent 默认不传,则为 false),对 supermapiserver 服务器上的数据进行查询,根据 ID 来获取要素,请求体中的参数如下:
{
"getFeatureMode":"ID",
"datasetNames":["China400:China_Capital_A_pt"],
"ids":[1, 2, 3]
}
返回 rjson 格式的操作结果表述如下:
{
"newResourceID": "c97763682c0f4eebb392a704ab8273b2_ce47d97928c3425d895b8a26812ee009",
"newResourceLocation": "http://localhost:8090/iserver/services/data-China400/rest/data/featureResults/c97763682c0f4eebb392a704ab8273b2_ce47d97928c3425d895b8a26812ee009.rjson",
"postResultType": "CreateChild",
"succeed": true
}
对示例 featureResults 资源:http://supermapiservert:8090/iserver/services/data-China400/rest/data/featureResults.rjson?returnContent=true 执行 POST 请求,对 supermapiserver 服务器上的数据进行查询,根据 SQL来获取要素,并转换投影坐标系。请求体中的参数如下:
{
"getFeatureMode":"SQL",
"targetEpsgCode":4326,
"datasetNames":["China400:China_Capital_A_pt"],
"maxFeatures":1000,
"queryParameter":{"sortClause":null, "ids":null, "name":"Capital", "attributeFilter":"SMID%26lt;5", "groupClause":null, "linkItems":null, "joinItems":null, "fields":null}
}
返回 rjson 格式的操作结果表述如下:
{
"featureCount": 1,
"featureUriList": [],
"features": [{
"ID": 1,
"fieldNames": [
"SMID",
"SMX",
"SMY",
"SMLIBTILEID",
"SMUSERID",
"SMGEOMETRYSIZE",
"GB",
"RNAME",
"PATH_1",
"PATH_2",
"WEATHER",
"TEMPERATURE",
"ANNUAL_AVE_HUM_2012",
"ANNUAL__PRECIPITATION_2012",
"ANNUAL__AVE_TEMP_2012",
"MUSEUM_NUM_2012",
"MUSEUM_LEVEL",
"MUSEUM_ID",
"UNIVERSITY_NUM_2012"
],
"fieldValues": [
"1",
"1.2958366183660744E7",
"4852332.623503302",
"1",
"0",
"16",
"31010",
"北京",
"907979",
"907975",
"雷阵雨转晴",
"29℃/19℃",
"51",
"733.2",
"12.9",
"41",
"2",
"81",
"89"
],
"geometry": {
"center": {
"x": 116.406984,
"y": 39.9062810145467
},
"id": 1,
"parts": [1],
"points": [{
"x": 116.406984,
"y": 39.9062810145467
}],
"prjCoordSys": null,
"style": null,
"type": "POINT"
}
}],
"totalCount": 1
}
返回跟 GET 请求一样的 HTTP 响应头,但是没有响应实体。可以在不必传输整个响应内容的情况下,获取包含在响应消息头中的元数据信息。元数据信息包括媒体类型,字符编码,压缩编码,实体内容长度等。
HEAD 请求可以用来判断 featureResults 资源是否存在,或者客户端是否有权限访问 featureResults 资源。通过对加.<format>的 URI 执行 HEAD 请求,还可以快速判断 featureResults 资源是否支持<format>格式的表述。