0

我正在尝试使用 GeoJSON 使用 d3.js 绘制地图,但生成的路径如下所示:

<path d="MNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,‌​NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,N‌​aNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,Na‌​NLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaN‌​LNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNL‌​NaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLN‌​aN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNZ">

代码和数据在这个 Gist 中: https ://gist.github.com/4157853

我可以在 QGIS 上很好地加载数据。

有谁知道是什么原因造成的?

4

2 回答 2

3

您在墨卡托投影中指定偏移的方式似乎不正确。projection.translate 方法需要一个二元数组:

https://github.com/mbostock/d3/wiki/Geo-Projections#wiki-mercator_translate

所以而不是:

proj.translate(-43.8,-23.2).scale(10);

你需要说:

proj.translate([-43.8,-23.2]).scale(10);

- 编辑 -

查看projection.translate的来源:https ://github.com/mbostock/d3/blob/3.0/src/geo/projection.js#L139

  projection.translate = function(_) {
    if (!arguments.length) return [x, y];
    x = +_[0];
    y = +_[1];
    return reset();
  };

如果参数_不是数组,则+_[0]返回 a NaN,因此xandy将变为NaNs。(这是因为试图从一个数字(例如 213[0])中获取一个元素会返回undefined并转换undefined为一个数字(例如 +undefined)会产生NaN。)

于 2012-11-29T18:12:04.977 回答
-1

如果您在 gist 中发布的代码是您尝试运行的所有内容,那么您显示的数据data.json不会在任何地方加载。无论如何,您的draw函数正在作用于由变量定义的数据map(第 16 行),该simulation变量指的是未在任何地方设置的变量。即使是这样,第 34 行也会引用features作为 json 传入的对象的属性,而该属性map没有。

总之,您需要将您在 gist 中发布的 JSON 传递给您的绘图函数。那么它可能会奏效。如果您不将有效数据传递给 d3 SVG 助手,您将得到一堆NaN结果。

于 2012-11-29T09:14:19.460 回答