距离查询 |
距离查询的含义是:查找距离指定几何对象一定范围内的几何对象。需要设置 queryMode 为 DistanceQuery。
作为示例,首先构建一个简单几何对象(Geometry)如下:
//距离查询
function queryByDistance()
{
var geometry={};
//设置几何对象的 ID,仅作示意,暂没考虑获取唯一 ID 的情况
geometry.id=1001;
geometry.parts=[3];
geometry.points=[{x:12800000,y:4800000},{x:13000000,y:4800000},{x:12800000,y:5000000},{x:13000000,y:5000000}];
//geometry.style={};
geometry.type="REGION";
……
}
在 China 地图的 China_Province_pl@China图层里,查询距该几何对象距离为1万范围内的所有地物。注意:距离的单位,包括上面 geometry.points 的单位都与 China 地物的坐标系单位一致,这里为“米”。
基于以上简单几何对象构建距离查询代码如下:
//距离查询
function queryByDistance()
{
……
var commit=getcommit();
var uri="http://localhost:8090/iserver/services/map-china400/rest/maps/China/queryResults.json";
//设置请求体参数
var entry={};
//查询模式,这里是距离查询
entry.queryMode="DistanceQuery";
//属性查询参数
entry.queryParameters={"networkType":null,"startRecord":0,"queryParams":[{"orderBy":null,"ids":null,"name":"China_Province_pl@China","attributeFilter":null,"groupBy":null,"linkItems":null,"joinItems":null,"fields":["SMID","Name"]}],"customParams":null,"expectCount":100000,"queryOption":"ATTRIBUTEANDGEOMETRY"}
//空间几何对象
entry.geometry=geometry;
//距离,这里为1万米
entry.distance=10000;
commit.open("POST",encodeURI(uri),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);
//获取用作显示的 Div 容器。
var container = document.getElementById('container');
container.innerHTML="";
//判断查询是否成功
if(!response.succeed)
{
//查询失败
container.innerHTML+="<p>查询失败</p>";
container.innerHTML+="<p>错误码:"+response.error.code+"</p><p>错误原因:"+response.error.errorMsg+"</p>";
}else
{
//查询成功
container.innerHTML+="<p>查询成功</p>";
container.innerHTML+="<p>查询结果(queryResult)资源的 URI 为:"+response.newResourceLocation+"</p>";
}
}
这里的属性参数 queryParameters 的意义在于控制距离查询的结果,示例里设置了 fields 和 queryOption,指定了查询结果应包含的字段(SMID 和 NAME)和查询结果的类型(ATTRIBUTEANDGEOMETRY,既要有属性信息,也有空间信息)。
执行查询,得到地址类似 http://localhost:8090/iserver/services/map-china400/rest/maps/China/queryResults/5q5ocs7k_391bf1e7c7fb471d9e34f6519409463d.json 的 queryResult 资源,包含了符合条件(距离指定对象距离为1万米)的地物的 SMID 和 Name 字段值信息(在 queryParameters 的 fields 中设置),和地物的空间信息(Geometry)。
queryResult 资源的进一步解析请参见 queryResult 的解析。