MS RFC 29:动态图表功能

日期

2007/06/15

作者

丹尼尔·莫里塞特

联系

在mapgears.com的dmorissette

最后编辑

2007/07/31

状态

通过(2007/07/05)-完成(2007/07/09)

版本

MAPServer 5

概述

此RFC建议通过将Thomas Bonfort在Ticket_1800中提出的补丁集成,在MapServer 5.0中添加简单的动态图表功能。

注意:这已经实现并运行(作为票据1800中的补丁)。这个RFC将记录新特性,并(希望)将其包含在MapServer5.0版本中。

技术解决方案

创建了一个新的图表层类型,初始实现将支持饼图和条形图。

处理指令用于设置层的图表类型(饼图或条形图)和图表大小,

然后,对于图表中的每个饼片或条形图,我们都有一个类。在每个类中,样式颜色定义饼图扇区或条的颜色,样式大小用于设置每个饼图扇区或条的相对大小(值)。当然,结合属性绑定,这是非常有用的。例如

例子:

LAYER
    NAME "Ages"
    TYPE CHART
    CONNECTIONTYPE postgis
    CONNECTION "blabla"
    DATA "the_geom from demo"
    PROCESSING "CHART_TYPE=pie"
    PROCESSING "CHART_SIZE=30"
    STATUS ON
    CLASS
      NAME "Population Age 0-19"
      STYLE
        SIZE [v1006]
        COLOR 255 244 237
      END
    END
    CLASS
      NAME "Population Age 20-39"
      STYLE
        SIZE [v1007]
        COLOR 255 217 191
      END
    END
    CLASS
      NAME "Population Age 40-59"
      STYLE
        SIZE [v1008]
        COLOR 255 186 140
      END
    END
END

在上面的示例中,如果给定形状的v1006=1000、v1007=600和v1008=400,则每个类的实际饼图切片将分别为总饼图大小的50%、30%和20%。如果我们制作条形图,那么这些值将表示条形图的相对高度,最大值(最高条形图)为图表高度的100%。

票据1800的以下附件包含由上述图层定义生成的示例地图:

https://trac.osgeo.org/mapserver/attachment/ticket/1800/chart-test.jpg

层的图例与往常一样,每个类生成一个颜色样本。

问题和限制

  • 初始实现只支持gd输出格式。然而,ThomasBonfort已经提出,一旦有了对agg版本的支持,就可以实现它。这被认为是在本RFC范围之外的未来增强。更新2007/09/06:agg渲染器也支持图表渲染。

  • 我们应该使用特殊关键字而不是处理参数来指定图表类型和大小吗?

  • 每个类的值都取自相应样式的大小,这在语义上很难理解(但这样可以避免我们创建新的关键字)。

MapScript含义

新的图表类型(常量)将通过mapscript公开。没有其他mapscript含义。

受影响的文件

map.h          (new MS_LAYER_CHART constant)
mapfile.c
maplexer.l     (new CHART keyword)
mapdraw.c      (hooks to call chart rendering code)
mapchart.c     (implementation of chart rendering)
maplegend.c    (add case for chart layer type)
Makefile.in    (addition of mapchart.o)
makefile.vc    (addition of mapchart.obj)

注:

票据1800中的补丁还包含对mappostgis.c和mapmygis.c的更改,以将图层类型图表与多边形处理相同,但我不确定为什么或是否需要对其他数据源执行相同的操作。这需要在发布前进行进一步的审查。

向后兼容性问题

一个也没有。这是一个新功能。

臭虫识别码

未来的增强功能:

文档

投票历史

2007/07/05投票完成:

+1名来自丹尼尔、史蒂文、阿塞菲

审查期间的问题/意见

  • 问:这是否假定只输入多边形数据类型?是否也支持线条和点数据源?

    答:当前的实现只适用于多边形数据源。我想我也可以很容易地将它扩展到点数据源上。

    不过,我不确定线路数据源。我想我们可以像处理注释层那样,使用mspolyLineLabelPoint()来确定图表的位置。

    票证#2145已经开通,以跟踪这一增强:https://github.com/MapServer/MapServer/issues/2145

  • 问:我们可以支持chart_size=[size]中的属性绑定吗?这将允许您显示一个点上的点击的相对大小,并让图表显示在楔子中所占的百分比。

    答:虽然这将是一个很好的功能,但我们将保留它,作为未来版本的潜在增强。见门票#2136:https://github.com/MapServer/MapServer/issues/2136