百度离线地图JS API V3.0

百度离线地图JS API V3.0nbsp nbsp nbsp nbsp 首先 百度地图 JavaScriptAP 0 版本与 2 0 版本相比增加了几个小功能 整体没有大的改动 具体可以在官网上查阅 于是就照着先前大佬们分享的 2 0 离线版本进行 3 0 版本的制作 附上大佬链接 最新百度地图 APIV2 0 离线版本 nbsp 感谢大佬的分享 下面开始百度地图离线版 V3 0 的制作 nbsp nbsp nbsp nbsp nbsp nbsp 资源下载地址 https download csdn net d

       首先,百度地图JavaScript API 3.0版本与2.0版本相比增加了几个小功能,整体没有大的改动,具体可以在官网上查阅。于是就照着先前大佬们分享的2.0离线版本进行3.0版本的制作,附上大佬链接:最新百度地图API V2.0 离线版本  感谢大佬的分享。下面开始百度地图离线版V3.0的制作:

       资源下载地址:https://download.csdn.net/download/wml00000/10692583   

       百度云链接:https://pan.baidu.com/s/1IM-pcrhbXi–O964L7RJBg 密码:v5dv

1.JS API文件下载

       访问这个地址http://api.map.baidu.com/api?v=3.0  ,这个是引入在线js文件时的地址,打开之后是一段代码,在代码中找到  src = “http://api.map.baidu.com/getscript?v=3.0&ak=&services=&t=819” ,打开这个地址,就可以看到压缩后的js代码,把这些代码粘下来,保存到本地上,就先保存在bmap_offline_api_v3.0_min.js文件里。在粘代码之前可以先格式化一下,以便下面查看与修改,利用谷歌浏览器自带的pretty print(就是下面那个红圈里的大括号工具)就可以,将格式化好的代码粘下来保存。

百度离线地图JS API V3.0

2.修改保存到本地的js文件

2.1屏蔽ak验证

