获取地图转成图片技术分析

2 篇文章 0 订阅
2 篇文章 0 订阅

 Canvas实现技术详细步骤


    
    1.获取当前div大小
    
    2.获取div中所有图片
    
    3.获取div中图片存在位置left top
    
    4.遍历当前地图中的图片
    
        4.1分清地图层次
        4.2先遍历最下层画最下层到最上
    
    5.将canvas画布设置大小宽高和div一样
        
        5.1创建画布 
        
        5.2设置2d状态                  
            getContext('2d');
        
        5.3调用画图方法             
            drawImage(img, 10, 10);
            context.drawImage(img,x,y,width,height);
            context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);
    
    7.将地图中的每张图片添加到画布中设置图片起始位置和大小

    
    
    
项目风险分析:
    1.Svg技术实现不了,因为目前img标签在svg中转换没成功!

 

代码:
  

  
<html>
<head>
<title></title>
 <script type="text/javascript" src="./framework/jquery_2.1.4/jquery.min.js"></script>
<script type="text/javascript" src="./framework/iclient/include-leaflet.js" ></script>
</head>
<body >
    <div id="map" style="width: 500px;height: 500px;left:0px;position: fixed;background-color:#2ad027;">
        123
        <img src="https://img-blog.csdnimg.cn/2022010617170440536.png">
<!--         <img alt="" role="presentation" src="http://support.supermap.com.cn:8090/iserver/services/map-china400/rest/maps/China/tileImage.png?width=256&amp;height=256&amp;redirect=false&amp;transparent=false&amp;cacheEnabled=true&amp;origin=%7B%22x%22:-20037508.342789244,%22y%22:20037508.342789244%7D&amp;overlapDisplayed=false&amp;scale=3.3803271432053105e-9&amp;x=0&amp;y=0" class="leaflet-tile leaflet-tile-loaded" style="width: 256px; height: 256px; transform: translate3d(128px, 0px, 0px); opacity: 1;"> 
 -->    </div>
    
    <div id="mapImg" style="position: fixed;right:2px;top:0px;height: 600px;width:600px;border:1px solid #000;"></div>
    
    <div style="position:fixed;bottom:20px;">
        <input type="button" value="生成SVG图片" onClick="printMap('map')" />
        <input type="button" value="下载PNG图片" onClick="saveMap()" />
    </div>
    
</body>
<script type="text/javascript">
    var host = "http://support.supermap.com.cn:8090";
    var map, url = host + "/iserver/services/map-world/rest/maps/World";
      map = L.map('map', {
        crs : L.CRS.EPSG4326,
        center : [ 0, 0 ],
        renderer: L.svg(),
        maxZoom : 18,
        zoom : 1
    });
    L.supermap.tiledMapLayer(url).addTo(map); 

    var imgObj;

    function printMap(id) {
        //1.将div转成svg
        var divContent = document.getElementById(id).innerHTML;
        //防止#号问题
        var newData = "";
        for(var i = 0; i < divContent.length; i++){
            if(divContent.substr(i,1) == "#"){
                newData += '%23';
            }else{
                newData += divContent.substr(i,1);
            }
        } 
        //将图片转成所有base64
        
        var data = "data:image/svg+xml,"
                + "<svg id='abcdddd' xmlns='http://www.w3.org/2000/svg' width='500' height='500'>"
                + "<foreignObject width='100%' height='100%'>"
                + "<div xmlns='http://www.w3.org/1999/xhtml' style='font-size:16px;font-family:Helvetica'>"
                + newData + "</div>" + "</foreignObject>" + "</svg>";
        
        
        var img = new Image();
        img.src = data;
        
        document.getElementById(id + "Img").appendChild(img);
        imgObj = img;

    }

    function saveMap() {
        var img = imgObj;//document.getElementById("ssssssssssss").getElementsByTagName("img");
        //2.svg转成canvas
        var canvas = document.createElement('canvas'); //准备空画布
        canvas.width = img.width;
        canvas.height = img.height;

        var context = canvas.getContext('2d'); //取得画布的2d绘图上下文
        context.drawImage(img, 0, 0);

        //var a = document.createElement('a');
        //a.href = canvas.toDataURL('image/png');  //将画布内的信息导出为png图片数据
        //a.download = "MapByMathArtSys";  //设定下载名称
        //a.click(); //点击触发下载

        //3. 图片导出为 png 格式
        var type = 'png';
        var imgData = canvas.toDataURL(type);

        imgData = imgData.replace(_fixType(type), 'image/octet-stream');
        // 下载后的图片名
        var filename = 'baidufe_' + (new Date()).getTime() + '.' + type;
        // download
        saveFile(imgData, filename);
    }

    var _fixType = function(type) {
        type = type.toLowerCase().replace(/jpg/i, 'jpeg');
        var r = type.match(/png|jpeg|bmp|gif/)[0];
        return 'image/' + r;
    };

    var saveFile = function(data, filename) {
        var save_link = document.createElementNS(
                'http://www.w3.org/1999/xhtml', 'a');
        save_link.href = data;
        save_link.download = filename;

        var event = document.createEvent('MouseEvents');
        event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0,
                false, false, false, false, 0, null);
        save_link.dispatchEvent(event);
    };
    
    //将图片转成base64数据格式
    function toBase64(id){
        //#target是目标图标,我们需要将其转换为base64格式
        var c=document.createElement("canvas");
        //设置canvas宽高为图片宽高
        c.width=$(id).width;
        c.height=$(id).width;
        //将图片绘制到canvas
        var cxt=c.getContext("2d");
        var img=new Image();
        img.src=$(id).attr('src');
        
        cxt.drawImage(img,0,0);
        //得到图片的base64编码数据
        var dd=c.toDataURL();
        //log出图片base64数据
        return dd;
    }
    
    
</script>
</html>

    

mail:1251767927@qq.com


 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值