百度地图离线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方法中的经纬度即可,可以修改层级
经过仔细研究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方法中的经纬度即可,可以修改层级
相关文章推荐
- 立个 Flag, 我要正式开始学 JS 了!
- Javascript数组与字典用法分析
- JavaScript try/catch/finally 语句
- JavaScript Position
- JavaScript中的Try...Catch 语句
- 使用Flex生成可线程重入的JSON词法分析器
- js中event对象属性和方法
- 如何用正则匹配后缀名不为.jpg, .css, .js, .html, .htm, .png的文件
- js中的异常处理try...catch使用介绍
- ExtJs6 路由有参无参使用方式
- JS错误类型的学习
- Ajax-联动选择框
- JS中如何比较两个Json对象是否相等实例代码
- JSON.stringify 语法实例讲解
- JavaScript详解
- JS中 == 与 === 的区别
- js控制input输入框只能输入数字
- js中使用jstl中的值
- extjs 遮罩功能
- **JAVASCRIPT** 浏览器对象二