【问题标题】:Hand-Generated TopoJSON not Parsing手动生成的 TopoJSON 不解析
【发布时间】:2014-05-12 08:43:58
【问题描述】:

我写了一个简单的函数来将 d3.geom.voronoi 的结果解析成 topoJSON 格式,你可以在这里看到:

http://bl.ocks.org/emeeks/9908143

据我所知,它与http://bl.ocks.org/mbostock/5249328 中生成的 topoJSON 相匹配,只是它不使用 translate 或 scale(尽管我使用 (0,0) 的 translate 和 scale 生成它(1)并收到相同的错误)。当我尝试使用 topojson 解析特征时,我收到此错误:

TypeError: Cannot read property 'length' of undefined
at arc (topojson.js:172:54)
at line (topojson.js:187:52)
at ring (topojson.js:193:20)
at Array.map (native)
at polygon (topojson.js:199:19)
at Object.geometryType.Polygon (topojson.js:214:37)
at geometry (topojson.js:205:71)
at object (topojson.js:218:12)
at feature (topojson.js:160:17)
at topojson.js:151:55

我基于此的 Polygon 示例有一个弧数组数组,而我比较过的 Linestring 示例有一个弧数组,所以我的假设是 Polygon 默认情况下是一个多面体,我已经遵循此示例的数组数组,但如果我只是创建一个弧数组,则会出现错误“无法调用未定义的切片”。

我很确定我的 vorToPoly 函数正确地映射了弧,但是如果有人可以查看我的对象 topoCollection(我已将其回显到控制台)并告诉我它与 topojson 期望的不匹配,我会很感激的。

【问题讨论】:

    标签: topojson


    【解决方案1】:

    Mike Bostock 指出错误的发生是因为我的 topojson 集合引用了一个不存在的弧,因为它开始计算弧为 1 而不是 0。问题出现在我的这部分 vorToPoly 代码中:

     topoArcs.push([[Math.floor(vorPolys[x][y][0]),Math.floor(vorPolys[x][y][1])],[Math.floor(vorPolys[x][nextVal][0]),Math.floor(vorPolys[x][nextVal][1])]]);
     arcHash[hashVal] = topoArcs.length;
    

    它应该被翻转:

     arcHash[hashVal] = topoArcs.length;
     topoArcs.push([[Math.floor(vorPolys[x][y][0]),Math.floor(vorPolys[x][y][1])],[Math.floor(vorPolys[x][nextVal][0]),Math.floor(vorPolys[x][nextVal][1])]]);
    

    这样哈希从 0 而不是 1 开始。翻转它可以让一切正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 2012-10-02
      相关资源
      最近更新 更多