我试图在svg文件的多边形上绘制标签。我面临的问题是大致找出该多边形的中心放置标签,因为路径的坐标采用svg格式,需要进行解析。有没有更容易的方法来确定一个SVG多边形的中心(也许有人可以指出一个JavaScript库或片段)?我使用Raphael JavaScript库来操作svg,但它似乎没有超越标准的svg功能。将标签放在SVG路径的“中心”
回答
你可以尝试做的最简单的事情是通过取多边形中所有点的平均值来计算中心。它应该适用于所有的,但最不规则的多边形。我已经在我的程序中使用了相同的算法。
祝你好运。
你可以尝试做类似的多边形建议下面的内容近似,基于SVG DOM方法:
var totalPathLength = pathelm.getTotalLength();
var step = totalPathLength/100;
for(var dist=0; dist < totalPathLength; dist+=step)
{
var pt = pathelm.getPointAtLength(dist);
addToAverage(pt.x, pt.y);
}
我认为最简单的方法是使用路径元素的外接矩形框(pathelm的中心。 getBBox()),这比多边形建议更简单。
PS:'var bbox = p.getBBox(); var x = Math.floor(bbox.x + bbox.width/2.0); var y = Math.floor(bbox.y + bbox.height/2.0);'为我做了诀窍,thx。 – lwe 2011-02-17 12:00:36
谢谢@Iwe!那简单得多,我可以想象:) – Viet 2012-06-04 07:34:01
@我的评论应该是一个单独的答案。这是一个更简单,不同的方式,有不同的优点和缺点。下面是一个[** JSBIN演示,使用越南和加拿大的国家形状**](http://jsbin.com/orAzoFI/3/edit),显示了一些关键点和区别:没有任何方法保证中心将在并且Erik的方法将中心拉向路径的更多断裂/复杂/具有更高相对周长的部分。 – user568458 2013-10-08 16:14:49
通过计算宽和高
<svg width="447pt" height="559pt" viewBox="0 0 894 1118" version="1.1" xmlns="http://www.w3.org/2000/svg">
............
............
<text x="450" y="300" font-family="Verdana" font-size="15" fill="red" >
Text To Show
</text>
</svg>
- 1. 如何在SVG路径以外的区域放置标签?
- 2. 在每个路径中放置标签
- 3. 获取SVG路径的中心和VML
- 4. 缩放在拉斐尔2.1 svg路径
- 5. SVG:如何修正Bezier弯曲路径的偏心标记?
- 6. 组SVG路径,标签和连接器,用于鼠标悬停
- 7. 在中心点的Svg刻度路径(搏动)
- 8. 标记不会在SVG路径与D3
- 9. 将相对路径转换为svg中的相对路径
- 10. 放心路径不能在路径与数量访问元素
- 11. 绘制路径与SVG路径数据(SVG路径帆布路径)
- 12. D3.js - 更新svg路径的标题
- 13. 在SVG中放置一定角度的路径
- 14. 将标签放置在d3.js节点的中心
- 15. iOS - 将两个标签放在其超级视图的中心
- 16. Google Maps API v3使用缩放调整SVG路径图标
- 17. 如何在路径标记svg中指定坐标x和y?
- 18. 在svg路径中的Dashtype行
- 19. 在SVG中有相对点的路径
- 20. 将inkscape的SVG路径转换为Raphaëljs
- 21. Raphael路径中心
- 22. SVG路径,找出如何的路径是由SVG文件
- 23. 评论在SVG路径
- 24. SVG路径对准
- 25. SVG路径检测
- 26. SVG路径位置
- 27. 计算SVG路径
- 28. SVG路径元素
- 29. 标签中的路径显示
- 30. SVG中的缩放与中心形状
对不起,没有明确的措辞我的问题插入SVG和它里面的位置文本标签。问题更多的是如何从路径的d属性中获取坐标,这个格式为为了计算中心或找到一个JavaScript库,没有我根据svg规范解析属性。 –
sol
2009-11-07 05:17:11
首先要解决的第一个问题是首先将svg转换为多边形。我一直在寻找一个代码将svg路径转换为多边形,但找不到一个。也许必须挖掘svg项目的源代码 – ivanceras 2010-07-27 11:01:45