function oa(a, b) { if (/^http/.test(a)) return;//修改 屏蔽ak验证,若调用外部资源直接返回 if (b) { var c = (1E5 * Math.random()).toFixed(0); B._rd["_cbk" + c] = function(a) { b && b(a); delete B._rd["_cbk" + c] } ; a += "&callback=BMap._rd._cbk" + c } var e = L("script", { type: "text/javascript" }); e.charset = "utf-8"; e.src = a; e.addEventListener ? e.addEventListener("load", function(a) { a = a.target; a.parentNode.removeChild(a) }, t) : e.attachEvent && e.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(e); e = s }, 1) }

定位到上面代码,将带注释那行加上,千万别定位错了。

2.2引用本地工具资源

百度地图提供的各种图层类,标记类,控件类等等都可以看作是modules,当你在地图中用到这些模块时,它会自动加载,因此我们需要先把这些模块的js文件下载下来,保存到本地。定位到下面代码,没数错的话,一共是44个模块。

var Ub = { //修改,这里是所有的模块,用到时自动加载(在线),离线的话要先下载下来放到本地,如 //http://api0.map.bdimg.com/getmodules?v=3.0&mod=模块1,模块2 //模块命名格式是map_dbwcej,直接拼接起来 map: "dbwcej", common: "wkrfcz", style: "fkofpc", tile: "ok3b3m", vectordrawlib: "4pdipq", newvectordrawlib: "wbnuee", groundoverlay: "ekozhc", pointcollection: "feabuc", marker: "00uyqy", symbol: "cq3a5n", canvablepath: "dia5aw", vmlcontext: "phwtog", markeranimation: "rfnmxu", poly: "r52vuo", draw: "jb4osz", drawbysvg: "vxyn51", drawbyvml: "whxm", drawbycanvas: "ufwkvb", infowindow: "wtflsn", oppc: "10riq5", opmb: "2c1ejz", menu: "152mop", control: "hlzh1t", navictrl: "h32mnb", geoctrl: "xprajs", copyrightctrl: "gmc2ps", citylistcontrol: "ms3ahy", scommon: "oadc3d", local: "k0pcpi", route: "v4yyam", othersearch: "pwg4ey", mapclick: "e40viw", buslinesearch: "vxmb31", hotspot: "vuwxs4", autocomplete: "punr3o", coordtrans: "lmf5kv", coordtransutils: "d33qf1", convertor: "d0ze2w", clayer: "0hwrfx", pservice: "j5tlrp", pcommon: "yqek4k", panorama: "jbqj24", panoramaflash: "dm4xq2", vector: "2hrruc" };

为了便于修改主文件里的一些内容,先创建一个map_load.js文件,加入下面代码:

var bmapcfg = { 'imgext' : '.jpg', //瓦片图的后缀 根据需要修改,一般是 .png .jpg 'tiles_dir' : '', //普通瓦片图的地址,为空默认在tiles/ 目录 }; var scripts = document.getElementsByTagName("script"); var JS__FILE__ = scripts[scripts.length - 1].getAttribute("src"); //获得当前js文件路径 bmapcfg.home = JS__FILE__.substr(0, JS__FILE__.lastIndexOf("/")+1); //地图API主目录 (function(){ window.BMap_loadScriptTime = (new Date).getTime(); //加载地图API主文件 document.write(''); })();

在bmap_offline_api_v3.0_min.js文件中定位到   B.url.domain.main_domain_cdn.baidu[0]    ,将其所在行注释掉,加上这行

B.ka = bmapcfg.home;  //修改,本地工具资源引用(离线路径),如图:

百度离线地图JS API V3.0

然后再通过 &mod  进行定位,注释掉其所在行,做如下修改:

 f.Rd.Hn.length = 0; //0 == a.length ? f.kL() : oa(f.wG.tQ + "&mod=" + a.join(",")) // 修改 加载本地模块文件,在 modules 目录下 console.log(a); //打印所需模块 if( a.length > 0 ){ for(i=0; i 
  

这时候就可以创建modules文件夹,添加所需模块的js文件,注意命名格式,js代码可以这么获取:http://api0.map.bdimg.com/getmodules?v=3.0&mod=map_dbwcej

保存js文件时文件名也是这样如map_dbwcej.js

2.3加载瓦片改为本地离线瓦片

定位到如下代码,做相应修改:

md.getTilesUrl = function(a, b, c) { var e = a.x , a = a.y , f = Sb("normal") , g = 1 , c = ld[c]; //this.map.Sx() && (g = 2); //修改 //e = this.map.Va.Lw(e, b).hs; //return (kd[Math.abs(e + a) % kd.length] + "?qt=tile&x=" + (e + "").replace(/-/gi, "M") + "&y=" + (a + "").replace(/-/gi, "M") + "&z=" + b + "&styles=" + c + "&scaler=" + g + (6 == z.ca.ia ? "&color_dep=32&colors=50" : "") + "&udt=" + f).replace(/-(\d+)/gi, "M$1") tdir = bmapcfg.tiles_dir.length>0?bmapcfg.tiles_dir:bmapcfg.home + "tiles"; return tdir + "/" + b + "/" + e + "/" + a + bmapcfg.imgext; // 使用本地的瓦片 }

3.Demo测试

建一个demo.html

 
   
    
    Hello, World 
     
     
    

运行前一定要准备好相关文件,如modules文件夹里的js文件,tiles文件夹里的切片,还有一些图标文件,文件大概如下:

百度离线地图JS API V3.0

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205228.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午6:30
下一篇 2026年3月19日 下午6:30


相关推荐

  • 智能风控平台核心之风控决策引擎(二)

    智能风控平台核心之风控决策引擎(二)本文摘要 信贷风控策略建设思路 决策引擎主要功能适用阅读人群 互金产品人员 互金模型人员 互金研发人员在风控决策引擎 一 中 只是对风控决策引擎的核心功能规则 评分卡 模型 表达式 决策流等模块做了简介 大数据风控 大数据输入决策引擎通过规则 评分卡 模型 表达式 决策流等功能模块就能输出理想的风控结果了吗 实际业务中的风控流程依靠这几个功能模块是无法完全达到风控目的 成熟的风控方案有一套严谨的策略体系 风控决策引擎要结合风控策略体系 最终才能达到风险控制的目标 大数据风控通用流

    2026年3月18日
    2
  • SSM整合案例(超详细)「建议收藏」

    SSM整合案例(超详细)「建议收藏」SSM整合案例(超详细)环境准备前提须知创建数据库和表结构创建Maven工程ssm导入坐标并建立依赖编写实体类编写持久层接口编写业务层接口编写业务层实现类编写Controller整合步骤保证Spring框架在web工程中独立运行第一步:编写spring配置文件并导入约束第二步:使用注解配置业务层第三步:导入log4j.properties配置文件第四步:测试spring能否独立运行保证SpringMVC在web工程中独立运行第一步:在web.xml中配置核心控制器(Dis

    2022年4月28日
    107
  • Typora+PicGo+Gitee+坚果云实现Win+Linux+手机端完美Markdown云笔记套件

    Typora+PicGo+Gitee+坚果云实现Win+Linux+手机端完美Markdown云笔记套件Typora+PicGo+Gitee+坚果云实现Win+Linux+手机端完美Markdown云笔记套件写在前面Typora是什么?PicGo是什么?为什么用Gitee?为什么用坚果云?1.安装Typora2.安装PicGo3.安装nodejs4.安装Gitee插件5.注册并配置Gitee6.配置PicGo的Gitee图床设置7.配置Typora的图床8.手机端查看写在前面关于笔记软件,多年…

    2022年5月12日
    61
  • 莫比乌斯反演入门讲解

    莫比乌斯反演入门讲解莫比乌斯反演实际上是一两个公式定理的运用 自认为想要掌握它的话 其中的证明还是有必要了解的 看过网上一些博客 感觉都只证明了一半 没看到有人将这个定理完全证明出来 然而我最近在正好在学习初等数论 发现完全证明这个定理实际上并不需要很多知识 特此填坑 另外加上一些应用以构成完整的讲解 实际上 这个定理的证明用到了一点数论函数相关知识 前置技能在此 https blog csdn net t

    2026年3月18日
    2
  • 过滤器与拦截器详解图_过滤器 拦截器

    过滤器与拦截器详解图_过滤器 拦截器过滤器详解依赖于servlet容器,实现基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,过滤器一般用于登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换等等操作,便于代码重用,不必每个servlet中进行冗余操作。Java中的Filter并不是一个标准的Servlet,它…

    2022年8月23日
    8
  • hashmap线程不安全问题_为什么HashMap线程不安全

    hashmap线程不安全问题_为什么HashMap线程不安全HashMap的线程不安全主要体现在下面两个方面:1.在JDK1.7中,当并发执行扩容操作时会造成环形链和数据丢失的情况。2.在JDK1.8中,在并发执行put操作时会发生数据覆盖的情况。JDK1.7在JDK1.7中,扩容数据时要进行把原数据迁移到新的位置,使用的方法://数据迁移的方法,头插法添加元素voidtransfer(Entry[]newTable,booleanrehash){intnewCapacity=newTable.length;     

    2022年10月11日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号