您的位置:首页 > Web前端 > JavaScript

百度地图离线webjs pc端研究 附文件下载

2016-07-13 15:58 190 查看
    最近在研究百度地图离线方案,网上也提供了一系列的基于百度地图的离线解决方案,最终都以瓦片找不到而告终。

    经过仔细研究baidumap.js的原理,终于小有成就,现在mark一下。

   首先,获取百度地图jsapi库,访问http://developer.baidu.com/map/jsdemo.htm#a1_2,在F5调试中看到百度地图的请求地址,保存这个请求内容就是百度地图的js,可以看到api的js请求地址,正常的,

这个就是瓦片的地址,瓦片需要下载,附件会提供个人的瓦片下载方法。

另外

这个地址也需要保存。

这个地址也需要保存,主要是因为很多百度地图的js库都是通过这个地址请求的,然后访问在本地localStorate中,这样,如果你访问百度地图,一定要清除浏览器缓存测试本地的离线地图,不然会发现很多功能无法使用,但是并没有报错,主要是因为在localStorage中并没有此函数库。

最后就是修改baidumap,js库,主要修改 大致2518行左右, Vc.getTilesUrl = function(a, b, c) {

        var d = a.x,

            a = a.y,

            e = 1,

            c = Uc[c];

        this.map.GL() && (e = 2);
/*console.log((Tc[Math.abs(d + a) % Tc.length] + "?qt=tile&x=" 
+ (d + "").replace(/-/gi, "M") + 
"&y=" + (a + "").replace(/-/gi, "M") + 
"&z=" + b + "&styles=" + c + "&scaler=" + e
+ (6 == x.ea.la ? "&color_dep=32&colors=50" : "") + "&udt=20160401").replace(/-(\d+)/gi, "M$1"));
window.send([d,a,b]);*/
return parent.baseJsPath+"img/tiles/"+b+"/"+d+"/"+a+".png";}

主要是改变百度地图瓦片的加载地址

然后修改js1211行

function Qb(a, b) {

        if (b) {

            var c = 11988;

            z._rd["_cbk" + c] = function(a) { b && b(a);

                delete z._rd["_cbk" + c] };

            a += "&callback=BMap._rd._cbk" + c; 

        }

        if(a.lastIndexOf("getmodules")!=-1){

          if(a.lastIndexOf("getmodules")!=-1&&a.lastIndexOf("copyrightctrl")!=-1){

              a = parent.baseJsPath+"lib/getmodules_copyrightctrl.js";

             }else{

              a = parent.baseJsPath+"lib/getmodules_map.js";

             }

        }

        if(a.lastIndexOf("qt=verify")!=-1){

         a = parent.baseJsPath+"lib/map.verify.js?callback=BMap._rd._cbk11988";

        }

        if(a.lastIndexOf("qt=cen")!=-1){

         a = parent.baseJsPath+"lib/map.cen.js?callback=BMap._rd._cbk11988";

        }

        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) };

主要修改的作用是,将百度地图请求百度的地址的改为本地地址,切记红色部分一定要和自己下载qt=ven和qt=cen一致就是BMAP_cbk_11988这个数字,不然没有反应。

啥也不辍最后上传附件代码。
http://download.csdn.net/detail/cyssxt/9592942,修改TilesUtil.java中的main方法中的经纬度即可,可以修改层级
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: