首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >手工生成的TopoJSON不解析

手工生成的TopoJSON不解析
EN

Stack Overflow用户
提问于 2014-04-01 14:00:44
回答 1查看 127关注 0票数 1

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

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

据我所知,它与在topoJSON中生成的http://bl.ocks.org/mbostock/5249328匹配,只是它不使用转换或缩放(虽然我生成它的转换值为(0,0)和(1),并收到了相同的错误)。当我试图用topojson解析这些特性时,我会收到以下错误:

代码语言:javascript
复制
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所期望的不匹配,我会很感激的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-01 15:47:37

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

代码语言:javascript
复制
 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;

它应该被翻转:

代码语言:javascript
复制
 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开始。翻转它可以使一切正常工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22788202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档