d3.geoPath(投影)不工作

Posted

技术标签:

【中文标题】d3.geoPath(投影)不工作【英文标题】:d3.geoPath(projection) not working 【发布时间】:2017-09-04 01:44:06 【问题描述】:

我正在编写 Mike Bostock 的代码 (d3 v4):https://bl.ocks.org/mbostock/4136647。另外,如果你想运行它,在 jsfiddle 中:https://jsfiddle.net/r3bxmhLe/

在这段代码中,他没有使用任何显式投影。

var path = d3.geoPath();

但我需要使用显式投影,因为我必须将一些 long、lat 转换为 x、y。我想使用相同的投影来绘制地图。所以我想将上面的行改为:

var proj = d3.AlbersUsa();
var path = d3.geoPath(proj);

我也试过

var proj = d3.AlbersUsa();
var path = d3.geoPath().projection(proj);

这会产生大量随机线而不是地图。因此,投影不起作用。我错过了什么?

请注意,当我做proj([long, lat])时,上面的投影效果很好

【问题讨论】:

the docs(github.com/d3/d3-geo/blob/master/README.md#path_projection) 说:如果没有指定投影,则返回... null。空投影表示恒等变换:输入几何不投影,而是直接在原始坐标中渲染。这对于快速渲染pre-projected geometry... 很有用 因此,当您的源文件已经具有预先投影的几何图形时,再次应用投影不会产生正确的结果是有道理的。使用另一个地图源文件或应用转换以转换为新坐标。 这是有道理的。谢谢。那我可能会搜索一个不同的 topojson 文件。不过,您能否详细说明一下转换的想法?你是建议我自己写一个转换函数还是有一个简单的方法来做到这一点?我对映射(d3 或其他)有点陌生。 我认为这取决于您想要实现的目标。您可以对地图应用各种几何变换,看看您是否喜欢结果。github.com/d3/d3-geo/blob/master/README.md#transforms 好吧,您可以随时创建自己的地图 (medium.com/@mbostock/…) 【参考方案1】:

问题是您使用的是专门与 geoPath 方法一起使用的 topJSON,如果您将其他任何内容传递给它,那么您的双重项目就会变得一团糟。

我遇到了这个

似乎默认投影是 常量投影 = d3.geoAlbersUsa().scale(1280).translate([480, 300]);

使用 d3 默认 topoJSON。

【讨论】:

以上是关于d3.geoPath(投影)不工作的主要内容,如果未能解决你的问题,请参考以下文章

为啥 OpenGL 中的 3D 投影可以工作,但会留下痕迹?

关于用放大镜制作简易投影仪,成像不太清晰是啥原因?

如何自制投影仪?

Shadowmap 适用于正射投影,但不适用于透视投影

Mongodb 找到不支持的投影选项

单视图 iOS 上的多个投影