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


    作者:yyy

    前言

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

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

    一、制作并发布图例

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

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

    二、图例的应用

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

    1. {"layerLegends": [{
    2. "subLayerLegends": [
    3. {
    4. "subLayerLegends": [{
    5. "subLayerLegends": null,
    6. "layerType": "UGC",
    7. "legends": [{
    8. "imageData": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAJUlEQVQ4jWNMS0v7z0ABYAERVZk1ZBvARIntowaMGjBqABUNAABexQOygF8COgAAAABJRU5ErkJggg==",
    9. "values": null,
    10. "width": 16,
    11. "label": "Countries@testworld",
    12. "contentType": "image/png",
    13. "url": "http://localhost:8091/iserver/output/resources/testcountries/SYMBOLFILL/0_-58026551.png",
    14. "height": 16
    15. }],
    16. "maxScale": 0,
    17. "layerName": "Countries@testworld",
    18. "minScale": 0
    19. }],
    20. "layerType": "UGC",
    21. "legends": [{
    22. "imageData": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAVElEQVR42mNgGBRA3rP2CBD/x4LPKLtVyxJjwH88+D4QG1JiABquO0yhAbVHcBog51lrTW4ggg0gEKC4vYJmANHeGWYGHIFFD1kGwAAoGilKDwMCAG1C9/N/2myFAAAAAElFTkSuQmCC",
    23. "values": null,
    24. "width": 16,
    25. "label": "LayerGroup#1",
    26. "contentType": "image/png",
    27. "url": "http://localhost:8091/iserver/manager/static/Theme/image/layerGroup.png",
    28. "height": 16
    29. }],
    30. "maxScale": 0,
    31. "layerName": "LayerGroup#1",
    32. "minScale": 0
    33. },
    34. {
    35. "subLayerLegends": null,
    36. "layerType": "UGC",
    37. "legends": [{
    38. "imageData": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAJUlEQVQ4jWNMS0v7z0ABYAERPT0hZBvARIntowaMGjBqABUNAACQNAO/KgaADgAAAABJRU5ErkJggg==",
    39. "values": null,
    40. "width": 16,
    41. "label": "world@testworld",
    42. "contentType": "image/png",
    43. "url": "http://localhost:8091/iserver/output/resources/testcountries/SYMBOLFILL/0_858832806.png",
    44. "height": 16
    45. }],
    46. "maxScale": 0,
    47. "layerName": "world@testworld",
    48. "minScale": 0
    49. }
    50. ],
    51. "layerType": "UGC",
    52. "legends": [{
    53. "imageData": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAVElEQVR42mNgGBRA3rP2CBD/x4LPKLtVyxJjwH88+D4QG1JiABquO0yhAbVHcBog51lrTW4ggg0gEKC4vYJmANHeGWYGHIFFD1kGwAAoGilKDwMCAG1C9/N/2myFAAAAAElFTkSuQmCC",
    54. "values": null,
    55. "width": 16,
    56. "label": "LayerGroup",
    57. "contentType": "image/png",
    58. "url": "http://localhost:8091/iserver/manager/static/Theme/image/layerGroup.png",
    59. "height": 16
    60. }],
    61. "maxScale": 0,
    62. "layerName": "LayerGroup",
    63. "minScale": 0
    64. }]}

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

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

            那么对于其他情况下,又该如何自定义请求头方式来获取满足条件的图例信息呢?根据帮助文档描述,通过“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”对象,我们可以获取到指定图层集的图例信息,获取结果如下:

    三、注意事项

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

            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到最新版。

  • 相关阅读:
    RabbitMQ之消息可靠性投递解读
    软件测试 | 当面试时被问到“搭建过测试环境吗”, 身为小白要怎么回答?
    如何释放服务器内存
    JavaWeb__XML、http
    RocketMQ(4.9.4)学习笔记 - 安装部署
    关于账号安全的一些思考
    淘宝问问:电商AI,重新定义购物体验
    智慧路灯物联网解决方案
    SpringBoot底层原理----配置优先级/Bean管理/springboot原理
    shiroFilter配置详解
  • 原文地址:https://blog.csdn.net/supermapsupport/article/details/125484549