
【D3.js】隣接する区画を表示する
こちらのサンプルを見て日本地図版を作ってみました。
マウスオーバーした市に隣接する市区町村がオレンジ色で表示されます。
サンプル
ポリゴン数の少ないデータの方が内容を理解しやすいので、都道府県版のサンプルコードを載せておきます。

D3とともにTopojsonライブラリ(ver.1以上)を読み込んでください。
| 1 2 | <script src="http://d3js.org/d3.v3.min.js"></script> <script src="http://d3js.org/topojson.v1.min.js"></script> | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | d3.json("ken.topojson", function(json) { 	draw(json); }); function draw(json){ 	//geoデータ 	var geodata = json.objects.ken; 	//geometrieから隣接するパスのインデックス情報を取得 	var neighbors = topojson.neighbors(geodata.geometries); 	var projection = d3.geo 		.mercator()		//投影法の指定 		.scale(2000)	//スケール(ズーム)の指定 		.translate([500,450]) //表示位置調整 		.center([139.0032936, 36.3219088]); //中心の座標を指定 	var path = d3.geo.path().projection(projection); //パスジェネレーター 	var svg = d3.select("svg"); 	//地図描画 	var map = svg.append("g") 		.attr("class", "land") 		.selectAll("path") 		.data(topojson.feature(json, geodata).features) 	    .enter().append("path") 		.attr("d", path) 		.attr("stroke", "red") 	map.each(function(d, i) { 			//隣接するパスのインデックス情報を取得元に、データに隣接パスへの参照を追加 			d.neighbors = d3.selectAll( 				neighbors[i].map(function(j) { 					return map[0][j]; 				}) 			); 		}) 		.on("mouseover", function(d) { 			//d.neighbors <- 隣接するパスへの参照 			d.neighbors.classed("neighbor", true); 		}) 		.on("mouseout", function(d) { 			d.neighbors.classed("neighbor", false); 		}); } |