【问题标题】:d3.js extract coordinates of SVG path elementsd3.js 提取 SVG 路径元素的坐标
【发布时间】:2017-11-26 18:29:15
【问题描述】:

在这个问题上花了很长时间没有成功后,我决定在这里发布我的(第一个!)问题。

对于一个项目,我使用 topojson 来绘制地图的一部分。在我的 SVG 中,我有一些包含一些点的组(我使用 geojson.io 工具放置了这些点)。

地图如下所示:plotted map

代码结构如下:

<svg width='1300' height='900'>
    <g class="gate" id="D5">
        <path d="M645.3426080089994,434.9821086442098m0,4.5a4.5,4.5 0 1,1 0,-9a4.5,4.5 0 1,1 0,9z"></path>
    </g>

    <g class='gate' id='d4'>
        <path d="M605.3552137160441,383.2755208062008m0,4.5a4.5,4.5 0 1,1 0,-9a4.5,4.5 0 1,1 0,9z"></path>
    </g>
</svg>

我想做的是根据这些点的确切位置的某些条件附加一些 SVG。现在,虽然我知道如何附加 SVG,但在提取地图上点的坐标时遇到了麻烦。我想附加的 SVG 必须放在地图中的点上。但是,例如,当我将一个圆附加到组时,我输入的坐标不被认为是相对于该点的,而是相对于整个 SVG 区域的绝对坐标。圆圈在左上角结束,而不是在实际点上。

我试图提取每个点的坐标以便使用这些数据进行绘图,但我还没有成功。我设法通过以下方式获取节点:

d3.selectAll('#D5').select('path').node()

返回:

<path d="M605.3552137160441,383.2755208062008m0,4.5a4.5,4.5 0 1,1 0,-9a4.5,4.5 0 1,1 0,9z"></path>

当我查看路径对象内部时,我看到 __data__ 元素的深处有一些坐标,但我无法提取这些坐标。

如果我在开始时定义了点的坐标,这个问题就不会成为问题。但是由于这是topojson,所以整张图只是路径元素的组合。

如何在不事先明确定义坐标的情况下在点上绘制 SVG?如果需要更多信息,请告诉我。

谢谢!

【问题讨论】:

    标签: javascript d3.js svg topojson


    【解决方案1】:

    你要找的是getBBox()函数

    d3.selectAll('#D5').select('path').node().getBBox()
    // { x: 640.8425903320312, y: 430.48211669921875, width: 9, height: 9 }
    

    https://jsfiddle.net/7zahj9gt/

    【讨论】:

    • 哇,非常感谢,这正是我想要的!
    猜你喜欢
    • 1970-01-01
    • 2014-08-03
    • 2012-08-20
    • 2020-04-22
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 2011-09-25
    相关资源
    最近更新 更多