在map上標記point

先說下最近學習的一些經驗,
1越來越覺得我們在學習每個東西的時候應該打破砂鍋問到底,爲什麼要這樣做?這樣做有什麼用?在網頁上呈現的是什麼?將每句代碼的作用都搞清楚,這樣才能在組合的時候我們能用的很放心。
2.還要一個就是數據格式的問題,在學習別人代碼的時候要搞清楚別人加載的文件數據格式是什麼,其實在加載完數據後,作者操作的本質就是不斷提取加載的數據,組合成自己所需要的數據格式,在地圖中這一點尤爲重要,比如說path,我們需要geo形式的數據,但是我們只要topojson格式,所以就需要轉換一下了。
3.在學習時理解第一,記憶第二,對代碼的每句作用進行肢解,試着總體上還原整篇代碼的寫作策略,然後自己寫,不要對着別人的敲,自己試着把思路過一遍敲出來,不會的跳過去,一遍完整下來再去調試修改。

<style type="text/css">
    circle {
        fill:red;
    }
    path.province{
        /*stroke: pink;*/

    }
</style>
<body>

</body>
<script type="text/javascript">
    var width=1000,height=1000;
    var svg=d3.select("body")
              .append("svg")
              .attr("width",width)
              .attr("height",height)
//geo是三維的,需要轉換爲二維的,所以需要定義投影方式
    var projection=d3.geo.mercator()
                         .center([107,31])
                         .scale(800)
                         .translate([width/2,height/2])

    var path=d3.geo.path().projection(projection)

    d3.json("china.topojson",function(error,toporoot){
    //將topojson轉換爲geojson   需要額外mike提供的js文件
        var georoot = topojson.feature(toporoot,toporoot.objects.china);

        var china=svg.append("g")
        var province=svg.selectAll("path .province")
                        .data(georoot.features)
                        .enter()
                        .append("path")
                        .attr("class","province")
                        .style("fill","steelblue")
                        .attr("d",path)

        d3.json("places.json",function(error,root){
        //將g元素移動到點所在的位置
            var points=svg.selectAll("g .circle")
                           .data(root.location)
                           .enter()
                           .append("g")
                           .attr("class","circle")
                           .attr("transform",function(d,i){
                                var d=projection([d.log,d.lat])
                                return  "translate("+d[0]+","+d[1]+")";
                           })
                points.append("circle")
                           .attr("r",7)
            points.append("image")
                  .attr("x",-20)
                  .attr("y",20)
                  .attr("width",60)
                  .attr("height",60)
                  .attr("xlink:href",function(d){
                        return d.img;
                  })
        })

    })
</script>

這篇代碼總體思路:
1.先畫出china
1)因爲geo三維,所以定義projection轉換二維
2)綁定geo.path生成地圖
2.circle
1)將g元素移動到特定位置
2)g元素中添加circle
3)g元素中添加image標籤
下邊是point的數據格式
這裏寫圖片描述
下圖是轉換後georoot的數據,我們可以看到features中包含了34個省的數據
這裏寫圖片描述

最後效果這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章