Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
如何手动将点要素转换为SVG坐标_Svg_D3.js_Geo_Map Projections - Fatal编程技术网

如何手动将点要素转换为SVG坐标

如何手动将点要素转换为SVG坐标,svg,d3.js,geo,map-projections,Svg,D3.js,Geo,Map Projections,我已经设置了一个d3.geo.path,如下所示 // Projection var projection = d3.geo.mercator().center([LONCENTER, LATCENTER]).scale(MAPSCALE); // Path for projection path = d3.geo.path().projection(projection); 我的任务是在世界地图上绘制饼图,我正在使用path.centroid()为大多数国家放置饼图,但是像美国和俄罗斯这样分

我已经设置了一个
d3.geo.path
,如下所示

// Projection
var projection = d3.geo.mercator().center([LONCENTER, LATCENTER]).scale(MAPSCALE);
// Path for projection
path = d3.geo.path().projection(projection);
我的任务是在世界地图上绘制饼图,我正在使用
path.centroid()
为大多数国家放置饼图,但是像美国和俄罗斯这样分布广泛的国家效果不佳(例如,美国饼在加拿大),因此我想手动为这些国家设置质心。这是我目前掌握的代码:

function getCentroid(country){
if(id === 840){
    return path({ "type": "Point", "coordinates": [-97, 40] });
// Russia
} else if(id === 643){
    return path({ "type": "Point", "coordinates": [49, 60] });
// France   
} else if(id === 250){
    return path({ "type": "Point", "coordinates": [3, 47] });
}
// default case where the standard centroid can be used
} else {
    return path.centroid(country.datum().geometry);
}
}

问题在于,对于默认情况(可直接嵌入SVG元素的
转换
属性),此函数返回类似于
[487.25078795735465,377.785536430209]
,但类似于
“M209.1249000904808338.6477191773128m0,4.5a4.5,4.5 0 1,1,10,-9a4.5,4.5 0 1,1,10,9z”
适用于上述特殊情况。在这些情况下,为了获得简单的x坐标和y坐标,我可以做些什么?我想我可以使用RegEx,但是这个问题没有更优雅的解决方案吗

只需将自定义点传递到投影,而不是路径,即

return projection([-97, 40]);

只需将自定义点传递到投影而不是路径,即

return projection([-97, 40]);