d3 绘制中国地图

<html>
    <head>
        <meta charset="utf-8">
        <title>China Map</title>
    </head>
    <style>
        body{
            background: black;
        }
        #southsea{
            stroke:#63B8FF;
            stroke-width: 1px;
        }
    </style>
    <body>
        <script src="../../static/d3.v3.min.js"></script>
        <script>
            //控制画布长宽
            var width = 1500;
            var height = 800;
            //END

            //新建svg图形画布
            var svg = d3.select("body").append("svg").attr("width",width).attr("height",height);
            //END

            //设置经纬度缩放函数
            var projection = d3.geo.mercator().center([105,40]).scale(900).translate([width/2,height/2]);
            var path = d3.geo.path().projection(projection);
            //END

            //设置鼠标缩放
            var zoom = d3.behavior.zoom().scaleExtent([1,10]).on("zoom",zoomed);
            function zoomed(){
                d3.select(this).attr("transform","translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
            }
            //END

            //新建g标签,并回调鼠标缩放
            china = svg.append('g').call(zoom);

            //绘制中国地图,这里需要下载一个geojson文件
         d3.json("../../static/china.geojson",function(error,root){
                if(error) return console.error(error);

                var province = china
                    .selectAll("path") //选中china内的所有path标签
                    .data(root.features)   //所用数据为geojson文件下的features内容
                    .enter()    //进入循环内部
                    .append("path")    //每一次循环新建一个path标签
                    .attr("d",path)     //对于每个path标签中的d标签用path绘制
                    .attr("stroke","#63B8FF")  //path的颜色
                    .attr("stroke-width",1)   //path的粗细
                    .attr("fill","black");   //path围起来的块颜色
            });
            //END


            //绘制南海,需要下载一个svg文件
            d3.xml("../../static/southchinasea.svg",function(error,xmlDocument){
                china.append("g").html(function(d){
                    //新建一个g标签绘制南海
                   return d3.select(this).html() + xmlDocument.getElementsByTagName("g")[0].outerHTML;
                });
                //给南海赋予平移度和缩放比
                var gSouthSea = d3.select("#southsea");
                gSouthSea.attr("transform","translate(1100,600) scale(0.5)").attr("class","southsea");
            });
            //END

        </script>
    </body>
</html>
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值