获取子图层列表

发送反馈


SuperMap iServer 中有子图层的概念,图层和子图层都是 layer 资源。

对 layer 资源执行 GET 请求,可以获取图层的表述,GET 请求无参数。服务器端返回的响应结构中包含子图层的信息(请参见 REST API 中 layer 资源页面),subLayers 字段表示该图层包含哪些子图层。

在上一节,已经获取了 China 地图中的图层列表,其中有 China 图层,要想获取 China 图层的子图层,可以对 China 图层资源执行 GET 请求,layer 资源的 URI 为 layers 资源的 URI 后加上“/”,再加上图层名,例如 China 图层的 URI 如下:http://localhost:8090/iserver/services/map-china400/rest/maps/China/layers/China.json

获取 China 图层子图层的代码如下:

//获取 China 图层的子图层列表

function getSubLayers()

{

    var commit=getcommit();

    var uri="http://localhost:8090/iserver/services/map-china400/rest/maps/China/layers/China.json";

    

    commit.open("GET",encodeURI(uri),false,"","");

    commit.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

    commit.send(null);

    

    //解析从服务器端返回的 json 字符串,解析为一个 JavaScript 对象。

    var response = json_parse(commit.responseText, null);       

    //获取用作显示的 Div 容器。

    var container = document.getElementById('container');

    container.innerHTML="";

    //判断该图层有没有子图层

    if(toJSON(response.subLayers)==="{}")

    {

        //当响应中的 subLayers 字段为{}时,该图层没有子图层。

        container.innerHTML +='<br><p>图层'+response.name+'没有子图层。</p>'

    }else

    {

        container.innerHTML +='<br><p>图层'+response.name+'的子图层有:</p>'

        //子图层的数目

        var len=response.subLayers.layers.length;

        for(var j=0;j<len;j++)

        {

            container.innerHTML += '<li>图层名:'+response.subLayers.layers[j].name+",标题:"+response.subLayers.layers[j].caption+'</li>' ;

        }

    }

}

在 SuperMap iServer 中,专题图也作为一个 layer 资源而存在。

子图层的 URI 命名规则:【layers 资源的 URI】+‘/’+【子图层名】+‘@@’+【父图层名】+【URI 后缀】,例如 China_Province_R@China400  为图层 "China" 的一个子图层,则它的 URI 就是:

http://localhost:8090/iserver/services/map-china400/rest/maps/China/layers/China_Province_R@China400@@China.json

对该 URI 执行 GET 请求就可以获得子图层 China_Province_R@China400的表述。