我编写了一个简单的函数来将d3.geom.voronoi的结果解析为topoJSON格式,您可以在这里看到:
http://bl.ocks.org/emeeks/9908143
据我所知,它与在topoJSON中生成的http://bl.ocks.org/mbostock/5249328匹配,只是它不使用转换或缩放(虽然我生成它的转换值为(0,0)和(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基于此的多边形示例有一个用于弧形的数组,而Linestring示例将它与一个弧形数组进行比较,因此我的假设是,在默认情况下,多边形是一个多多边形,并且我在这个示例中遵循了数组,但是如果我只是创建一个弧形数组,它就会给我一个错误“无法调用未定义的切片”。
我非常肯定,我的vorToPoly函数正在正确地映射弧,但是如果有人能够查看我的对象topoCollection (我已经将其回显到控制台)并告诉我它如何与topojson所期望的不匹配,我会很感激的。
发布于 2014-04-01 15:47:37
Mike指出,错误的发生是因为我的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开始。翻转它可以使一切正常工作。
https://stackoverflow.com/questions/22788202
复制相似问题