topojson.object в топойсон V1
Мне очень нравится играть с топойсоном, но похоже, что топоинсон не определен в V1 топойсона, где он был поддержан в V0. Может кто-нибудь объяснить, как я мог бы обойти эту проблему? Я пытаюсь нарисовать отдельные элементы пути для каждого многоугольника во входном файле, отформатированном как топойсон. код:
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);
});
2 ответа
Ты можешь использовать 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);
});
Подробный пример можно найти здесь: http://bost.ocks.org/mike/map/
Выпуск v1 заменил topojson.object на topojson.feature; поведение аналогичное, но новый метод topojson.feature возвращает Feature или FeatureCollection (а не Geometry или GeometryCollection) для лучшей совместимости с GeoJSON.
@ mbostock слова из этой темы. Поэтому измените только одну строку в вашем коде на это:.data(topojson.feature(ma, ma.objects.ma).features)
, И я думаю, вам также следует восстановить ваш файл TopoJSON с v1 из GeoJSON.