我写了一个简单的函数来将d3.geom.voronoi的结果解析成topoJSON格式,你可以在这里看到:
http://bl.ocks.org/emeeks/9908143
据我所知,它与http://bl.ocks.org/mbostock/5249328中生成的topoJSON匹配,除了它不使用translate或scale(尽管我用(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
我基于此的Polygon示例有一个弧数组,而Linestring示例我将它与一个弧数组进行比较,所以我的假设是Polygon默认是多边形而且我是跟随这个例子的数组数组,但如果我只是制作一个弧数组,它会给我一个错误“不能调用未定义的切片”。
我很确定我的vorToPoly函数正确映射弧,但是如果有人可以查看我的对象topoCollection(我已经将它回显到控制台)并告诉我它是如何与topojson所期望的相匹配的,我很感激。
答案 0 :(得分:1)
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.翻转这使得一切正常。