MS RFC 73:支持改进的SVG符号¶
- 日期
2011/05/19
- 作者
扎克·詹姆斯(zjames at dmsolutions.ca)
- 作者
Yewondwossen Assefa(加州dmsolutions.ca的Yassefa)
- 最后编辑
2011/05/19
- 状态
提出
- 版本
MapServer 6.2
概述¶
与现有的mapserver符号类型相比,SVG格式有几个优点,但是现有的支持是有限的。我们建议使用libsvg cairo库实现完全支持,这是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
……一旦定义了符号,该符号就会像其他符号一样在 Mapfile 中使用。
向后兼容性问题¶
与现有 Mapfile 没有兼容性问题。符号集中已允许使用SVG符号类型。默认情况下,SVG符号支持将被禁用。启用它需要安装libsvg cairo库,可从*http://cairographics.org/snapshots/libsvg-cairo-0.1.6.tar.gz获得
受影响的文件¶
mapserver.h
mapdraw.c
mapdummyrenderer.c
maprendering.c
mapsymbol.c
mapsymbol.h
mapcairo.c
mapagg.cpp
configure.in
投票历史¶
+1来自丹尼尔、史蒂文、托马斯布、史蒂文、迈克尔斯、阿塞法伊