zoukankan      html  css  js  c++  java
  • 可视化工具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>

    效果:

  • 相关阅读:
    理解Restful 架构
    CLR 异步函数
    CLR 线程池
    CLR 线程基础
    CLR 序列化
    CLR 垃圾回收和应用程序集
    CLR的垃圾回收机制
    定制特性
    枚举和迭代器
    接口
  • 原文地址:https://www.cnblogs.com/zhinian-/p/12618664.html
Copyright © 2011-2022 走看看