/featureResults[.<format>]
featureResults 资源表示数据查询结果的集合,通过对该资源执行 POST 请求,可以对数据源中的数据进行查询(可跨数据源),获取符合条件的要素集合,对数据进行查询的的步骤如下:
对 featureResults 执行 POST 请求,在请求体中包含必要的参数,返回一个确定的结果资源(featureResult 资源)的 URI;
对返回的 URI 进行 GET 操作,得到需要的结果。
进行数据查询,获取要素集合的方式有多种: ID 模式、几何对象的缓冲区模式、缓冲区加属性过滤器模式、空间查询模式、空间查询加属性过滤器的模式、SQL 模式等。若数据来源为ElasticSearch 服务,则获取要素的方式还包括:聚合查询模式。
关于本资源的使用方法,可参考开发指南:数据要素的缓冲区查询。
支持的方法:
支持的表述格式: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。 Elasticsearch数据查询支持的数据类型:Geo_Point、Geo_Shape。 对于Elasticsearch数据,当数据为字符串类型,需加引号。 |
bounds | Rectangle2D | 进行范围查询时,需要设置的矩形坐标范围。 当 getFeatureMode(查询模式)为如下值时必选:BOUNDS、BOUNDS_ATTRIBUTEFILT。 Elasticsearch数据查询支持的数据类型:Geo_Point、Geo_Shape。 |
geometry | Geometry | 几何对象。 当 getFeatureMode(查询模式)为如下值时必选:BUFFER、BUFFER_ATTRIBUTEFILTER、SPATIAL、SPATIAL_ATTRIBUTEFILTER。 |
bufferDistance | double | 缓冲区半径,单位和数据集坐标单位一致。 当 getFeatureMode(查询模式)为如下值时必选:BUFFER、BUFFER_ATTRIBUTEFILTER。 不支持Elasticsearch数据来源。 |
attributeFilter | String | 属性查询过滤器。 当 getFeatureMode(查询模式)为如下值时必选:BUFFER_ATTRIBUTEFILTER、SPATIAL_ATTRIBUTEFILTER、BOUNDS_ATTRIBUTEFILTER。 当 getFeatureMode(查询模式)为 SQL 时,如果在系统配置文件(参见:iServer 配置文件说明)中设置了 SQL 查询表达式中需要屏蔽掉的字符串,那么在属性查询过滤器中一旦发现输入了已经设置的字符串,系统会认为该条查询表达式非法并返回400参数异常,防止 SQL 注入。如果在系统配置文件中没有设置 SQL 查询表达式中需要屏蔽掉的字符串,那么在属性查询过滤器中会默认屏蔽掉分号。 |
spatialQueryMode | SpatialQueryMode | 空间查询模式。 当 getFeatureMode(查询模式)为如下值时必选:SPATIAL、SPATIAL_ATTRIBUTEFILTER。 Elasticsearch数据查询支持的数据类型:Geo_Point、Geo_Shape。 当数据类型为Geo_Point时,支持的空间查询模式仅为CONTAIN。 当数据类型为Geo_Shape时,支持的空间查询模式CONTAIN、WITHIN、INTERSECT、DISJOINT。 |
maxFeatures | int | 进行 SQL 查询时,用于设置服务端返回查询结果条目的数量,默认为1000。 |
queryParameter | QueryParameter | 查询参数。 这里已包含设置获取的结果字段名。 当 getFeatureMode(查询模式)为如下值时必选:SQL。 Elasticsearch数据查询支持的数据类型:Geo_Point、Geo_Shape。 对于Elasticsearch数据,当字段值包含大写时,查询条件不加引号。 对于Elasticsearch数据,查询条件暂不支持区分大小写。例如:当查询条件为 NAME=G12时 ,NAME=G12或NAME=g12符合条件的结果均会查询。 |
targetPrj | PrjCoordSys | 动态投影的目标坐标系。 当此参数设置的坐标系统不同于数据的原有坐标系统时, 系统会进行动态投影,并返回动态投影后的查询结果。 参数使用时,需按照PrjCoordSys中的字段结构来构建,同时也支持通过只传递 epsgCode 的方式传入坐标参考系。 建议当目标投坐标系无对应的EpsgCode时,使用此参数。 使用时,需在请求url中添加returnContent参数,并设值为true |
targetEpsgCode | int | 动态投影的目标坐标系对应的EPSG Code。 使用时,需在请求url中添加returnContent参数,并设值为true targetEpsgCode和targetPrj均可设置动态投影的目标坐标系,当两者都设置时,以targetEpsgCode为准。 |
aggregations |
AggregationParameter | 聚合查询参数(仅支持Elasticsearch数据源)。 目前支持FilterAggParameter过滤聚合查询和GeoHashGridAggParameter格网聚合查询。 Elasticsearch数据查询支持的数据类型:Geo_Point、Geo_Shape。 |
hasGeometry |
boolean | 是否返回空间几何对象信息。默认为true。当 getFeatureMode 不为 ID 时,且 URL 参数 returnContent=true 时,hasGeometry 有效。 |
对 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 | 要素对应的几何对象。当hasGeometry为false时,返回的geometry的值为null。 |
对示例 featureResults 资源:http://supermapiserver:8090/iserver/services/data-world/rest/data/featureResults.rjson 执行 POST 请求(returnContent 默认不传,则为 false),对 supermapiserver 服务器上的数据进行查询,根据 ID 来获取要素,请求体中的参数如下:
{
"getFeatureMode":"ID",
"datasetNames":["World:Capitals"],
"ids":[1, 2, 3]
}
返回 rjson 格式的操作结果表述如下:
{
"newResourceID": "48ba8fa1144640939a944f75e1682265_99dabf94794248c38776711d859164af",
"newResourceLocation": "http://localhost:8080/iserver/services/data-world/rest/data/featureResults/48ba8fa1144640939a944f75e1682265_99dabf94794248c38776711d859164af.rjson",
"postResultType": "CreateChild",
"succeed": true
}
对示例 featureResults 资源:http://supermapiservert:8090/iserver/services/data-China400/rest/data/featureResults.rjson?returnContent=true 执行 POST 请求,对 supermapiserver 服务器上的数据进行查询,根据 SQL来获取要素,并转换投影坐标系。请求体中的参数如下:
{
"getFeatureMode":"SQL",
"datasetNames":["World:Capitals"],
"targetEpsgCode":3857,
"maxFeatures":1000,
"queryParameter":{
"sortClause":null,
"ids":null, "name":"Capital",
"attributeFilter":"SMID%26lt;5",
"groupClause":null,
"linkItems":null,
"joinItems":null,
"fields":null
},
hasGeometry:true
}
返回 rjson 格式的操作结果表述如下:
{
"featureCount": 1,
"featureUriList": [],
"features": [{
"ID": 1,
"fieldNames": [
"SMID",
"SMX",
"SMY",
"SMLIBTILEID",
"SMUSERID",
"SMGEOMETRYSIZE",
"USERID",
"POP",
"CAPITAL_LO",
"CAPITAL_CH",
"COUNTRY_CH",
"CAPITAL_EN",
"COUNTRY_EN",
"COUNTRY",
"CAP_POP",
"CAPITAL"
],
"fieldValues": [
"1",
"-47.8977476573595",
"-15.792110943058866",
"1",
"0",
"16",
"0",
"2207718.0",
"Brasília",
"巴西利亚",
"巴西",
"Brasilia",
"Brazil",
"巴西",
"2207718.0",
"巴西利亚"
],
"geometry": {
"center": {
"x": -5331952.879361972,
"y": -1780660.5109428319
},
"id": 1,
"parts": [1],
"points": [{
"x": -5331952.879361972,
"y": -1780660.5109428319
}],
"prjCoordSys": null,
"style": null,
"type": "POINT"
}
}],
"totalCount": 1
}
对示例 featureResults 资源:http://supermapiservert:8090/iserver/services/data-es/rest/data/featureResults.json?returnContent=true 执行 POST 请求,对 supermapiserver 服务器上的数据进行查询,根据 SQL来获取要素。请求体中的参数如下:
{
"getFeatureMode": "SQL",
"datasetNames": [
"居民点:supermap"
],
"maxFeatures": 1000,
"queryParameter": {
"sortClause": null,
"ids": null,
"name": null,
"attributeFilter": "MAPTN = G4805200250",
"groupClause": null,
"linkItems": null,
"joinItems": null,
"fields": null
}
}
返回 rjson 格式的操作结果表述如下:
{
"features": [],
"featureUriList": [
{
"stringID": "AWTJ_JNbQGqPLMwBycPm",
"fieldNames": [
"AREA",
"CODE",
"COVERAGE",
"COVERAGE_ID",
"GB",
"MAPTN",
"PERIMETER",
"RNAME",
"SmID",
"TN",
"ZValue"
],
"geometry": {
"center": {
"x": 102.09679,
"y": 26.921792
},
"parts": [
1
],
"style": null,
"prjCoordSys": null,
"id": 0,
"type": "POINT",
"partTopo": null,
"points": [
{
"x": 102.09679,
"y": 26.921792
}
]
},
"fieldValues": [
"0.0",
"211",
"25",
"25",
"31091",
"G4805200250",
"0.0",
"新林村",
"4139",
"200250",
"1200.0"
],
"ID": 0
},
{
"stringID": "AWXNF_e10qCuSb4ZYqo-",
"fieldNames": [
"AREA",
"CODE",
"COVERAGE",
"COVERAGE_ID",
"GB",
"MAPTN",
"PERIMETER",
"RNAME",
"SmID",
"TN",
"ZValue"
],
"geometry": {
"center": {
"x": 102.09679,
"y": 26.921792
},
"parts": [
1
],
"style": null,
"prjCoordSys": null,
"id": 0,
"type": "POINT",
"partTopo": null,
"points": [
{
"x": 102.09679,
"y": 26.921792
}
]
},
"fieldValues": [
"0.0",
"211",
"25",
"25",
"31091",
"g4805200250",
"0.0",
"新林村",
"4139",
"200250",
"1200.0"
],
"ID": 0
}
],
"totalCount": 2,
"featureCount": 2
}
对示例 featureResults 资源:http://supermapiservert:8090/iserver/services/data-world/rest/data/featureResults.rjson?returnContent=true 执行 POST 请求,对 supermapiserver 服务器上的数据进行查询,根据 SQL来获取要素,通过设置 targetPrj 参数转换投影坐标系,targetPrj 参数的构造参考PrjCoordSys。请求体中的参数示例如下:
{
"getFeatureMode":"SQL",
"targetPrj": {
"coordSystem": {
"datum": {
"name": "D_Timbalai_1948",
"spheroid": {
"axis": 6377298.556,
"flatten": 0.003324448999999486,
"name": "Everest_Definition_1967",
"type": "SPHEROID_EVEREST_DEF_1967"
},
"type": "DATUM_TIMBALAI_1948"
},
"name": "GCS_Timbalai_1948",
"primeMeridian": {
"longitudeValue": 0,
"name": "Greenwich",
"type": "PRIMEMERIDIAN_GREENWICH"
},
"spatialRefType": "SPATIALREF_EARTH_LONGITUDE_LATITUDE",
"type": "GCS_TIMBALAI_1948",
"unit": "DEGREE"
},
"coordUnit": "METER",
"distanceUnit": "METER",
"epsgCode": 29873,
"name": "Timbalai_1948_RSO_Borneo_Meters",
"projection": {
"name": "",
"type": "PRJ_RECTIFIED_SKEWED_ORTHOMORPHIC"
},
"projectionParam": {
"azimuth": 53.31582047908623,
"centralMeridian": 115,
"centralParallel": 4,
"falseEasting": 2000000,
"falseNorthing": 5000000,
"firstPointLongitude": 0,
"firstStandardParallel": 0,
"scaleFactor": 0.99984,
"secondPointLongitude": 0,
"secondStandardParallel": 0,
"rectifiedAngle":53.13010235415598
}},
"datasetNames":["World:Capitals"],
"maxFeatures":1000,
"queryParameter":{"sortClause":null, "ids":null, "name":"Capital", "attributeFilter":"SMID%26lt;2", "groupClause":null, "linkItems":null, "joinItems":null, "fields":null}
}
返回 rjson 格式的操作结果表述如下:
{
"featureCount": 1,
"featureUriList": [],
"features": [{
"ID": 1,
"fieldNames": [
"SMID",
"SMX",
"SMY",
"SMLIBTILEID",
"SMUSERID",
"SMGEOMETRYSIZE",
"USERID",
"POP",
"CAPITAL_LO",
"CAPITAL_CH",
"COUNTRY_CH",
"CAPITAL_EN",
"COUNTRY_EN",
"COUNTRY",
"CAP_POP",
"CAPITAL"
],
"fieldValues": [
"1",
"-47.8977476573595",
"-15.792110943058866",
"1",
"0",
"16",
"0",
"2207718.0",
"Brasília",
"巴西利亚",
"巴西",
"Brasilia",
"Brazil",
"巴西",
"2207718.0",
"巴西利亚"
],
"geometry": {
"center": {
"x": 4379183.5624869745,
"y": 6771032.568773773
},
"id": 1,
"parts": [1],
"points": [{
"x": 4379183.5624869745,
"y": 6771032.568773773
}],
"prjCoordSys": null,
"style": null,
"type": "POINT"
}
}],
"totalCount": 1
}
对示例 featureResults 资源:http://supermapiserver:8090/iserver/services/data-es/rest/data/featureResults.rjson 执行 POST 请求,对es数据进行聚合查询来获取所查询的结果要素,请求体中的参数如下:
{
"getFeatureMode": "SPATIAL",
"datasetNames": [
"index-location:location"
],
"geometry": {
"id": 0,
"style": null,
"parts": [
1
],
"points": [
{
"y": 10,
"x": 100
}
],
"type": "POINT"
},
"spatialQueryMode": "CONTAIN",
"aggregations": {
"aggName": "aggName",
"aggType": "geohash_grid",
"aggFieldName": "aggFieldName",
"precision": 4,
"subAgg": null
}
}
返回 rjson 格式的操作结果表述如下:
{
"postResultType": "CreateChild",
"newResourceID": "b17260e8c3c9448e90238b97aef86ca6_32c57723bd4c4e1aab165d00d58ebe1a",
"succeed": true,
"newResourceLocation": "http://supermapiserver:8090/iserver/services/data-es/rest/data/featureResults/b17260e8c3c9448e90238b97aef86ca6_32c57723bd4c4e1aab165d00d58ebe1a.json"
}
返回跟 GET 请求一样的 HTTP 响应头,但是没有响应实体。可以在不必传输整个响应内容的情况下,获取包含在响应消息头中的元数据信息。元数据信息包括媒体类型,字符编码,压缩编码,实体内容长度等。
HEAD 请求可以用来判断 featureResults 资源是否存在,或者客户端是否有权限访问 featureResults 资源。通过对加.<format>的 URI 执行 HEAD 请求,还可以快速判断 featureResults 资源是否支持<format>格式的表述。