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
коробка после увеличения?
Любая помощь высоко ценится, спасибо!