百度离线地图JS API V3.0

首先,百度地图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=20180823175819" ,打开这个地址,就可以看到压缩后的js代码,把这些代码粘下来,保存到本地上,就先保存在bmap_offline_api_v3.0_min.js文件里。在粘代码之前可以先格式化一下,以便下面查看与修改,利用谷歌浏览器自带的pretty print(就是下面那个红圈里的大括号工具)就可以,将格式化好的代码粘下来保存。

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: "whxmqq",
        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('<script type="text/javascript" src="'+bmapcfg.home+'bmap_offline_api_v3.0_min.js"></script>');
})();

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

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

然后再通过 &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<a.length;i++){
							mf = bmapcfg.home+'modules/'+a[i]+'.js';
							oa( mf );
							console.log('加载模块文件:'+mf); //IE error
						  }
						} else {
						  f.kL()
						} 
						//就到这
                    }, 1));

这时候就可以创建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测试

<!DOCTYPE html>  
<html>  
    <head>  
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />  
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
        <title>Hello, World</title>  
        <style type="text/css">  
        html{height:100%}  
        body{height:100%;margin:0px;padding:0px}  
        #container{height:100%}  
        </style>  
        
		<script type="text/javascript" src="map_load.js"></script>
        
    </head>  
 
    <body>  
        <div id="container"></div> 
        <script type="text/javascript"> 
            
			var map = new BMap.Map("container")
			var point = new BMap.Point(116.404, 39.915);  // 创建点坐标  
			map.centerAndZoom(point, 6);                 // 初始化地图,设置中心点坐标和地图级别  
        </script>  
    </body>  
</html>

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

感谢作者提供:https://blog.csdn.net/wml00000/article/details/82219015 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 百度离线地图API 2.0 是一种提供离线地图服务的技术接口,可以在没有网络连接的情况下进行地图查询和展示。 通过百度离线地图API 2.0,用户可以下载地图数据并在手机或设备上进行离线使用。这对于在没有网络信号的地方或者处于漫游状态的用户非常有用。离线地图提供了街道图、卫星图和交通图等多种地图样式,用户可以根据实际需求选择合适的地图展示。 离线地图API 2.0 提供了丰富的地图功能,包括地图展示、地图标记、地图搜索、POI信息查询等。用户可以在地图上添加标记、绘制线条、显示文字等操作,实现自定义的地图展示效果。同时,用户可以通过搜索功能查找特定位置,获取周边POI信息以及导航路线等。 百度离线地图API 2.0 还提供了地理编码和逆地理编码功能,可以将地理坐标转换为具体的地址信息,或者将地址信息转换为地理坐标。这对于需要进行地理位置定位和信息显示的应用非常有帮助。 总之,百度离线地图API 2.0 提供了强大且便捷的地图服务,可以在无网络环境下使用,为用户带来了更好的地理信息查询和展示体验。 ### 回答2: 百度离线地图API 2.0是一款提供离线地图服务的应用程序接口,主要针对无网络连接或网络不稳定的情况下,仍能够实现地图功能的需求。它可以帮助开发者在移动设备上嵌入地图数据,实现地图展示、定位、搜索等功能。 离线地图API 2.0具有以下特点: 1. 离线使用:用户只需要下载并安装离线地图数据包,即可在没有网络连接的情况下使用地图功能,大大提高了地图的使用范围和可靠性。 2. 无需联网:该API不需要设备连接互联网即可进行地图展示和操作,不受网络限制,功能可在任何时间、任何地点使用。 3. 自定义功能:开发者可以根据需求自定义地图样式、添加自定义地标和覆盖物,实现个性化地图展示。 4. 高效性能:离线地图数据的使用可以提高地图加载速度和响应速度,减少了对网络和服务器的依赖,提升了地图使用的效率。 通过百度离线地图API 2.0,开发者可以在无网络的环境下实现地图功能,如在偏远地区、地下环境或网络信号不稳定的区域,仍能够准确显示地图和定位信息,为用户提供更好的地图体验。此外,离线地图API 2.0还可以自定义地图样式,满足不同用户群体对地图的个性化需求。 ### 回答3: 百度离线地图API 2.0 是百度地图的一项功能强大的服务,它提供了离线地图及相关功能的开发接口。离线地图是指可以离线使用的地图,也就是在没有网络连接的情况下,用户仍然能够查看地图以及相关信息。 百度离线地图API 2.0 可以用于开发各种应用,如导航软件、地图展示应用等。通过该API,开发者可以获取启动引擎、检索离线数据、渲染地图等功能。用户可以根据自己的需求,将离线地图数据下载到本地设备上,在没有网络的情况下使用。 使用百度离线地图API 2.0,用户可以实现地图的显示、标注、缩放、旋转、平移等常用操作。此外,开发者还可以根据实际需求,添加自定义的图层、覆盖物或者绘制轨迹线等功能,提供更加丰富的地图体验。 百度离线地图API 2.0 在定位服务上也提供了许多功能,如获取当前位置及方向、搜索附近的兴趣点等。用户可以针对自己的实际应用场景,灵活使用这些功能,实现更加精准的定位服务。 总之,百度离线地图API 2.0 是一项强大的地图服务,提供了离线地图的展示、定位及交互功能。无论是导航软件还是其他地图应用,这个API都可以为开发者提供全面、可自定义的解决方案。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值