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