d3js отображает только элементы пути, содержащиеся в ограничительной рамке

У меня есть два файла topojson, полученные из шейп-файлов, которые я добавляю к тому же g узел элемента SVG во вложенном цикле.

// Layer 1
d3.json("grid.topojson", function(error, grid) {

  // Layer 2 (continents)
  d3.json("continents.topojson", function(error, continent) {

  ...

Можно нажать на континенты, чтобы увеличить конкретный регион (с https://bl.ocks.org/mbostock/4699541).

Слой сетки очень плотный, поэтому он замедляет масштаб при нажатии на континенты в слое континентов. Чтобы обойти это, я хотел бы отображать слой сетки только после увеличения на конкретном континенте. у меня есть .on("click") событие, которое запускает функцию масштабирования:

function clicked(path, d, m_width, m_height, _this, grid) {

        var this_class = get_classFromPath(_this);

        var bounds = path.bounds(d),
          dx = bounds[1][0] - bounds[0][0],
          dy = bounds[1][1] - bounds[0][1],
          x = (bounds[0][0] + bounds[1][0]) / 2,
          y = (bounds[0][1] + bounds[1][1]) / 2,
          scale = .2 / Math.max(dx / m_width, dy / m_height),
          translate = [m_width / 2 - scale * x, m_height / 2 - scale * y];

        g.transition()
          .duration(750)
          .style("stroke-width", 1.5 / scale + "px")
          .attr("transform", "translate(" + translate + ")scale(" + scale + ")");
          // .selectAll("path.model-grid")
          // .style("display", "inline");
      }

в clicked функция, я хочу сделать сетку видимой после увеличения, но она кажется ненужной (и очень медленной) для использованияselectAll поскольку на дисплее видна только небольшая часть всей сетки. К сожалению, шейп-файл сетки не содержит идентификаторов, которые я могу использовать для сопоставления с идентификаторами континентов, поэтому я не могу выбрать элементы пути сетки по идентификатору.

Есть ли способ узнать, какие элементы пути слоя сетки содержатся в bounds коробка после увеличения?

Любая помощь высоко ценится, спасибо!

0 ответов

Другие вопросы по тегам