echarts + 离线百度地图 + 散点图配置

article/2025/11/7 4:38:37

最近在做一个国网的一个项目,需要实现一些散点图的标注等;而且需要在内网使用,感觉使用 echarts 就可以简单的实现无需加载类似 openlayers ,leaflet 等 webgis 框架然后再发布地图服务实现。

实现思路 :

  • 百度地图API文件
  • 创建本地工具资源文件getModules.js
  • 地图瓦片

百度地图API文件

首先需要准备离线的百度地图 API 文件,浏览器打开地址:http://api.map.baidu.com/api?v=2.0,不需要申请 key,当然申请也是可以的;打开之后如下:

(function(){ window.BMap_loadScriptTime = (new Date).getTime(); document.write('<script type="text/javascript" src="http://api.map.baidu.com/getscript?v=2.0&ak=&services=&t=20230104104957"></script>');})();

复制 script 加载的 src 地址,在浏览器中打开;如下:
在这里插入图片描述
然后复制里面的内容,保存到自己的项目中命名为:baiduApi.js;这个名字随意起;

可以将复制的百度地图API的代码在 https://www.bejson.com/jshtml_format/这里进行格式化;这样看的比较清楚。

修改API文件

在这里插入图片描述


function pa(a, b) {// 下面是需要添加的代码// 如果是调用外部资源就退出去if (/^http/.test(a)) return;if (b) {var c = (1E5 * Math.random()).toFixed(0);z._rd["_cbk" + c] = function(a) {b && b(a);delete z._rd["_cbk" + c]};a += "&callback=BMap._rd._cbk" + c}var d = K("script", {type: "text/javascript"});d.charset = "utf-8";d.src = a;d.addEventListener ? d.addEventListener("load",function(a) {a = a.target;a.parentNode.removeChild(a)},q) : d.attachEvent && d.attachEvent("onreadystatechange",function() {var a = window.event.srcElement;a && ("loaded" == a.readyState || "complete" == a.readyState) && a.parentNode.removeChild(a)});setTimeout(function() {document.getElementsByTagName("head")[0].appendChild(d);d = p},1)}

创建本地工具资源文件getModules.js

继续在我们保存的百度地图API中搜索 domain.main_domain_cdn.baidu[0],找到使用它的地方,修改为’';
在这里插入图片描述

 if (!this.map.Wb() && (a ? this.map.B.l0 = a: a = this.map.B.l0, a)) for (var c = p,c = "2" == B.xz ? [''] : ['', B.url.proto + B.url.domain.main_domain_cdn.baidu[1] + "/", B.url.proto + B.url.domain.main_domain_cdn.baidu[2] + "/"], d = 0, e; e = this.an[d]; d++) if (e.OO == o) 

加载模块短路处理

首先创建一个我们本地工具模块保存的脚本,本项目中命名为getModules.js;
然后在我们保存的百度地图API中搜索搜索 &mod=,替换。那个 console.log(a),是为了给后面创建getModules.js,用于打印出需要加载的工具模块;注意这里的函数 pa,就是我们前面去掉ak验证:添加 if (/^http/.test(a)) return;的方法。
在这里插入图片描述

  load: function(a, b, c) {var d = this.jb(a);if (d.Dd == this.Mj.Aq) c && b();else {if (d.Dd == this.Mj.XG) {this.TK(a);this.iO(a);var e = this;e.gD == q && (e.gD = o, setTimeout(function() {for (var a = [], b = 0, c = e.Sd.Xn.length; b < c; b++) {var d = e.Sd.Xn[b],l = "";ka.qz.NK(d) ? l = ka.qz.get(d) : (l = "", a.push(d + "_" + Jc[d]));e.Sd.uw.push({zN: d,qF: l})}e.gD = q;e.Sd.Xn.length = 0;// 0 == a.length ? e.EL() : sa(e.QG.OQ + "&mod=" + a.join(","))0 == a.length ? e.EL() : sa('/static/plugins/getModules.js')console.log(a, '1231地图')},1));d.Dd = this.Mj.xQ}d.ov.push(b)}},

创建本地工具资源文件getModules.js

在这里面放API需要调用的模块,上面打印的数组a里面是需要请求的模块,打印出来,通过下面方式获取,放到getmodules.js,例如 canvablepath_lf42rt2, 通过http://api0.map.bdimg.com/getmodules?v=2.0&t=20230207&mod=canvablepath_lf42rt2下载。

复制内容保存到getmodules.js文件中,注意:将我们上一步骤打印的a中所有的内容都需要按照这种方法保存到getmodules.js文件中;

下载地图瓦片

获取瓦片请求地址

在保存的百度地图API脚本中搜索getTilesUrl方法:
在这里插入图片描述

Zd.getTilesUrl = function(a, b, c) {var d = a.x,a = a.y,e = Wb("normal"),f = 1,c = Yd[c];this.map.jy() && (f = 2);d = this.map.fb.Ds(d, b).tm;var nURL = (Xd[Math.abs(d + a) % Xd.length] + "?qt=vtile&x=" + (d + "").replace(/-/gi, "M") + "&y=" + (a + "").replace(/-/gi, "M") + "&z=" + b + "&styles=" + c + "&scaler=" + f + (6 == x.da.ma ? "&color_dep=32&colors=50": "") + "&udt=" + e + "&from=jsapi2_0").replace(/-(\d+)/gi, "M$1")window.xxxUrls =  window.xxxUrls || [];var nname = 'tiles' + '/' + b + '/' + d + '/' + a + '.png'var urlArr = {url: nURL,name: nname}window.xxxUrls.push(urlArr)console.log(nname,nURL,'123456')return nURL}

我们将每个瓦片请求的地址存放到了window.xxxUrls 数组中;在浏览器中打印该数组。
先对地图进行拖拽,确保想要的省市都出现在窗口可视范围内,然后会将每个瓦片请求的地址保存到window.xxxUrls 数组中;不过需要放大到每个级别然后进行拖拽显示完成整个需要下载的范围。这样保证将指定级别获取所有范围图片的地址。

下载瓦片

首先获取到window.xxxUrls 数组中的数据,可以在前端发送 ajax请求,然后进行下载。只做了简单的下载,直接在浏览器中打印window.xxxUrls 数组,然后复制内容,到下面down.js文件:

const imgArr = [{"url":"http://maponline3.bdimg.com/tile/?qt=vtile&x=6327&y=2356&z=15&styles=pl&scaler=1&udt=20200514&from=jsapi2_0","name":"tiles/15/6327/2356.png"}]
const newArr = new Set(imgArr); //去重
const finalArr = Array.from(newArr);
//创建目录
const fs = require('fs');
// const axios = require('axios');const request = require('request');
const path = require('path')const hostdir = "./";
function mkdirSync(dirname) {if (fs.existsSync(dirname)) {return true;} else {if (mkdirSync(path.dirname(dirname))) {  fs.mkdirSync(dirname);return true;}}return false
}
var n = 0;
for (const item of finalArr) {const last = item.name.lastIndexOf('/')if (last > 0) {const name = item.name.substr(last + 1)const dir = item.name.substr(0, last)const dstpath = hostdir + dir + '/' + nameif (name.length && dir.length && !fs.existsSync(dstpath)) {if (mkdirSync(hostdir + dir)) {++ n;request(item.url).pipe(fs.createWriteStream(dstpath))}}}
}

然后运行命令 node down.js,执行完之后就会看到下载的tiles文件夹.
也可以使用第三方工具下载瓦片。推荐使用 Bigemap GIS Office

使用离线瓦片进行加载

还是找到我们刚刚修改的getTilesUrl的位置,修改如下:
注意加载的tiles文件夹的地址要写正确。

Zd.getTilesUrl = function(a, b, c) {var x=a.x,y=a.y,e=1,z=a// return '/static/plugins/tiles/'+b+"/"+x+'/'+y+'.png'return '/static/plugins/tiles/'+b+"/"+x+'/'+y+'.png'};

其他:使用离线api和地图时,发现地图出现空白的正方形图块。

在这里插入图片描述

修改离线api 的另一个getTilesUrl 方法。
在这里插入图片描述

e.getTilesUrl = function(b, d) {// var e = b.x,//   e = this.map.fb.Ds(e, d).tm,//   j = b.y,//   l = Wb("normal"),//   m = 1;// this.map.jy() && (m = 2);// l = "customimage/tile?qt=customimage&x=" + e + "&y=" + j + "&z=" + d + "&udt=" + l + "&scale=" + m + "&ak=" + ra;// l = a.styleStr ? l + ("&styles=" + encodeURIComponent(a.styleStr)) : l + ("&customid=" + a.style);// l = c[Math.abs(e + j) % c.length] + l;// return l = Gc(l)// 下面是修改的代码,上面是旧代码var x=b.x,y=b.y,m=1,l = Wb("normal")// return '/static/plugins/tiles/'+b+"/"+x+'/'+y+'.png'return '/static/plugins/tiles/'+d+"/"+x+'/'+y+'.png'};

这样就完成了百度地图的离线加载。

echart 中加载百度地图

首先项目中使用我们下载的百度地图api文件,有两种方式,一种是在public文件夹下的index.html中直接使用、

  <script src="./static/plugins/echarts-4.8.0/echarts.min.js"></script><script src="./static/plugins/baiduApi.js"></script>

另一种是直接在项目的入口文件引入。

import '../static/plugins/baiduapi.js'

FAQ
echarts示列
百度地图3.0离线地图教程和echarts的结合使用

参考


http://chatgpt.dhexx.cn/article/g5emGutF.shtml

相关文章

百度地图api离线开发(示例源代码)

相关教程&#xff1a; 1、如何搭建WEB离线地图开发环境 2、下载离线地图数据(金字塔瓦片数据&#xff09; 3、离线地图二次开发接口&#xff08;离线地图API&#xff09; 4、离线地图API接口实例DEMO 5、离线地图完整演示实例 说明&#xff1a; 1. 当前版本支持 谷歌电子/卫星…

百度地图离线版

[Java] 地图瓦片下载器&#xff0c;支持百度、高德、谷歌地图的瓦片下载&#xff0c;内置三大厂家的js离线api [复制链接] 地图瓦片下载器&#xff0c;支持百度地图、高德地图、谷歌地图瓦片下载&#xff1b;另有百度地图、高德地图、谷歌地图API离线版支持百度、高德、谷歌…

百度地图离线开发2.0

目录 项目运行环境 在html中所有的元素都是可以选中的,在地图中也可以的,选中时整个地图会出现蓝色的选中效果,要去除这种现象可以使用下面样式设置 设置地图显示的最大、最小级别 设置地图显示范围,超出范围后自动回弹 移动地图,地图将自动从一个地方到拎另一个地方 缩放…

Android 百度离线地图下载完后调用下载好的离线包

前言 最近公司项目需求添加百度地图离线下载后离线地图查看功能&#xff0c;本以为看着文档写一下就行了&#xff0c;看了文档后发现百度文档着实坑爹&#xff0c;文档与实际开发不符合&#xff0c;网上搜了一下&#xff0c;也没搜到切实有用的文章&#xff0c;遂决定写一篇&…

Android百度地图(四)如何引入离线地图包

Android百度地图&#xff08;四&#xff09;如何引入离线地图包 本文代码在http://blog.csdn.net/xyzz609/article/details/51955363的基础上进一步修改&#xff0c;有兴趣的同学可以研究下怎么修改的 本篇我们准备为地图添加&#xff1a;引入离线地图包 本文参考的是http:/…

如何下载百度地图离线包并导入OruxMaps

一、什么是OruxMaps OruxMaps是一款支持本地离线地图包的地图应用&#xff0c;适合户外旅行&#xff0c;同时也支持加载OpenStreetMap在线地图&#xff0c;可以导入OZI格式并转换制作成自己的地图&#xff0c;它还可以记录、保存导入航迹、航点并统计相关信息并提供校准功能。…

WinEdit如何修改字体大小

1、在help一栏的后面空白处&#xff0c;右键出现下图 2、点击Options Interface&#xff0c;出现下图&#xff1a; 3、点击Font&#xff0c;出现下图&#xff0c;在FontSize处修改 4、保存Font文件&#xff0c;右键选择Load Script。

WinEdit编辑器中中文乱码

这个问题困扰了我很久。我的电脑上装的CTEX的最新版本&#xff0c;原来我的系统是windows 7 64位系统。装好了CTEX之后&#xff0c;在里面可以直接输入中文&#xff0c;显示和编译生成的PDF文件都正常。但是后来系统崩溃了一次就装回了Windows XP SP3系统。这次装好CTEX之后&am…

WinEdit初使用

下载了CTex和各种文档&#xff0c;还是没搞懂怎么用。大部分文献都是讲解语法&#xff0c;对于我这个菜鸟来说&#xff0c;简单的hello world 都编不出来&#xff0c;对语法就更看不下去了&#xff0c;终于在百度和摸索中得到了hello world。 1、新建一个文档&#xff0c;大家…

解决 winedit 打开tex文件 reading error(亲测可行)

从网上下载的论文模板&#xff0c;发现直接双击打开.tex文件&#xff08;默认关联用winedit打开&#xff09;时会出现reading error&#xff0c;然后看不到任何文字&#xff08;网上有人讨论打开是乱码的问题&#xff0c;但是我的是完全看不到任何东西&#xff09;&#xff0c;…

Winedit修改快捷键

工欲善其事必先利其器&#xff0c;疫情期间只能在家办公&#xff0c;一个小小笔记本没有两个大屏幕来的舒服&#xff0c;因此为了最大化利用屏幕大小&#xff0c;将所有的界面全部隐藏。但是每次编译的时候&#xff0c;我习惯用pdflatex选项&#xff0c;但是wineidt没有设定其快…

winedt103系统找不到指定文件_latex排版(CTeX winEdit输出“系统找不到指定的文件”的终极解决办法)...

这个问题好像经常出现在Win7系统下。winEdit输出“系统找不到指定的文件”&#xff0c;这里“指定的文件”是“TeXify.exe”等需要运行的程序&#xff0c;而不是当前需要编译的“.tex”文件。所以&#xff0c;问题的本质就是系统找不到“TeXify.exe”等可执行文件&#xff0c;解…

winedit 永久试用的办法

软件把安装信息放在注册表里面这种做法真是方便了我等草民啊。 打开CMD。 运行下面的命令。 reg delete "HKEY_CURRENT_USER\Software\WinEdt 7" /v "Install Build" /f reg delete "HKEY_CURRENT_USER\Software\WinEdt 7" /v "Install Roo…

如何粘贴winedit编辑器console中的错误文本信息

补充一个小技巧 如何粘贴winedit便捷器console中的错误文本信息&#xff0c;如下图所示&#xff0c;是报错的信息&#xff0c; 我们点击如下图所示的复制按钮 然后打开记事本粘贴即可 然后使用ctrlf键搜索错误的前两个单词&#xff08;或者一个&#xff09;之后就可以复制错误信…

WinEdit 的algorithm2e包自定义一个带竖线的模块代码

WinEdit 的algorithm2e包自定义一个带竖线的模块 代码 \documentclass{ctexart} \usepackage[linesnumbered,ruled,vlined]{algorithm2e} \begin{document} \begin{algorithm} \caption{The pseudocode of solution procedures} \label{Algo:SoluStep} \KwIn{all data involv…

安装miktex+winedit

1.前言 在使用latex写作编辑英文论文时&#xff0c;最近被安利推荐miktexwinedit&#xff0c;来实现写作工具的准备。 网上资料显示&#xff0c;用Latex排版文档&#xff0c;首先要用文本编辑器编辑好tex文档&#xff0c;然后通过各种程序编译&#xff0c;得到pdf文档用于打印…

如何使用bibtex插入参考文献(基于WinEdit)

如何使用bibtex插入参考文献&#xff08;基于WinEdit&#xff09; 目录第一大步:下载被引用文章的bib引用第二大步:在论文论文添加引用信息第三大步&#xff1a;编译排版结果注意事项编写心得 目录 第一大步:下载被引用文章的bib引用 第二大步:在论文正文添加引用信息 第三大步…

text生成pdf之ctexwineditmiktexgbk2uni的安装使用方法

因为工作原因&#xff0c;需要将.tex文件转成pdf文档。于是进行了winedit及ctex文件安装&#xff0c;但发现走了一些弯路。为了避免再有同行走相同的弯路&#xff0c;于是我将相关的经验写下来&#xff0c;供大家参考。 一&#xff1a;误区 从www.winedt.com网站上下载winedt安…

Winedit 下载第三方库

在用 Winedit 编译 tex 文件时&#xff0c;出现如下错误&#xff1a; ! LaTeX Error: File threeparttable.sty not found. 出现该错误时&#xff0c;一般是我们的 Winedit 下的编译器缺乏相应的第三方库&#xff0c;此时只需要去网站上下载相应的库即可&#xff0c;这里推荐&a…

Winedit 找不到包错误解决方法

没错&#xff0c;我是一个Winedit初学者。但我有信心一天搞会他 这个问题感觉以后会很常见&#xff0c;害怕自己将来忘了&#xff0c;于是特此记忆。并给一起处于新手阶段的朋友们一个友好的解答。 首先从CTAN网站上下载这个包 simplewick 居然没有.sty文件&#xff0c;佛了。…