百度地图做成图片

这两天接到一个需求,是通过百度生成的轨迹制作成一个图片,好废话不多说,上干货

注释:这里我是用react编写的,不过代码逻辑都一样,看的懂就会搬运,不懂出可以留言,我会及时回复,每天每时都在

全部代码

import React, { useEffect } from 'react'
declare const BMapGL: any;
import html2canvas from 'html2canvas'
let bmap: any;
const Map = () => {
  const downLoad = (png: any) => {
    //创建一个a标签
    const a = document.createElement('a')
    //指定下载文件名称
    a.href = png;
    a.download = '截图'
    //a 标签 需要点击触发。所以强制给他分派一个点击事件
    //创建一个鼠标事件
    const event = document.createEvent("MouseEvents")
    // 初始化鼠标事件
    event.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
    // 指定元素对象触发事件
    a.dispatchEvent(event)
  };
  const screenShot = () => {
    const element: any = document.getElementById('container')
    const options = {
      useCORS: true,
      // preserveDrawingBuffer: true,
      //foreignObjectRendering: true,
      allowTaint: true,
    };

    html2canvas(element, options).then(canvas => {
      const png = canvas.toDataURL("image/png") //拿到截图后转换为png图片
      const img = document.createElement('img')
      img.setAttribute('src', png)
      window.document.body.appendChild(img) //将png图片添加到页面验证
      console.log('png:', png)
      downLoad(png)
    })
  };
  useEffect(() => {
    bmap = new BMapGL.Map("container");
    const point = new BMapGL.Point(116.404, 39.915);
    // bmap.centerAndZoom(point, 15);
    bmap.enableScrollWheelZoom(true);
    bmap.centerAndZoom(new BMapGL.Point(116.404, 39.915), 11);

    const p1 = new BMapGL.Point(116.301934, 39.977552);
    const p2 = new BMapGL.Point(116.508328, 39.919141);

    const driving = new BMapGL.DrivingRoute(bmap, { renderOptions: { map: bmap, autoViewport: true } });
    driving.search(p1, p2);
  }, [])
  return (
    <div style={{ width: "100%", height: "100%" }}>
      <button onClick={screenShot}>下载</button>
      {/* <div id="r-result">请输入:<input type="text" id="suggestId" style={{ width: "200px" }} /></div> */}
      <div id="container" style={{ width: "100%", height: "100%" }}></div>
    </div>
  )
}

export default Map

该代码会展示一个空白的地图

 在index.htlm文件中加入改代码,用来解决空白问题

<script>

  HTMLCanvasElement.prototype.getContext = function (origFn) {
      return function (type, attributes) {
        if (type === 'webgl') {
          attributes = Object.assign({}, attributes, {
            preserveDrawingBuffer: true,
          });
        }
        return origFn.call(this, type, attributes);
      };
    }(HTMLCanvasElement.prototype.getContext);
</script>

流程

一、展示地图

1、在根文件index.html中引入百度地图

  <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.0&type=webgl&ak=你的key"></script>

2、展示地图并显示轨迹

由于我这边用的时ts的语法,用使用要仔细观看

import React, { useEffect } from 'react'
declare const BMapGL: any;
let bmap: any;
const Map = () => {

  useEffect(() => {
    bmap = new BMapGL.Map("container");
    const point = new BMapGL.Point(116.404, 39.915);
    bmap.centerAndZoom(new BMapGL.Point(116.404, 39.915), 11);
    bmap.enableScrollWheelZoom(true);
    const p1 = new BMapGL.Point(116.301934, 39.977552);
    const p2 = new BMapGL.Point(116.508328, 39.919141);
    const driving = new BMapGL.DrivingRoute(bmap, { renderOptions: { map: bmap, autoViewport: true } });
    driving.search(p1, p2);
  }, [])
  return (
    <div style={{ width: "100%", height: "100%" }}>
      {/* <button onClick={screenShot}>下载</button> */}
      {/* <div id="r-result">请输入:<input type="text" id="suggestId" style={{ width: "200px" }} /></div> */}
      <div id="container" style={{ width: "100%", height: "100%" }}></div>
    </div>
  )
}

export default Map

效果图:

 二、开始制作百度地图图片

1、首先下载一个第三方包html2canvas

npm i html2canvas  / yarn add html2canvas

2、我们需要在index.htlm文件中修改这个包在展示地图的时候空白问题

<script>

  HTMLCanvasElement.prototype.getContext = function (origFn) {
      return function (type, attributes) {
        if (type === 'webgl') {
          attributes = Object.assign({}, attributes, {
            preserveDrawingBuffer: true,
          });
        }
        return origFn.call(this, type, attributes);
      };
    }(HTMLCanvasElement.prototype.getContext);
