javascript - d3 voronoi map 可以与除 geoAlbers 之外的任何其他投影配合使用吗?

标签 javascript d3.js projection voronoi

我正在从示例链接学习 voronoi map https://bl.ocks.org/mbostock/7608400

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

这是我更改的唯一代码:

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

最佳答案

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

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

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

如果您将比例设置得小得多,例如 170,您将看到 map ,但所有功能都将位于左上角:

enter image description here

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

projection.center([-96,39])

如果放大得太大,请降低比例值,如果缩小得太远,请增加该值。由于墨卡托尺寸扭曲在两极附近变得非常严重,因此您可能需要横向扩展。

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

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

enter image description here

关于javascript - d3 voronoi map 可以与除 geoAlbers 之外的任何其他投影配合使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48143248/

相关文章:

Javascript 在对象之间移动数组项

php - 如何将很长的字符串从一页传递到另一页?

python - 多个 Csv 到 json,没有重复的子项

math - 视场中的 Kinect 内在参数

javascript - 我想将一堆飞机映射到一个球体上,它可以工作,但有一些意想不到的错误

javascript - 可折叠 DIV - 它可以使 BOX 打开得更宽吗?

javascript - 每当我通过 ajax 调用它时,Django Rest 框架都会用 AnonymousUser 替换我当前经过身份验证的用户?

javascript - OpenLayers: map 无法使用非 'standard' EPSG 代码进行渲染

php - HTML/PHP 单行下拉列表多选

javascript - 如何移动 SVG 在 D3 中的位置?