SuperMap iServer11i新功能----图例的发布和使用

作者:yyy

前言

        地图图例是地图上表示地理事物的符号,是地图上各种符号和颜色所代表内容与指标的说明,集中于地图一角或一侧。图例应符合完备性和一致性的原则。图例具有双重任务,在编图时作为图解表示地图内容的准绳,用图时作为必不可少的阅读指南。它有助于用户更方便的使用地图、理解地图内容。

        目前在SuperMap iServer11i新版本中地图服务新增了legend子资源,支持一次获取地图所有图层的图例信息,也可以返回指定范围、指定图层的图例信息,接下来我们就通过试用SuperMap 11i Beta版本的系列产品来实现对图例的应用。

一、制作并发布图例

通过SuperMap iDesktop产品制作地图时我们在“图层管理器”中新建图层组,图层控制,修改图层风格、制作专题图等的方式来构建一个默认的或自定义图例地图;然后保存地图、保存工作空间即可。下图是通过SuperMap iDesktop 11i Beta版本制作的两个地图,其中一个是通过自定义图层组、图例、专题图的方式制作的地图;另一个是只设置了图层组,图例使用默认方式制作的地图,两个地图显示效果如下:

SuperMap iServer11i新功能----图例的发布和使用_第1张图片

SuperMap iServer11i新功能----图例的发布和使用_第2张图片

        当制作好地图后我们就可以通过SuperMap iServer 11i Beta版本将上述的工作空间发布为地图服务,然后在地图服务“支持以下操作”列表中会有一个“legend”图例子资源,当点击访问“legend”后我们就可以看到在“图层图例列表”中将当前地图中所有图层的图例对象都一一展示出来了,这里就可以发现当前展示出来的图例对象中的效果跟在iDesktop中“图层管理器”中的效果一致,都包含了图层组内容。

SuperMap iServer11i新功能----图例的发布和使用_第3张图片

SuperMap iServer11i新功能----图例的发布和使用_第4张图片二、图例的应用

        当我们得到图例信息后又该怎么去获取其具体样式并使用呢?下面就告诉大家如何通过请求来获取图例详细信息和样式内容。通过上述的服务地址,我们可以看到图例对象的请求头格式是有一个默认的固定内容,如:"地图服务地址"+"legend"+"?"+"​bbox=xmin,ymin,xmax,ymax";在通过更换图例对象的表述格式为rjson后,我们可以更清晰的看到在默认情况下一个图例对象的表述内容:

{"layerLegends": [{
    "subLayerLegends": [
        {
            "subLayerLegends": [{
                "subLayerLegends": null,
                "layerType": "UGC",
                "legends": [{
                    "imageData": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAJUlEQVQ4jWNMS0v7z0ABYAERVZk1ZBvARIntowaMGjBqABUNAABexQOygF8COgAAAABJRU5ErkJggg==",
                    "values": null,
                    "width": 16,
                    "label": "Countries@testworld",
                    "contentType": "image/png",
                    "url": "http://localhost:8091/iserver/output/resources/testcountries/SYMBOLFILL/0_-58026551.png",
                    "height": 16
                }],
                "maxScale": 0,
                "layerName": "Countries@testworld",
                "minScale": 0
            }],
            "layerType": "UGC",
            "legends": [{
                "imageData": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAVElEQVR42mNgGBRA3rP2CBD/x4LPKLtVyxJjwH88+D4QG1JiABquO0yhAbVHcBog51lrTW4ggg0gEKC4vYJmANHeGWYGHIFFD1kGwAAoGilKDwMCAG1C9/N/2myFAAAAAElFTkSuQmCC",
                "values": null,
                "width": 16,
                "label": "LayerGroup#1",
                "contentType": "image/png",
                "url": "http://localhost:8091/iserver/manager/static/Theme/image/layerGroup.png",
                "height": 16
            }],
            "maxScale": 0,
            "layerName": "LayerGroup#1",
            "minScale": 0
        },
        {
            "subLayerLegends": null,
            "layerType": "UGC",
            "legends": [{
                "imageData": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAJUlEQVQ4jWNMS0v7z0ABYAERPT0hZBvARIntowaMGjBqABUNAACQNAO/KgaADgAAAABJRU5ErkJggg==",
                "values": null,
                "width": 16,
                "label": "world@testworld",
                "contentType": "image/png",
                "url": "http://localhost:8091/iserver/output/resources/testcountries/SYMBOLFILL/0_858832806.png",
                "height": 16
            }],
            "maxScale": 0,
            "layerName": "world@testworld",
            "minScale": 0
        }
    ],
    "layerType": "UGC",
    "legends": [{
        "imageData": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAVElEQVR42mNgGBRA3rP2CBD/x4LPKLtVyxJjwH88+D4QG1JiABquO0yhAbVHcBog51lrTW4ggg0gEKC4vYJmANHeGWYGHIFFD1kGwAAoGilKDwMCAG1C9/N/2myFAAAAAElFTkSuQmCC",
        "values": null,
        "width": 16,
        "label": "LayerGroup",
        "contentType": "image/png",
        "url": "http://localhost:8091/iserver/manager/static/Theme/image/layerGroup.png",
        "height": 16
    }],
    "maxScale": 0,
    "layerName": "LayerGroup",
    "minScale": 0
}]}

         通过请求得到了图例的json格式内容,那下面就详细介绍下其每个参数都具体代表什么含义。其中url参数即为我们需要用到的图例图片。