</script>

3、我们可以制作一个点击按钮,给他加点击事件,到这差不多就结束了,点击按钮就可以下载图片了

  const downLoad = (png: any) => {
    //创建一个a标签
    const a = document.createElement('a')
    //指定下载文件名称
    a.href = png;
    a.download = '截图'
    //a 标签 需要点击触发。所以强制给他分派一个点击事件
    //创建一个鼠标事件
    const event = document.createEvent("MouseEvents")
    // 初始化鼠标事件
    event.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
    // 指定元素对象触发事件
    a.dispatchEvent(event)
  };
  const screenShot = () => {
    const element: any = document.getElementById('container')
    const options = {
      useCORS: true,
      // preserveDrawingBuffer: true,
      //foreignObjectRendering: true,
      allowTaint: true,
    };

    html2canvas(element, options).then(canvas => {
      const png = canvas.toDataURL("image/png") //拿到截图后转换为png图片
      const img = document.createElement('img')
      img.setAttribute('src', png)
      window.document.body.appendChild(img) //将png图片添加到页面验证
      console.log('png:', png)
      downLoad(png)
    })
  };

下载下来的效果图(备注:这个是通过公司的经纬度数据产生的数据)

 到这差不多就结束

完美结束,完结撒花

把网上电子地图的图片下载到本地. 因为网上电子图片是分缩放级别的,可以直接将所有级别或才定制级别的图片下载下来,会放到相应的文件夹里面.可供使用百度地图引擎的程序直接使用. 不好意思,定这么高的分,如果您分不够,可以给我发邮件,我把程序发给您. 双面GetBaiduMapPic\bin\Debug\GetBaiduMapPic.exe来运行程序, 第一步:填写好经度开始,经度结束。 第二步:填写好纬度开始,纬度结束。 第三步:选择缩放级别开始,也就是从第几级的缩放开始下载。 第四步:选择绽放级别结束,也就是到第几级的缩放结束下载百度的地图缩放是0-13个级别,我们可以从中选择。只要开始不要大于结束即可。 第五步:点击“开始生URL”按钮。此时在下面左边的列表里面会显示出生下载图片地址列表。 第六步:点击“选择存储位置”按钮,找到一个位置,用来存放配置文件及要下载图片的位置。不要忘记文件名处要填写一个名字,自己随意起就好了。填好后点击保存。 第七步:点击“导出XML”按钮,这样便会将刚刚显示的要下载的文件列表保存到了XML文件中。 第八步:点击“开始获取”按钮,便会将百度的电子地图图片下载到本地了。就是您刚才放置XML文件位置。 如果有失败的地址,则点击“失败地址导出XML”,便可以将地址导出。以便重新进行读取下载。 在使用中如果遇到问题可以致 Email:lyx830621@163.com 声明:本程序只用作技术研究,软件使用自愿,若引起百度等网站纠纷与本人无关,请自行决定是否使用。
【旧,请下载新版本,旧版本已经无法正常使用。】 ver4.0下载地址:http://download.csdn.net/source/2262685 把网上电子地图的图片下载到本地. 因为网上电子图片是分缩放级别的,可以直接将所有级别或才定制级别的图片下载下来,会放到相应的文件夹里面.可供使用百度地图引擎的程序直接使用. 不好意思,定这么高的分,如果您分不够,可以给我发邮件,我把程序发给您. 双面GetBaiduMapPic\bin\Debug\GetBaiduMapPic.exe来运行程序, 第一步:填写好经度开始,经度结束。 第二步:填写好纬度开始,纬度结束。 第三步:选择缩放级别开始,也就是从第几级的缩放开始下载。 第四步:选择绽放级别结束,也就是到第几级的缩放结束下载百度的地图缩放是0-13个级别,我们可以从中选择。只要开始不要大于结束即可。 第五步:点击“开始生URL”按钮。此时在下面左边的列表里面会显示出生下载图片地址列表。 第六步:点击“选择存储位置”按钮,找到一个位置,用来存放配置文件及要下载图片的位置。不要忘记文件名处要填写一个名字,自己随意起就好了。填好后点击保存。 第七步:点击“导出XML”按钮,这样便会将刚刚显示的要下载的文件列表保存到了XML文件中。 第八步:点击“开始获取”按钮,便会将百度的电子地图图片下载到本地了。就是您刚才放置XML文件位置。 如果有失败的地址,则点击“失败地址导出XML”,便可以将地址导出。以便重新进行读取下载。 在使用中如果遇到问题可以致 Email:lyx830621@163.com 声明:本程序只用作技术研究,软件使用自愿,若引起百度等网站纠纷与本人无关,请自行决定是否使用。 因百度算法变更,现已无法使用。敬请期待最新版。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值