我正在尝试使用拉斐尔绘制这个欧洲的 svg 。对于 svg 中的每条路径,我已经对其进行了解析并执行了:r.path([countrypath])
。这行得通,但问题是它是巨大的。例如,某些路径看起来M 11689.234, 6005.2561...
甚至无法适应 500x500 的画布。我该如何调整这个大小?拉斐尔的比例/翻译似乎不起作用,或者我不知道如何使用它。我注意到在 SVG 中每个路径都有transform="translate(5.875e-4,7.538462e-5)"
我需要以某种方式更改视图框吗?或者在触及拉斐尔之前以某种方式更改 svg 路径?
5 回答
you can use scale(Xtimes,Ytimes,centreX,centreY)
where Xtimes,Ytimes are the proportion reduction if you select 0.2 the images would be reduced to 1/5th
and
centreX, centreY are relative coordinates where you should select 0,0 so that all paths/parts of svg are scaled down uniformly and relatively
if you select scale(0.2,0.2,0,0) your image would be properly reduced to 1/5th
你有两个选择,要么使用我所做的,使用 .transform(" transform string ") 来缩放路径,变换字符串可以是 sww,hh,xx,yy 其中 ww 和 hh 是你想要缩放的程度小路。
.transform("s0.25,0.25,0,0");
paper.scaleAll(n);
其中 n 是您想要按比例缩放整张纸的数量。首先在页面中创建路径,然后将纸张对象缩放一半
paper.scaleAll(0.5);
您可以在以下链接中找到 Scale.Raphaeljs 库的库和示例: Scale Raphael 库
实际上,我昨天从世界上挑选了一个相当大的 SVG,并通过 SVGTOHTML 转换器将其输入。您将找到该工具和相关信息 @ http://www.irunmywebsite.com/raphael/svgsource.php
我为 Raphael @ http://www.irunmywebsite.com/raphael/raphaelsource.php设置了一大堆资源, 其中你会发现 Zeven 提供的比例 pluton 包裹的世界地图!
20 分钟的练习提供了这个... http://www.irunmywebsite.com/raphael/colourmap2.php
希望这对您或将来遇到类似问题的人有所帮助。另请注意,您可以在 SVG 编辑器中简化路径并在将它们放入 SVGTOHTML 转换器之前对其进行缩放。很多时候地图可以绘制到极端细节,但简化它们会大大减少路径长度。
翻译这么少似乎有点浪费,反正它是~0,我怀疑如果你去掉看起来像那样的变换属性,你会看到很大的不同。
是的,更改 viewBox 可以使其适合所有支持 SVG 的查看器中的任何内容,但 raphael 本身不支持 viewBox(您必须自己提供一些 VML 后备)。
预处理路径数据以适合您的特定用途(无论如何这可能是一个好主意,它总是有助于降低文件大小,维基百科地图通常非常大)或使用 raphael 的 scale 函数将路径缩放到适当的大小。
更新:Raphaël v2.0 及更高版本支持 viewBox(通过setViewBox 方法)。
您可以使用Raphael 属性“翻译”,它采用 x,y 增量。IE:
r.path([countryPath]).attr({translation:'-11689, -6005'});
为了使其对多个路径更可重用,您可以从 svg 路径中的 M 解析 x 和 y 值。当我这样做时,结果证明我不希望我的路径正好在 0,0 上,因为这也将它发送到了画布上——可能需要根据元素的高度和宽度进行一些调整。