Выберите объект из GeoJSON на основе имени узла - PullRequest
0 голосов
/ 04 октября 2018

Я работаю в области визуализации геоданных с использованием D3js с раскладкой сил и картой Leaflet.С некоторой помощью других пользователей я смог собрать первую версию.Теперь я добавляю путь геоджона и хочу показать конкретную функцию в зависимости от имени узла, по которому я щелкаю, но сейчас, когда я щелкаю по узлу, отображаются все пути.

Вот чтоЯ хотел бы иметь: This is what I would like to have

Вот что у меня есть: enter image description here

Я пытался перебирать имена путей вФункция, которую я вызываю, когда нажимаю на узлы:

        function connectedNodes() {
    var poligono = g.selectAll("path");
    var result = datosPoli.features;
    for (var i = 0; i < result.length; i++) {
        var poligonoNombre = result[i].properties.Name;
    }

    if (toggle == 0) {
  //Reduce the opacity of all but the neighbouring nodes
  d = d3.select(this.parentNode).datum();
        r = d3.select(this).datum();

      nodesAll
    .transition()
    .style("opacity", function (o) {
                return neighboring(d, o) | neighboring(o, d) ? 1 : 0;
            })
  ;

  lineas
    .transition()
    .style("opacity", function (o) {
                return d.index==o.source.index | d.index==o.target.index ? 0.5 : 0;
            })
  ;

        poligono
            .filter(function(d){
                for (var i = 0; i < result.length; i++) {
                    var poligonoNombre = result[i].properties.Name;
                    return poligonoNombre;
                }
                return d.id === poligonoNombre;
            })
            .attr('fill-opacity', 1)
        ;

        text
            .transition()
            .style('opacity', function(o){
                    return neighboring(d, o) | neighboring(o, d) ? 1 : 0;
        })

        toggle = 1;

} else {
        // devuelve los nodos a la normalidadlos links invisibles
  nodesAll
    .transition()
    .style("opacity", 1)
        ;

  lineas
    .transition()
    .style("opacity", 0)
  ;

        poligono
            .attr("fill-opacity", 0)
        ;

        text
            .transition()
            .style('opacity', 1)
        ;

  toggle = 0;
}
}

Но не повезло.

У меня была проблема с загрузкой полного кода в blockbuilder, поэтому я загрузил его здесь: https://drive.google.com/file/d/1vp1l9brJ0MzLX3zV4-kyB6-IJEtvFiyB/view?usp=sharing

1 Ответ

0 голосов
/ 05 октября 2018

следующая проверка является лучшей проверкой многоугольника, но похоже, что ни одно из имен в легенде не найдено в именах многоугольников

Лучше изменить opacity, если вы хотите обвести многоугольники,Также измените, где вы создаете red полигоны

poligono
    .filter(function (o) { return d.id === o.properties.Name; })
    .attr('opacity', 1);

Или один лайнер

poligono.attr('opacity', o => d.id === o.properties.Name ? 1 : 0);
...