使用d3.js在地图中隐藏城市的线条

时间:2017-06-19 05:23:19

标签: javascript d3.js

我有一个部门(红线)和市政部门(灰线)。我希望我的地图隐藏城市的线条,以便稍后使用按钮出现或消失这些线条。不透明度:0不起作用。我想要实现的另一件事是绘制红色部门,这包括当前未绘制的外部线条,我的意思是轮廓图的线条。

  d3.json("https://cdn.rawgit.com/finiterank/mapa-colombia-js/9ae3e4e6/colombia-municipios.json", function(error, co) {
      var subunits = topojson.feature(co, co.objects.mpios);
      var projection = d3.geo.mercator()
        .scale(1000)
        .translate([width / 2, height / 2])
        .center([-61,43])
        .rotate([2,3,2]);
    var path = d3.geo.path()
      .projection(projection);
    svg.append("path")
      .datum(subunits)
      .attr("d", path);
    svg.selectAll(".mpio")
        .data(topojson.feature(co, co.objects.mpios).features)
        .enter().append("path")
        .attr("class", function(d) { return "mpio " + "_" + d.id; })
        .attr("d", path);
      svg.append("path")
      .datum(topojson.mesh(co, co.objects.mpios, function(a, b) { return a !== b; }))
      .attr("d", path)
      .attr("class", "mpio-borde");
      svg.append("path")
      .datum(topojson.mesh(co, co.objects.depts, function(a, b) { return a !== b; }))
      .attr("d", path)
      .attr("class", "depto-borde");

http://jsfiddle.net/vstn1oaf/

1 个答案:

答案 0 :(得分:0)

您可以修改不透明度,但是,我假设您使用.attr("opacity",0)执行此操作。这在您定义css中的不透明度时不起作用。 CSS优于.attr。而是使用.style("opacity",0)。但是有多种方法可以实现这种效果,例如.style("stroke-width",0)

要显示整个网格,而不仅仅是内部边界,您可以使用:

.datum(topojson.mesh(co, co.objects.depts))

这一切都在起作用:

var width = 900,
    height = 900;

var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height);

/* 
ogr2ogr -f GeoJSON depts.json depto.shp -s_srs EPSG:26986 -t_srs EPSG:4326
topojson --id-property NOMBRE_DPT -p name=NOMBRE_DPT -p name -o colombia-departamentos.json depts.json
*/

d3.json("https://cdn.rawgit.com/finiterank/mapa-colombia-js/9ae3e4e6/colombia-municipios.json", function(error, co) {
    var subunits = topojson.feature(co, co.objects.mpios);
    var projection = d3.geo.mercator()
    	.scale(2000)
    	.translate([width / 2, height / 2])
    	.center([-61,43])
    	.rotate([2,3,2]);
	var path = d3.geo.path()
		.projection(projection);
	svg.append("path")
		.datum(subunits)
		.attr("d", path);
	svg.selectAll(".mpio")
	    .data(topojson.feature(co, co.objects.mpios).features)
  		.enter().append("path")
    	.attr("class", function(d) { return "mpio " + "_" + d.id; })
    	.attr("d", path);
    svg.append("path")
    .datum(topojson.mesh(co, co.objects.mpios, function(a, b) { return a !== b; }))
    .attr("d", path)
    .attr("class", "mpio-borde");
    svg.append("path")
    .datum(topojson.mesh(co, co.objects.depts))
    .attr("d", path)
    .attr("class", "depto-borde");
  /*    svg.selectAll(".dept-label")
  .data(topojson.feature(co, co.objects.depts).features)
  	.enter().append("text")
    .attr("class", function(d) { return "dept-label " + d.id; })
    .attr("transform", function(d) { return "translate(" + path.centroid(d) + ")"; })
    .attr("dy", ".35em")
    .text(function(d) { return d.properties.name; });*/
});

function fadeout() {
	d3.selectAll(".mpio")
    .transition()
    .style("opacity",0)
    .duration(1000);
}

function fadein() {
	d3.selectAll(".mpio")
    .transition()
    .style("opacity",1)
    .duration(1000);
}

function fatten() {
	d3.selectAll(".depto-borde")
    .transition()
    .style("stroke-width",2)
    .duration(1000);
}

function diet() {
	d3.selectAll(".depto-borde")
    .transition()
    .style("stroke-width",0)
    .duration(1000);
}

var show = true;

function showcase() {
	setTimeout(function() {
    show = !show;
		if (show) { fadein();fatten(); }
		else { fadeout(); diet(); }
		showcase();
	}, 1500)
}

showcase();
/*.mpio._44279 { fill: #fff; }*/

path {
   fill: #777;
}

.mpio {
  fill: none;
  stroke: #fff;
  stroke-opacity: .25;
  stroke-width: .5px;
  pointer-events: none;
}



.mpio-borde {
  opacity: 0;
  fill: none;
  stroke: #00ff00;
  __stroke-linejoin: round;
  stroke-width: 0.5;}
.depto-borde {
  fill: none;
  stroke: #ff0000;
  stroke-linejoin: round;
  stroke-width: 1;
  opacity: 1;

}
<script src="https://d3js.org/d3.v3.min.js"> </script>
<script src="https://d3js.org/topojson.v1.min.js"></script>