Response Schema: application/json
{
	layerLegends	//Array of object各图层图例信息
		Array [
			layerName	//string 图层名称
			layerType	//string 图层类型
			minScale	//number 图层最小可见比例尺
			maxScale	//number 图层最大可见比例尺
			legends		//Array of object 图层的各图例项信息
				Array [
					label		//string 图例的标签
					imageData	//string 图例图片内容的base64表示。
					url			//string 图例图片的url
					contentType	//string 图例图片的类型,暂时只支持png
					width		//string 图例图片的宽度,默认16像素
					height		//string 图例图片的高度,默认16像素
					values		//object如果是分段专题图,values={start:startValue,end:endValue},分段范围默认是[start,end);如果是单值专题图,values={unique:uniqueValue}
				]
			subLayerLegends LayerLegend[]	//各子图层的图例。subLayerLegends 的类型是 LayerLegend[]。
		]
}

        那么对于其他情况下,又该如何自定义请求头方式来获取满足条件的图例信息呢?根据帮助文档描述,通过“mapLegend”资源表示地图各图层图例信息的集合来获取地图各图层图例信息。 

path Parameters(路径参数)

mapname

(必填)(string)

地图名 

query Parameters(请求参数)

bbox (string)

查询与此矩形框有交集的图层的图例,当 layers 参数未设置时,bbox 是必填参数。格式:bbox=xmin,ymin,xmax,ymax

layers (string)

图层过滤,当 bbox 参数未设置时,layers 是必填参数。语法:layers=[show|hide]:[layerName]@@[layerGroupName]@@[mapName]。show 表示只返回指定图层的图例,hide 表示指定图层图例不返回,其他查询出来的图层图例都返回。支持多个图层,各图层间以英文逗号间隔。如 show:country@World@@World,表示只返回 World 地图 country@World 图层的图例。

transparent (boolean)

图例图片是否背景透明。默认为true。

returnVisibleOnly (boolean)

是否只返回当前地图范围内可见要素的图例。默认为 false。

mapScale (number)

地图比例尺。当 returnVisibleOnly 为 true 时,mapScale 是必填参数。

width (integer)

返回图例的宽度。默认 16 像素。
height (integer) 返回图例的高度。默认 16 像素。

        通过上述的请求头请求参数,我们就可以自定义请求内容,来返回满足自定义要去的图例信息了,比如这里我们返回指定图层"world"和"LayerGroup#1中的Countries"的两个图例,那么请求头的内容就应该是这样的:

http://localhost:8091/iserver/services/map-testmap/rest/maps/testcountries/legend?layers=show:world@testworld@@LayerGroup@@testcountries,Countries@testworld@@LayerGroup.1@@LayerGroup@@testcountries

其中“world@testworld@@LayerGroup@@testcountries”和“Countries@testworld@@LayerGroup.1@@LayerGroup@@testcountries”为地图子图层集中的内容,我们可以通过在"layers"对象中获取到,通过自定义“layers”对象,我们可以获取到指定图层集的图例信息,获取结果如下:

SuperMap iServer11i新功能----图例的发布和使用_第5张图片

三、注意事项

在图例使用过程中需要注意的内容:

        1、在11i beta之前的版本中,我们也可以通过在地图服务的layers对象中获取到单个图层的图例,如:http://localhost:8091/iserver/services/map-testmap/rest/maps/testworld/layers/Capitals@testone@@LayerGroup.1@@LayerGroup@@testworld/legend,其中“Capitals@testone@@LayerGroup.1@@LayerGroup@@testworld”为图层名,但由于这里只能一次获取到一个图例,而且对于专题图图层来说也并不能获取到某个具体值或范围的图例;

        2、对于图例来说,只有工作空间发布的地图服务的图例对象才有内容,因为图例信息是保存在地图中的,对于瓦片发布的地图服务,其图例为空;

        3、在图层图例列表中,每个图例的显示顺序和层级都是和地图在iDesktop的图层管理器中显示的一致,如果显示有问题,请更新iServer到最新版。

你可能感兴趣的:(云GIS,云GIS,图例)