queryResult 解析 |
queryResult 是查询结果资源,保存对地图查询的一个结果,在对 queryResults 执行 POST 请求的时候被创建,URI 也是由创建的时候服务器决定的。
queryResult 资源不仅支持 json、rjson、html、xml 格式的表述,当查询结果中包含几何实体信息的时候(由查询参数 queryParameters 中的 queryOption 决定),还支持图片格式(png、bmp、jpeg、gif)的表述。
对 queryResult 资源执行 GET 请求,可以获取其中的信息(参见 REST API 中 queryResult 资源页面)。以距离查询中查询的结果为例,其中包含属性信息和几何对象信息,获取查询结果的数目,并把所有字段的值列出来,代码如下:
//解析 queryResult 资源
function getQueryResult()
{
var commit=getcommit();
//距离查询结果的 URI,由文本框的 id 参数 queryURI 传入
var uri=document.getElementById("queryURI");
//设置请求体参数
var entry=null;
commit.open("GET",encodeURI(uri.value),false,"","");
commit.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
commit.send(toJSON(entry));
//解析从服务器端返回的 json 字符串,解析为一个 JavaScript 对象。
var response = json_parse(commit.responseText, null);
//记录集数目
var resordserNum=response.recordsets.length;
//字段数目
var fieldcount;
//记录集中的地物数目
var count;
//获取用作显示的 Div 容器。
var container = document.getElementById('container');
container.innerHTML="";
container.innerHTML+="共有 "+ resordserNum+" 个记录集:";
for(var i=0;i<resordserNum;i++)
{
container.innerHTML+="<p>记录集"+ (i+1)+":</p>";
fieldcount=response.recordsets[i].fieldCaptions.length;
count=response.recordsets[i].features.length;
for(var j=0;j<count;j++)
{
container.innerHTML+="地物"+(j+1)+":";
for(var k=0;k<fieldcount;k++)
{ container.innerHTML+=response.recordsets[i].fields[k]+"="+response.recordsets[i].features[j].fieldValues[k]+",";
}
container.innerHTML+="<br>";
}
}
}
其中,queryResult 中记录集(Feature)的数目跟查询参数 queryParameters 中的“"queryParams":[{…}]”集合的元素个数一致,即有多少组查询数据集的查询参数,就有多少个记录集。在距离查询的查询参数 queryParameters.queryParams 中,只有一组查询数据集的参数(即{"sortClause":null,"ids":null,"name":"China_Province_R@China400","attributeFilter":null,"groupClause":null,"linkItems":null,"joinItems":null,"fields":["SMID","Name"]})。所以查询结果只有一个记录集,结果如下: