用d3画地图

直接上代码,内容注解很详细,相关引入的文档我会上传到资源里。

    

<html>
<head>
    <meta charset="utf-8">
    <title>中国地图</title>
</head>
<body>
<script src="d3.v3.min.js"></script>
<script src="http://www.ourd3js.com/library/multext.js" charset="utf-8"></script>
<script>
    var width  = 630;
    var height = 630;
    var svg = d3.select("body")//定位页面位置
        .append("svg")//添加画布
        .attr("width", width)//添加宽度
        .attr("height", height)//添加高度
        .append("g")//添加元素
        .attr("transform", "translate(0,0)");
    //投影函数
    var projection = d3.geo.mercator()//投影方式
        .center([102, 25])//设置中心位置,数据是指经纬度
        .scale(3800)//设置放大比例
        .translate([width/2, height/2]);//设置平移
    //地理生成器:根据地理数据生成SVG的path元素的路径值
    var path = d3.geo.path()//svg的预定义元素:rect矩形、circle圆形、eclipse椭圆、line线段、polyline折线、polygon多边形、path路径
        .projection(projection);//从球面投影到平面

    // var color = d3.scale.category20();
    // console.log(path);
    d3.json("yunnan.json", function(error, root) {
        if (error)
            return console.error(error);
        // console.log(root.features);
        svg.selectAll("path")
            .data( root.features )//引入数据
            .enter()
            .append("path")//添加路径
            .attr("stroke","#fff")//设置边线颜色
            .attr("stroke-width",1)//设置边线宽度
            .attr("fill","#b6c9f7")//设置填充颜色
            .attr("d", path )
            .on("mouseover",function(d,i){//设置鼠标悬浮样式
                d3.select(this)
                    .attr("fill","#778de6");
            })
            .on("mouseout",function(d,i){//设置鼠标离开样式
                d3.select(this)
                    .attr("fill","#b6c9f7");
            });
        var name=[];
        var local=[];
        for(var i=0;i<root.features.length;i++){
            name.push(root.features[i].properties.name);
            local.push(root.features[i].properties.cp);
        }
        for(var j=0;j<name.length;j++){
            var localPosition=projection(local[j]);
            appendMultiText(svg,name[j],localPosition[0]-30,localPosition[1]-10,70,14);

        }
    });
</script>
</body>
</html>

运行结果:

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值