如何手动将点要素转换为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]);