【发布时间】:2015-04-19 18:57:59
【问题描述】:
这似乎应该很简单,但我正在努力弄清楚。
在D3.js的地图投影上画圆很容易,例如
p = projection([-73.94,40.7]);
svg
.append("svg:circle")
.attr("cx", function(d, i) { return p[0]; }) //x position translated through projection function
.attr("cy", function(d, i) { return p[1]; }) //y position
.attr("r", function(d, i) { return 20; })
;
好的,但是如果不是将半径设置为像素值(如上所示,设置为 20 像素),我想将其设置为可以适当缩放到投影的距离值怎么办?
简而言之,这归结为我问,“这个投影中 20 公里的像素值是多少?”现在我知道这会因投影而有所不同——例如在墨卡托,一个 20 公里的圆在赤道附近(接近球形)与在两极附近(高度拉长)看起来非常不同。
D3.js 可以解决许多其他巧妙的投影问题,我惊讶地发现我无法在这里轻易地想出某种可接受的答案。有什么建议么?我在想,好吧,你可以计算一个圆圈的一些纬度/经度点,然后将它绘制成某种路径......这对于 D3.js 来说感觉非常异常笨重。有没有更简单的方法?
【问题讨论】:
-
您可以在圆上投影第二个点,并根据两个投影点的差确定半径。如果你知道半径是一个角度,你也可以使用
d3.geo.circle。 -
嗨 Lars — 在我的一生中,我无法弄清楚如何使用 d3.geo.circle 来做这件事,并且找不到对做这类事情有用的示例。我在下面找到了解决方法。
标签: javascript svg d3.js