【发布时间】:2017-08-14 23:54:34
【问题描述】:
(假设现有的投影/topojson)
我要做的是在半径 (r) 以英里为单位的点 ([long,lat]) 创建一个圆。我知道这有一个 d3.geo 函数,但经过一番考虑,我认为它与我的特定应用程序不太兼容。
所以现在我正在寻找使用原生 svg circle 解决方案,其中 cx 和 cy 是纬度和经度,r 是以英里为单位的半径。我知道 cx 和 cy,但我不知道如何确保 r 是 15 英里。所以主要是如何确保在像素空间中绘制半径时以英里为单位。一定有办法使用projection 函数来设置半径的适当比例。但我在实践中还没有看到过。
另外我应该指出,我的投影是动态的,取决于用户事件,投影(包括比例)可以改变。因此,我不确定这是否会影响圆圈在现有投影的上下文中的缩放方式,但我认为为了安全起见,我会披露这一点。
【问题讨论】:
-
需要考虑的几个问题:正如您所指出的,1 英里是一个可变距离(以像素为单位),具体取决于用户的位置。投影函数对于以单位为单位的基础地图的距离是天真的。您需要某种方式来告知投影函数您的 topojson 文件中的 1 英里。一种方法是将距离计算为弧度中地球周围距离的比例。见这里:bl.ocks.org/thomasthoren/6a543c4d804f35a240f9
-
是的,我知道这个块,我在之前的研究中看到过它。然而,它与像素函数的距离有点长,他承认他的数学可能不是 100% 正确的。我希望通过提供赏金,我能够看看是否有任何更精致的替代品。
标签: javascript d3.js topojson