zoukankan      html  css  js  c++  java
  • LeaFlet如何和canvas结合进行绘图

    前言:canvas是一个非常好的东西,但是这个东西如何与leaflet进行结合,翻了一遍LeaFlet的API没有发现如何用canvas和LeaFlet相结合,难道两者无法集合天无绝人之路,最终我还是找到了DivIcon相结合,能达到目的。也可以利用DivIcon做一些简单的动画,当然也可以同样结合canvas进行绘图动画,下面就看一下如何结合:

    效果图:

    一、声明DIVIcon

            var myIcon = L.divIcon({
                html: '<canvas id="tutorial" width="300" height="300"></canvas>',
                //className: 'css_animation',
                iconSize: 10,
                bgPos: [31.864942016, 117.2882028929]
            });
            L.marker([31.864942016, 117.2882028929], { icon: myIcon}).addTo(map);

    二、canvas绘图函数封装

            function draw() {
                var canvas = document.getElementById('tutorial');
                if (!canvas.getContext) return;
                var ctx = canvas.getContext("2d");
                ctx.fillStyle = "rgb(200,0,0)";
                //绘制矩形
                ctx.fillRect(10, 10, 55, 50);
    
                ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
                ctx.fillRect(30, 30, 55, 50);
            }
            draw();

    三、总结

    该方法有个问题就是画出来canvas图像有偏移,因为canvas画布的原点刚好在你需要设置的地方,向right有个宽度,向bottom有个高度?如何把canvas中心点平移到设置到经纬度上,这个需要你封装一个函数进行在原经纬上适当减小,这是我的解决方法,上图那个小白四方块就是经纬度点。

    关于如何进行实时进行绘制解决方案:

    画图封装一个方法和地图地图zoomlevelschange事件结合一下进行重绘,在用Marker的setIcon方法添加新的DivIcon。

  • 相关阅读:
    CMU15-445 Project #2
    CMU15-445 Project #1 Buffer Pool
    挂分原因
    「杂谈」关于斜率优化维护凸包
    「题解」GYM 101620J Justified Jungle
    「题解」AGC 052 B Tree Edges XOR
    C++ MT19937 随机数 限制范围
    「题解」Codeforces 348C Subset Sums
    「学习笔记」联赛数论再学习
    「题解」洛谷 P4597 序列sequence
  • 原文地址:https://www.cnblogs.com/tuboshu/p/10752308.html
Copyright © 2011-2022 走看看