topojson.object в topojson V1

Мне очень весело играть с topojson, но похоже, что topojson.object не определен в версии 1 topojson, где он поддерживался в версии 0. Может кто-нибудь объяснить, как я могу обойти эту проблему? Я пытаюсь нарисовать отдельные элементы пути для каждого многоугольника во входном файле, отформатированном как 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);
});

person Mark Roper    schedule 24.05.2013    source источник
comment
См. stackoverflow.com/questions/17404239.   -  person Hugolpz    schedule 26.08.2013


Ответы (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/.

person Pablo Navarro    schedule 24.05.2013

В выпуске v1 topojson.object заменен на topojson.feature; поведение похоже, но новый метод topojson.feature возвращает Feature или FeatureCollection (а не Geometry или GeometryCollection) для лучшей совместимости с GeoJSON.

Слова @mbostock из этой темы. Так что измените только одну строку в вашем коде на это: .data(topojson.feature(ma, ma.objects.ma).features). И я думаю, вам также следует восстановить файл TopoJSON с v1 из GeoJSON.

person KoGor    schedule 27.05.2013