将标签放在SVG路径的"中心"

sol*_*sol 14 svg polygon path raphael

我正在尝试在svg文件的多边形上绘制标签.我面临的问题是大致找出这个多边形的中心来放置标签,因为路径的坐标是svg格式,需要进行解析.有没有更简单的方法来确定svg多边形的中心(也许有人可以指出一个JavaScript库或一个片段)?我正在使用Raphael javascript库来操纵svg,但它似乎没有超出标准的svg功能.

Eri*_*röm 11

您可以尝试以下近似值来执行类似于多边形建议的操作,基于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);
}
Run Code Online (Sandbox Code Playgroud)

我认为最简单的方法是使用路径元素的边界框(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. (11认同)
  • @Iwe 的评论应该是一个单独的答案。这是一种更简单、不同的方法,具有不同的优点和缺点。这是一个 [**JSBIN 使用越南和加拿大国家形状的演示**](http://jsbin.com/orAzoFI/3/edit) 显示了一些关键点和差异:这两种方法都不能保证中心位于形状,并且 Erik 的方法将中心拉向路径中更破碎/更复杂/具有更高相对周长的部分。 (2认同)

小智 0

您可以尝试做的最简单的事情是通过取多边形中所有点的平均值来计算中心。它应该适用于除最不规则的多边形之外的所有多边形。我在我的程序中使用了相同的算法,效果良好。

祝你好运。