<map_uri>/queryresults[.<format>]
queryResults 资源表示查询结果的集合,通过该资源可以对地图({mapName})进行 SQL 查询、距离查询、空间查询、最近地物查询、范围查询以及海图查询等。
关于本资源的相关使用示例请参考:SQL 查询、关联表 SQL 查询、距离查询。
支持的方法:
支持的表述格式:RJSON、JSON、HTML、XML。
对如下 URI 执行 HTTP 请求,以 rjson 输出格式为例加以说明,其中,supermapiserver 是服务器名,“世界地图”是地图名({mapName}),URI 表示一个“世界地图” 的查询集合。
http://supermapiserver:8090/iserver/services/map-world/rest/maps/世界地图/queryResults.rjson
获取查询结果的集合,即已创建的 queryResult 资源表述集合。
名称 | 类型 | 含义 |
_cache | boolean | 【可选参数】
是否使用缓存,默认为 true。如果为 false,则关闭所有缓存。 |
对 queryResults 资源执行 GET 请求得到的是 queryResult 资源信息的集合,集合中的每一个元素的结构如下:
字段 | 类型 | 说明 |
name | String | queryResult 资源的名称。 |
path | String | queryResult 资源的访问路径。 |
resourceConfigID | String | 资源配置项 ID。 |
resourceType | String | 资源类型。 |
supportedMediaTypes | String[] | 数据源资源支持的表述的媒体类型。 |
在一次成功的查询(即对 queryResults 成功执行 POST 请求)后,queryResults 资源里保存了查询结果的信息,对 queryResults 资源执行 GET 请求,返回 rjson 格式的资源描述如下:
[{
"name": "1",
"path": "http://supermapiserver:8090/iserver/services/map-world/rest/maps/世界地图/queryResults/1.rjson",
"resourceConfigID": null,
"resourceType": "ArithResultResource",
"supportedMediaTypes": [
"application/xml",
"text/xml",
"application/json",
"application/rjson",
"text/html"
]
}]
按照给定参数创建一个地图查询的结果资源,其中 returnContent 必须包含在 URI 中。
通过对 queryResults 资源执行 POST 请求,可以进行 SQL 查询、距离查询、空间查询、最近地物查询、范围查询等,由 queryMode 参数来指定进行的是哪种查询模式,不同查询模式用到的查询参数也不一样。其中,URI 中的参数为可选参数。
URI 中的参数如下:
名称 | 类型 | 含义 |
returnContent | boolean | 是否立即返回新创建资源的表述还是返回新资源的 URI,默认为 false。
如果为 true,则直接返回新创建资源,即查询结果的表述。如果为 false,则返回的是查询结果资源的 URI。 |
returnCustomResult | boolean | 是否返回查询结果的 Bounds 信息,当 returnContent=false 时有效。
如果为 true,返回查询结果的 Bounds 信息(响应结构中的 customResult 字段)。 如果为 false,则不返回 Bounds 信息。默认为 false。 |
其中,对 queryResults 执行 POST 请求时,如果 returnContent 为 true,将直接得到查询结果资源(queryResult)的表述;如果 returnContent 为 false,将得到结果资源(queryResult 资源)的 URI,对该结果资源执行 GET 操作,可得到需要的结果。
请求体中的参数如下:
名称 | 类型 | 含义 |
queryMode |
QueryMode | 【必选参数】
查询的模式,有 SQL 查询、距离查询、空间查询、最近地物查找、范围查询以及海图查询等几种类型。其中:
|
queryParameters | QueryParameterSet | 【必选参数】 属性查询的参数集合。 包含了查询参数数组(queryParams)、期望返回的结果记录数(expectCount)、查询起始记录位置(startRecord)、查询结果选项对象(queryOption)等。 其中,查询参数数组包含要查询的数据集或图层的名称(name)、查询字段数组(fields)、SQL 查询属性过滤条件(attributeFilter)、分组条件(groupBy)、查询 id 数组(ids)、连接查询项数组(joinItems)、关联外部表(linkItems)、SQL 查询排序的字段(orderBy)等信息。 注意:
|
geometry | Geometry | queryMode 为距离查询或空间查询时必选。
空间对象信息。geometry 的投影坐标系与地图坐标系相同。 |
bounds | Rectangle2D | queryMode 为范围查询时必选。
查询指定图层落在该范围内的记录。bounds 的投影坐标系与地图坐标系相同。 |
spatialQueryMode | SpatialQueryMode | queryMode 为空间查询时必选。
空间查询操作模式。 有包含、交叉、分离、重合、相交、叠加、 邻接、被包含等。 |
distance | double | queryMode 为距离查询或最近地物查询时必选,distance 的单位与地图坐标单位相同。
距离查询时,表示距离地物的距离。最近地物查询时,表示距离的容限。 |
名称 | 类型 | 含义 |
queryMode | QueryMode | 海图查询,有两种模式:海图属性查询(ChartAttributeQuery)和海图范围查询(ChartBoundsQuery)。 |
chartLayerNames | String | 待查询的图层名。 |
chartQueryParameters | ChartQueryParameterSet | 海图查询参数集合(数组)。 |
bounds | Rectangle2D | 指定的查询范围,当查询模式为 ChartBoundsQuery 时必选。 |
对 queryResults 资源执行 POST 请求,进行查询,创建查询结果资源。
在 returnContent=false 的情况下,返回操作结果的表述如下:
字段 | 类型 | 说明 |
succeed | boolean | 查询是否成功。 |
newResourceID | String | 查询结果资源的 ID。 |
postResultType | postResultType | POST 请求的结果类型。 说明 POST 请求对目标资源的影响,即处理结果是什么样的。 |
newResourceLocation | String | 创建的新资源的 URI。 |
customResult | Object | 返回查询结果的 Bounds 信息。
如果地图设置了动态投影,返回的 Bounds 的投影坐标系与地图坐标系相同。 如果地图没有设置动态投影,返回的 Bounds 的投影坐标系与查询结果所在的数据集的投影坐标系相同。 |
在 returnContent=true 的情况下,返回的表述中没有 newResourceLocation 字段,取而代之的是 newResourceLocation 所标识的资源,即 queryResult 资源的表述。请参见 queryResult 资源表述的结构。
注意,queryResult 的表述中,查询记录集中的字段信息由 Recordset 中的 fields 字段记录。每个 Feature 中的 fieldNames 字段均为 null。
对 queryResults 资源:http://supermapiserver:8090/iserver/services/map-world/rest/maps/世界地图/queryResults.rjson?returnCustomResult=true,执行如下参数的 POST 请求,对 World 地图进行 SQL 查询:
{
"queryMode": "SqlQuery",
"bounds": {
"leftBottom": {
"x": 0,
"y": 0
},
"rightTop": {
"x": 100,
"y": 100
}
},
"distance": 1,
"queryParameters": {
"queryParams": [{
"attributeFilter": "SMID %26gt; 0",
"name": "ContinentLabel@World"
}],
"startRecord": 0,
"expectCount": 20,
"networkType": "LINE",
"queryOption": "ATTRIBUTEANDGEOMETRY"
},
"spatialQueryMode": "INTERSECT"
}
返回 rjson 格式的资源描述如下:
{
"succeed": true,
"newResourceID": "iypwfdzf_91c24c622e9641e18a808ae8a89f698b",
"postResultType": "CreateChild",
"customResult": {
"rightTop": {
"y": 55.98430295074347,
"x": 140.7362260537166
},
"leftBottom": {
"y": -82.49592439558907,
"x": -119.53556537446983
},
"bottom": -82.49592439558907,
"left": -119.53556537446983,
"right": 140.7362260537166,
"top": 55.98430295074347
},
"newResourceLocation": "http://supermapiserver:8090/iserver/services/map-world/rest/maps/世界地图/queryResults/iypwfdzf_91c24c622e9641e18a808ae8a89f698b.json"
}
对 "http://supermapiserver:8090/iserver/services/map-world/rest/maps/世界地图/queryResults/1.rjson” 执行 GET 请求,即获取查询的具体结果。请参见 queryResult 的 GET 请求。
请求体示例:
{
"queryMode": "BoundsQuery",
"bounds": {
"leftBottom": {
"x": 112.35,
"y": 34.6
},
"rightTop": {
"x": 112.4,
"y": 34.62
}
},
"distance": 1,
"queryParameters": {
"queryParams": [{
"attributeFilter": "SMID > 0",
"name": "testCAD@test1"
}],
"startRecord": 0,
"expectCount": 20,
"networkType": "LINE",
"queryOption": "ATTRIBUTEANDGEOMETRY"
},
"keywords": "",
"spatialQueryMode": "INTERSECT"
}
响应结果示例:
{
"customResult": {
"bottom": 34.54666099978054,
"left": 112.26249133678498,
"leftBottom": {
"x": 112.26249133678498,
"y": 34.54666099978054
},
"right": 112.48668999981291,
"rightTop": {
"x": 112.48668999981291,
"y": 34.72305325426654
},
"top": 34.72305325426654
},
"newResourceID": "62599fc42ee044c7acea57b5e8d9bc87_9bfbea897ac3473fa75728ed0880f8fb",
"newResourceLocation": "http://server:8090/iserver/services/map-henan/rest/maps/luoyang/queryResults/62599fc42ee044c7acea57b5e8d9bc87_9bfbea897ac3473fa75728ed0880f8fb.rjson",
"postResultType": "CreateChild",
"succeed": true
}
返回跟 GET 请求一样的 HTTP 响应头,但是没有响应实体。可以在不必传输整个响应内容的情况下,获取包含在响应消息头中的元数据信息。元数据信息包括媒体类型,字符编码,压缩编码,实体内容长度等。
HEAD 请求可以用来判断 queryResults 地图资源是否存在,或者客户端是否有权限访问 queryResults 地图资源。通过对加.<format>的 URI 执行 HEAD 请求,还可以快速判断 queryResults 地图资源是否支持<format>格式的表述。