Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript d3js v5+;使用缩放使正方形质心居中_Javascript_D3.js_Topojson - Fatal编程技术网

Javascript d3js v5+;使用缩放使正方形质心居中

Javascript d3js v5+;使用缩放使正方形质心居中,javascript,d3.js,topojson,Javascript,D3.js,Topojson,我试图在地理实体的中心放置一个正方形。 我添加了橙色圆圈来标记质心的位置 当缩放范围=1时(无缩放),正方形的位置是正确的。 但是,如果缩放范围>1(缩放),则会平移正方形的位置。 我假设在定义正方形的位置时会出现问题 let ctrSquare = g.attr("class","ctr_square") .selectAll(".ctr_square") .data(featureCollectionZe.features) .enter() .appen

我试图在地理实体的中心放置一个正方形。 我添加了橙色圆圈来标记质心的位置

当缩放范围=1时(无缩放),正方形的位置是正确的。

但是,如果缩放范围>1(缩放),则会平移正方形的位置。

我假设在定义正方形的位置时会出现问题

let ctrSquare = g.attr("class","ctr_square")
    .selectAll(".ctr_square")
    .data(featureCollectionZe.features)
    .enter()
    .append("rect")
    .attr("x", (d)=>{return path.centroid(d)[0] - 7/2;})
    .attr("y", (d)=>{return path.centroid(d)[1] - 7/2;})
    .attr("width",7)
    .attr("height",7)
    .attr("fill","#0000ff")
    .attr("stroke","#0000ff");

这是我的代码:

问题是您希望保持矩形大小与当前比例无关。因此,在
.on(“zoom”,…)
期间,您可以修改矩形
宽度
高度

ctrSquare
    .attr("width",7/d3.event.transform.k)
    .attr("height",7/d3.event.transform.k);
考虑到这一点,其
x
y
位置的正确代码如下:

ctrSquare
    .attr("x",d => path.centroid(d)[0] - 7/d3.event.transform.k/2)
    .attr("y",d => path.centroid(d)[1] - 7/d3.event.transform.k/2)

所以只需将这些行添加到
.on(“缩放”,…)

中即可!感谢您的澄清:)