【发布时间】: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/…)
标签: javascript d3.js geo