【问题标题】:Can d3 voronoi map work well with any other projection besides geoAlbers?d3 voronoi 地图能否与 geoAlbers 以外的任何其他投影一起正常工作?
【发布时间】:2018-06-17 00:22:53
【问题描述】:

我正在通过示例链接学习 voronoi 地图 https://bl.ocks.org/mbostock/7608400

但是当我想将投影更改为墨卡托时它不起作用。为什么?

这是我唯一更改的代码:

var projection = d3.geoMercator()
    .translate([width / 2, height / 2])
    .scale(1280);

【问题讨论】:

    标签: javascript d3.js projection voronoi


    【解决方案1】:

    是的,voronoi 应该适用于任何投影 - 它使用 svg 坐标空间中的投影点。如果你看到点,你可以做一个 voronoi。

    问题是你需要修改投影的参数。阿尔伯斯投影需要两条割线或平行线,其中地球的椭球与投影的圆锥相交(或者,一条切线或平行线)。这些很少设置为赤道,因此 D3 具有适合并以美国为中心的 Albers 投影的默认设置,因为将所有默认设置为零没有多大意义。

    D3 中的大多数其他投影都有其默认设置,从而生成以[0,0] 为中心的地图,这是位于非洲海岸附近的本初子午线和赤道。因此,这就是您在设置投影时所看到的位置 - 没有可见的点,没有可见的 voronoi(可能除了外围。

    如果您将比例设置得更小,例如 170,您会看到您的地图,但所有要素都将位于左上角:

    我们可以使用 Albers 的默认居中坐标来居中墨卡托,而不是仅仅缩小:

    projection.center([-96,39])

    如果您放大了太多,请降低比例值,如果您缩小太多,请增加它。因为墨卡托的尺寸扭曲在两极附近变得非常糟糕,您可能需要向外扩展。

    这是我通过示例代码和此投影得到的结果,缩小了一点,但根据您是否想要阿拉斯加,您可能需要放大或缩小:

    var projection = d3.geoMercator()
        .translate([width / 2, height / 2])
        .scale(600)
        .center([-96,39])
    

    【讨论】:

    • 您好安德鲁,感谢您的回复。它是如此完整,而且效果很好。
    • 我可以对这段代码有其他问题吗?你看,在数据“flights.csv”中,有一列叫做“count”。有什么方法可以将圆弧路径不透明度从 0.1 更改为 1 以显示飞行次数?我遇到的挑战是如何将“计数”与每条路径结合起来。谢谢!
    • 这将需要对数据的编译方式和绘制方式进行一些修改(改变追加方式,而不仅仅是不透明度),最好将它作为一个单独的问题发布,因为我不要认为评论会带来好的回应 - 我可能不是回答它的最佳人选。
    猜你喜欢
    • 2011-06-30
    • 2012-08-14
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    相关资源
    最近更新 更多