距离查询

发送反馈


距离查询的含义是:查找距离指定几何对象一定范围内的几何对象。需要设置 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 的解析