可视化工具D3.js教程 入门 (第十四章)—— 中国地图
首先我们需要的是 中国地图的json数据:请戳这里
接下来咱们直接上代码:
代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>中国地图</title> <script src="./d3.min.js"></script> </head> <body> <svg width="900" height="700"></svg> </body> <script> //获取svg var svg = d3.select('svg'); var width = svg.attr('width'); var height = svg.attr('height'); //创建区域分组 var g = svg.append('g').attr('transform','translate(0,0)'); //创建一个地图投影 var mercator = d3.geoMercator() .center([107,31])//设置投影的中心点 经纬度 .scale(550)//设置缩放因子 .translate([width/2,height/2]);//设置平移偏移量 //创建一个地理路径生成器 var geoPath = d3.geoPath() .projection(mercator)//设置地理路径生成器的投影方式 //获取中国地图的json文件 //利用node.js 在本地起一个http-server d3.json('map.json').then(function (data) {//D3 v5版本d3.json()现在将返回一个你可以在.then()方法中处理的Promise console.log(data);//features //新建一个颜色比例尺 var scaleColor = d3.scaleOrdinal() .domain(d3.range(data.features.length)) .range(d3.schemeCategory10); //绘制区域 g.append('g') .selectAll('path') .data(data.features) .enter() .append('path') .attr('stroke','gray') .attr('strok-widht',1) .attr('d',function (d,i) { return geoPath(d); }) .attr('fill',function (d,i) { return scaleColor(i); }) .on('mouseover',function (d,i) { d3.select(this).attr('fill','yellow'); }) .on('mouseout',function (d,i) { d3.select(this).attr('fill',scaleColor(i)); }); //绘制文字 g.append('g') .selectAll('text') .data(data.features) .enter() .append('text') .attr('font-size',12) .attr('text-anchor', 'middle') .attr('x',function (d,i) { var position = mercator(d.properties.centroid || [0,0]); return position[0]; }) .attr('y',function (d,i) { var position = mercator(d.properties.centroid || [0,0]); return position[1]; }) .attr('dy',function (d,i) { //这里为什么这么写呢,因为澳门和香港重合了,挤到一起了。 if (d.properties.name === '澳门特别行政区') { return 10; } }) .text(function (d,i) { return d.properties.name; }); }); </script> </html>
效果: