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来自丹尼尔、史蒂文、托马斯布、史蒂文、迈克尔斯、阿塞法伊