MS RFC 73:支持改进的SVG符号

日期

2011/05/19

作者

扎克·詹姆斯(zjames at dmsolutions.ca)

作者

Yewondwossen Assefa(加州dmsolutions.ca的Yassefa)

最后编辑

2011/05/19

状态

提出

版本

地图服务器6.2

概述

与现有的mapserver符号类型相比,SVG格式有几个优点,但是现有的支持是有限的。我们建议使用libsvg cairo库实现完全支持,这是cairo项目的一部分。

技术解决方案

除了开罗渲染器之外,所有渲染器都将通过添加的支持svg标志进行扩展,并设置为0。当请求SVG符号时,其他渲染器将触发对msrendersvgtopixmap的调用,该调用将解析引用的SVG文件(使用libsvg cairo),并使用cairo将SVG呈现到符号的pixmapbuffer中。完成此操作后,将使用普通的pixmap符号处理。

对于cairo渲染器,rendersvgsymbolcoir函数将使用libsvg cairo解析符号,但随后将使用cairo API直接呈现符号。

configure.in将被修改为检测--with libsvg cairo configure选项,并定义use_libsvg_cairo。

现有部分实施

如果采用此rfc,则现有的svg符号代码(参见https://github.com/MapServer/MapServer/issues/3343))将被取代并将被删除。

建议的实现将重用解析器的现有更改,但读取和呈现符号的方法将有所不同。它将使用现有的SVG解析器,该解析器包含更完整的SVG实现,并在cairo(pdf或postscript)输出格式的情况下直接传递SVG指令,以提高质量。此外,此版本将在使用agg栅格化之前预缩放和旋转SVG,以避免位图伪影。

使用实例

SYMBOL
  NAME "svgsymbol"
  TYPE SVG
  IMAGE "/path/to/symbol.svg"
END

……一旦定义了符号,该符号就会像其他符号一样在映射文件中使用。

向后兼容性问题

与现有映射文件不存在兼容性问题。SYMBOLSET中已允许使用SVG符号类型。默认情况下,将禁用SVG符号支持。启用它需要安装*https://www.cairographics.org/snapshots/libsvg-cairo-0.1.6.tar.gz提供的libsvg-cairo库

受影响的文件

  • mapserver.h

  • mapdraw.c

  • mapdummyrenderer.c

  • maprendering.c

  • mapsymbol.c

  • mapsymbol.h

  • mapcairo.c

  • mapagg.cpp

  • configure.in

票据ID

投票历史

+1来自丹尼尔、史蒂文、托马斯布、史蒂文、迈克尔斯、阿塞法伊