2014-04-01 2 views
1

을 구문 분석하지 TopoJSON 나는 당신이 여기에서 볼 수 있습니다 topoJSON 형식으로 d3.geom.voronoi의 결과를 구문 분석하는 간단한 기능을 썼다 그것은 http://bl.ocks.org/mbostock/5249328에서 생성 된 topoJSON과 일치하지만 번역 또는 크기 조정은 사용하지 않습니다 (그러나 (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 기본적으로 다중 다각형 및이 예제에서는 배열 배열을 따라했습니다 있지만 방금 호 배열을 만들 경우 나에게 "정의되지 않은 조각을 호출 할 수 없습니다"오류를 제공합니다 .

내 vorToPoly 함수가 아크를 올바르게 맵핑하고 있다는 것을 확신하지만, 누군가 내 객체 topoCollection (콘솔에 표시했습니다)을보고 topojson이 기대하는 것과 일치하지 않는 방법을 말해 주면 , 나는 그것을 바르게 평가할 것이다.

답변

1

Mike Bostock은 topojson 컬렉션이 0이 아닌 1의 호를 계산하기 시작했기 때문에 존재하지 않는 호를 참조했기 때문에 오류가 발생했다고 지적했습니다.이 문제는 내 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])]]); 

그 방법은 해시 대신 1 뒤집기의 0에서 시작하는이 모든 일이 잘합니다.

관련 문제