【问题标题】:How to get a path centroid d3如何获得路径质心d3
【发布时间】:2016-02-04 00:58:22
【问题描述】:

我不能使用 .centroid() 方法,因为它返回 [NaN,Nan]。 我不知道什么是正确的数据格式。

    var pathh = d3.geo.path();
    d3.selectAll("path.line")
        .each(function (d, i) {
        var centroid = pathh.centroid(d);
        console.log('Centroid at: ', d,+ centroid[0] + ', ' + centroid[1]);
     });

我的数据格式是: 一个对象是多边形的一个点(顶点)

0: Object
   area_id: "IVP001"
   vertex_id: "37451"
   x: "100"
   y: "100"

1: Object
   area_id: "IVP001"
   vertex_id: "37452"
   x: "150"
   y: "120"

2: Object
   area_id: "IVP001"
   vertex_id: "37453"
   x: "50"
   y: "120"

有一个包含多边形顶点对象的父数组。 我想获取多边形的每个质心,并在此处附加一个文本。

我的一半正确的解决方案,但它不是那么准确,而且它丑陋......

    var areas = cg.selectAll("g.area-group")
        .data(data);    

    var ag = areas
            .enter()
            .append("g")
            .attr("class","area-group")
            .attr("data-area-id",function(d) {return d[0].area_id; });

    var area_path = ag.insert("path")
            .attr("class", "line")
            .call(dragArea);

        d3.selectAll("text").remove();




var area_id_text = areas.append("text")
            .attr("dx", function(d) {
                    var text_x = 0;
                    $.each(d, function( index, value ) { text_x += +value.x;});
                    return text_x/d.length;
              })
            .attr("dy", function(d) {
                    var text_y = 0;
                    $.each(d, function( index, value ) { text_y += +value.y; });
                    return text_y/d.length;
              })
            .text(function(d) {return d[0].area_id; })
        ;

【问题讨论】:

    标签: d3.js format centroid


    【解决方案1】:

    你可以这样做:

    //calculate the centroid using the bbox
    function getMyCentroid(element) {
        var bbox = element.getBBox();
        return [bbox.x + bbox.width/2, bbox.y + bbox.height/2];
    }
    
    d3.selectAll("path.line")[0].forEach(function (d, i) {
       console.log(getMyCentroid(d));
    });
    

    【讨论】:

    • 我试过了,但是 getBBox() 函数也返回 NaN,NaN。
    • 我想知道,getBBox/centroid 函数的正确输入格式是什么。我尝试使用 [10,10,20,20,30,30] 数组参数,但不起作用。
    • 什么是 10,10 20 30 ...您应该传递路径元素
    猜你喜欢
    • 2021-02-07
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 2022-11-21
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多