获取子图层列表 |
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的表述。