2013-05-24 23 views
10

Tôi đang có rất nhiều niềm vui chơi với topojson, nhưng có vẻ như topojson.object là không xác định trong V1 của topojson, nơi nó được hỗ trợ trong V0. Ai đó có thể giải thích làm thế nào tôi có thể làm việc xung quanh vấn đề này? Tôi đang cố vẽ các phần tử đường dẫn riêng biệt cho mỗi đa giác trong một tệp đầu vào được định dạng là topojson. mã là:topojson.object trong 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

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

Trả lời

15

Thay vào đó, bạn có thể sử dụng topojson.feature.

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); 
}); 

Một ví dụ chi tiết có thể được tìm thấy ở đây: http://bost.ocks.org/mike/map/

3

Các v1 phát hành thay thế topojson.object với topojson.feature; hành vi tương tự, nhưng phương thức topojson.feature mới trả về một đối tượng Feature hoặc FeatureCollection (chứ không phải là Geometry hoặc GeometryCollection) để tương thích tốt hơn với GeoJSON.

@ mbostock's words from this thread. Vì vậy, chỉ thay đổi một chuỗi trong mã của bạn thành mã này: .data(topojson.feature(ma, ma.objects.ma).features). Và tôi đoán bạn cũng nên tái tạo tập tin TopoJSON của bạn với v1 từ GeoJSON.

Các vấn đề liên quan