百度地图2.0离线版的制作

DEMO下载:http://download.csdn.net/detail/a312024054/9860770

感谢前辈共享出来,不过时间有点长了,有些细节有些变动,修改了一下

转载 : https://my.oschina.net/smzd/blog/548538

1. 下载API主文件

通过http://api.map.baidu.com/api?v=2.0获取API主文件的链接

获取API主文件的链接

获取API主文件http://api.map.baidu.com/getscript?v=2.0&ak=&services=&t=20170411141812

使用前端工具http://tool.chinaz.com/tools/jsformat.aspx 进行格式化,方便修改
进行百度API主文件格式化
把API的主文件命名为:apiv2.0.min.js

2. 去除ak验证

在apiv2.0.min.js中定位到下列代码位置,建议使用Math.random()多找几次就找到了
function Qb(a, b) {
        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 = M("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)
    };
修改方法就是不进行外部访问
/* 修改后 */
function Qb(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 = M("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)
};

3. 设置引用本地工具资源

搜索“z.url.domain.main_domain_cdn.baidu[0]”,找到使用他定义的字符串,置为空
z.op = z.url.proto + z.url.domain.baidumap + "/";
z.Ec = z.url.proto + ("2" == z.My ? z.url.domain.main_domain_nocdn.other: z.url.domain.main_domain_nocdn.baidu) + "/";
z.la = z.url.proto + ("2" == z.My ? z.url.domain.main_domain_cdn.other[0] : z.url.domain.main_domain_cdn.baidu[0]) + "/";
z.cj = z.url.proto + z.url.domain.main_domain_cdn.webmap[0] + "/";
z.cj = ""   //置为空
z.sg = function(a, b) {
    var c, d, b = b || "";
    switch (a) {
...

4. 创建本地工具资源文件

创建一个文件getmodules2.0.js,在这里面放API需要调用的模块,我这里是放在js文件夹下面了

设置API主文件调用本地的工具资源文件,通过"&mod="定位
load: function(a, b, c) {
    var d = this.ib(a);
    if (d.Ad == this.Ej.Xp) c && b();
    else {
        if (d.Ad == this.Ej.nG) {
            this.jK(a);
            this.xN(a);
            var e = this;
            e.AC == q && (e.AC = o, setTimeout(function() {
                for (var a = [], b = 0, c = e.Od.Bn.length; b < c; b++) {
                    var d = e.Od.Bn[b],
                    l = "";
                    ja.Gy.dK(d) ? l = ja.Gy.get(d) : (l = "", a.push(d + "_" + Rb[d]));
                    e.Od.Ov.push({
                        QM: d,
                        HE: l
                    })
                }
                e.AC = q;
                e.Od.Bn.length = 0;
                //0 == a.length ? e.UK() : Qb(e.gG.XP + "&mod=" + a.join(","))

                console.log(a);     //这里很重要!帮助我们找到我们需要加载的模块!
                    0 == a.length ? e.UK() : Qb("js/getmodules2.0.js")
            },
            1));
            d.Ad = this.Ej.GP
        }
        d.Nu.push(b)
    }
当a这个数组里面是需要请求的模块,getmodules2.0.js没有的,打印出来,通过下面方式获取,并放到getmodules2.0.js
newvectordrawlib_hmclwu就是a打印出来的模块名称,通过这个链接获取

http://api0.map.bdimg.com/getmodules?v=2.0&t=20140707&mod=newvectordrawlib_hmclwu

到这里就可以跑起来了
<!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="js/apiv2.0.min.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, 15);                 // 初始化地图,设置中心点坐标和地图级别  
        </script>  
    </body>  
</html>

5. 设置调用本地地图

<body>  
<div id="container"></div> 
<script type="text/javascript"> 

    var outputPath = 'maptile/';    //地图瓦片所在的文件夹
    var fromat = ".png";    //格式

    var tileLayer = new BMap.TileLayer();
    tileLayer.getTilesUrl = function (tileCoord, zoom) {
        var x = tileCoord.x;
        var y = tileCoord.y;
        var url = outputPath + zoom + '/' + x + '/' + y + fromat;
        return url;
    }
    var tileMapType = new BMap.MapType('tileMapType', tileLayer);

    var map = new BMap.Map("container", { mapType: tileMapType })

    var point = new BMap.Point(116.404, 39.915);  // 创建点坐标  
    map.centerAndZoom(point, 6);                 // 初始化地图,设置中心点坐标和地图级别  
</script>  
</body>  

6. 在IE中使用,需要额外添加模块

例如添加一个可以放大缩小的控件
 map.addControl(new BMap.NavigationControl({
        anchor: BMAP_ANCHOR_TOP_RIGHT,  // 靠左上角位置
        type: BMAP_NAVIGATION_CONTROL_LARGE, // LARGE类型
    }));

IE控件

百度地图添加的模块

把下面的内容拷贝到getmodules2.0.js中就好了

需要注意的是模块名称下划线后面的好像是随机生成的,
所以是要前面的map已经包含了,并且功能能够使用,就不需要在加了

7. 地图瓦片资源

可以使用 太乐地图下载器 下载瓦片,这个下载器可以下到百度地图的瓦片,新测可用

8. 杂记

//主动触发marker的click事件
marker.dispatchEvent("click");
### 回答1: SteamVR 2.0离线硬盘是Valve推出的一种虚拟现实技术,其主要特点在于可以实现离线储存,即用户可以将所有的VR游戏和应用程序下载到硬盘上,不需要依赖于网络使用。这种离线硬盘的SteamVR 2.0软件具有更高的可靠性和稳定性,能够提供更好的游戏体验。 与其它VR技术相比,SteamVR 2.0离线硬盘还有其他优点。其中包括通过增加基站的数量来扩大可操作范围、提供更高分辨率的头戴显示器、以及更舒适的头戴设计等。此外,该技术还具有更准确的追踪和定位功能,可减少用户在使用过程中的晕眩感和不舒适感。 总之,SteamVR 2.0离线硬盘是一种具有优越性能和用户友好性的虚拟现实技术,旨在为用户提供更好的游戏和娱乐体验。它的离线储存功能特别适合没有良好网络环境或希望更加稳定和流畅使用VR游戏和应用程序的用户。 ### 回答2: SteamVR 2.0离线硬盘是指一种不需要联网也能够使用的SteamVR系统。通常,SteamVR是一个虚拟现实(VR)平台,需要连接互联网以方便用户下载并更新软件、游戏以及驱动程序。然而,由于某些原因,可能存在无法连接互联网的情况,这就需要离线硬盘的SteamVR 2.0离线硬盘的SteamVR 2.0存储在一个独立的硬盘驱动器中,用户可以将其连接到电脑上。这个本会包含所需的全部软件、游戏和驱动程序,无需互联网连接即可进行VR体验。 离线硬盘的SteamVR 2.0适用于那些在没有互联网连接的情况下需要使用VR设备的用户。对于没有可靠互联网连接的区域或者在旅行中的用户来说,离线硬盘能够提供便利。另外,对于那些想要保持离线状态并限制互联网访问的用户,离线硬盘也是一个不错的选择。 尽管离线硬盘的SteamVR 2.0能够满足一些用户的需求,但它仍然有一些限制。首先,由于无法联网,用户将无法下载新的软件、游戏或者驱动程序,只能在硬盘内部提供的内容范围内选择。此外,由于没有互联网连接,也无法享受到一些在线功能,例如与其他玩家进行联机游戏。 总的来说,离线硬盘的SteamVR 2.0能够为无法连接互联网的用户提供VR体验的选择。它适用于那些在没有可靠互联网连接的情况下使用VR设备的用户,并且对于那些想要保持离线状态的用户也具备一定的吸引力。然而,用户应该注意其功能和内容受到一定限制,无法享受到互联网连接带来的便利和体验。 ### 回答3: SteamVR 2.0离线硬盘是指SteamVR的一个本,它与传统的在线本不同,可以直接存储在离线硬盘上使用。 传统的SteamVR需要用户通过Steam平台在线下载和安装,然后通过网络连接与Steam服务器进行通信。但是,SteamVR 2.0离线硬盘却可以在没有网络连接的情况下使用。 这个本的SteamVR被存储在一个硬盘上,用户可以将这个硬盘连接到他们的计算机上,并直接使用其中的SteamVR软件和游戏。这意味着用户不再需要通过网络下载和安装SteamVR,也不需要依靠网络连接来访问Steam服务器。 离线硬盘的SteamVR对于那些没有稳定网络连接或者无法连接到Steam服务器的用户来说非常有用。它可以让他们在没有网络的情况下继续使用SteamVR,并享受其中的游戏和应用。 使用离线硬盘的SteamVR需要用户事先将软件和游戏下载到硬盘上,然后在需要使用时将硬盘连接到计算机上。当硬盘连接后,用户可以像使用在线本的SteamVR一样进行操作,只是不需要连接到Steam服务器。 总的来说,SteamVR 2.0离线硬盘提供了一种便利和可靠的方式让用户在没有网络连接的情况下使用SteamVR。这为无网络或不稳定网络环境下的用户带来了很多便利,并且使得SteamVR的使用更加灵活和适应不同的需求。
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值