美文网首页Leaflet
Leaflet_D3:点

Leaflet_D3:点

作者: seelingzheng | 来源:发表于2018-06-20 17:22 被阅读50次

开发环境

npm install leaflet d3 --save

- leaflet v1.x
- d3 v4.x

根据d3创建svg,并添加到map地图的overlayPane下

 var svg = d3.select(mymap.getPanes().overlayPane).append('svg'),
        g = svg.append('g').attr('class', 'leaflet-zoom-hide'); 

注册map zoom 事件

mymap.on('zoom', adjustCircle); 

示例代码

<!DOCTYPE html>
<html> 
<head>
    <title>d3_leaflet_1</title>
</head>
<link rel="stylesheet" type="text/css" href="node_modules/leaflet/dist/leaflet.css">
<script type="text/javascript" src="node_modules/leaflet/dist/leaflet.js"></script>
<script type="text/javascript" src="node_modules/d3/build/d3.js"></script>
<style>
    html,
    body {
        margin: 0;
        padding: 0;
    } 
    #map {
        width: 100%;
        height: calc(100vh)
    }
</style>

<body>
    <div id="map"></div>
    <script type="text/javascript">
        var mymap = L.map('map').setView([29, 125.77], 6);
        L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {

            maxZoom: 18,
            noWrap: true
        }).addTo(mymap);


        var svg = d3.select(mymap.getPanes().overlayPane).append('svg');
        g = svg.append('g').attr('class', 'leaflet-zoom-hide'); 

        mymap.on('zoom', adjustCircle); 

        function drwaCircle() { 
            d3.json("data/circles.json", function (collection) {
                var latLngs = [];
                collection.objects.forEach(function (d) {
                    latLngs.push([d.circle.coordinates[0], d.circle.coordinates[1]]);
                })

                console.log(latLngs);
                var c = g.selectAll('circle')
                    .data(latLngs);

                var cAttr = c.enter()
                    .append('circle')
                    .style("stroke", "black")
                    .style("fill", "yellow")
                    .attr('r', 2 * (mymap.getZoom() == 0 ? 1 : mymap.getZoom()))
                    .attr("cx", function (p) {
                        console.log("p", p)
                        return mymap.latLngToLayerPoint([p[0], p[1]]).x
                    })
                    .attr("cy", function (p) {
                        return mymap.latLngToLayerPoint([p[0], p[1]]).y
                    })
            })
        } 
        function adjustCircle() {
            d3.selectAll("circle")
                .attr('r', 2 * (mymap.getZoom() == 0 ? 1 : mymap.getZoom()))
                .attr('cx', o => mymap.latLngToLayerPoint([o[0], o[1]]).x)
                .attr('cy', o => mymap.latLngToLayerPoint([o[0], o[1]]).y);
        } 
        function initial() { 
            svg.attr("width", 1500)
                .attr("height", 800);
            drwaCircle();
        }
        initial()
    </script>
</body> 
</html>

更多内容,欢迎关注公众号


seeling_GIS

相关文章

  • Leaflet_D3:点

    开发环境 根据d3创建svg,并添加到map地图的overlayPane下 注册map zoom 事件 示例代码 ...

  • 点、点、点……

    上班到周二,最是崩溃。上一个周末刚刚过去,下一个周末还遥遥无期。点算,接下来的日子可怎么熬啊? 大家应该发现了,我...

  • 一点。点。。点。。。

    最近看菜头跟社长的文章,发现这俩人的风格,怎么说呢,一个是写文写的很是得心应手,读罢意犹未尽,评论里却是被高高挂起...

  • 糟~点~点

    2018年6月9日 星期五 晴 最近生活过的有点“糟”哈 感觉干什么都没动力了 就如现在,拿本书看不下去 ...

  • 点只是点

    你习惯上半年你将习惯下半年如同你习惯了白天你将习惯黑夜没有念想没有期望没有不安没有急躁如同意义没有意义习惯没有习惯...

  • 痛点 爽点 痒点

    用产品思维来讲,做一款产品要么解决用户的痛点,要么touch到用户的爽点,要么击中用户的痒点,这样的产...

  • 痛点,痒点,爽点。

    01 痛点是恐惧。 02 爽点是即时满足。 03 痒点是满足虚拟自我。

  • 痛点 爽点 痒点

    痛点:解除痛苦(前后对比,变化的过程) 爽点:及时的反馈 痒点:满足虚拟自我

  • 痛点,痒点,爽点

    最近在看梁宁的产品思维课程,挺不错的。 首先是,从自己觉得,到用户觉得,从用户驱动的角度出发去思考产品。 其次是痛...

  • 61点点点

    NOKIA61...?我的第一个诺基亚手机。。。 我已经不记得是诺基亚6150还是6105 就像我已经不记得你说过...

网友评论

    本文标题:Leaflet_D3:点

    本文链接:https://www.haomeiwen.com/subject/puhxyftx.html