2013-05-24 3 views
10

Ich habe eine Menge Spaß beim Spielen mit topojson, aber es sieht so aus, als ob topojson.object in V1 von topojson nicht definiert ist, wo es in V0 unterstützt wurde. Kann jemand erklären, wie ich dieses Problem umgehen könnte? Ich versuche, für jedes Polygon in einer als topojson formatierten Eingabedatei eindeutige Pfadelemente zu zeichnen. der Code ist:topojson.object in topojson V1

d3.json("maTopo.json", function(error, ma) { 
    svg.selectAll(".subunit") 
     .data(topojson.object(ma, ma.objects.ma).geometries) 
    .enter().append("path") 
     .attr("class", function(d) { return "subunit " + d.id; }) 
     .attr("d", path); 
}); 
+0

Siehe http://stackoverflow.com/questions/17404239/ – Hugolpz

Antwort

3

Die v1 Release mit topojson.feature ersetzt topojson.object;:

d3.json("maTopo.json", function(error, ma) { 
    svg.selectAll(".subunit") 
     .data(topojson.feature(ma, ma.objects.ma).features) 
    .enter().append("path") 
     .attr("class", function(d) { return "subunit " + d.id; }) 
     .attr("d", path); 
}); 

Ein ausführliches Beispiel finden Sie hier Das Verhalten ist ähnlich, aber die neue Methode topojson.feature gibt zur besseren Kompatibilität mit GeoJSON ein Feature oder eine FeatureCollection (statt einer Geometry oder GeometryCollection) zurück.

@ mobostocks Worte von this thread. Ändern Sie daher nur eine Zeichenfolge in Ihrem Code: .data(topojson.feature(ma, ma.objects.ma).features). Und ich denke du solltest auch deine TopoJSON Datei mit v1 von GeoJSON neu generieren.