摘要:根據(jù)需要對頁面的地圖進(jìn)行拖拽和縮放,在調(diào)用頁面,拿到。最終的目錄結(jié)構(gòu)與結(jié)合引入兩種方法,一種是引入安裝包里的文件本文采用這用,另一種是從中直接拿設(shè)置中心點(diǎn)設(shè)置縮放范圍地圖層級,這次只需要到級就好,最小能看中國地圖級就好。
由于客戶需求,之前使用的json形式的可鉆取型地圖被放棄了,要好看,沒有網(wǎng)~,于是開啟了打地鼠(bug)模式,總結(jié)如下:
網(wǎng)上搜索,百度離線地圖資料很有限啊,可以用的幾個要么年代久遠(yuǎn),要么不能滿足需求。不過還是從前輩們那里理清了思路
1.前期準(zhǔn)備需要的東西
百度地圖API文件(替代)
getModules.js
地圖瓦片
2.百度地圖API文件 2.1 下載API主文件下載最新的api文件,不需要申請ak,地址:http://api.map.baidu.com/api?v=2.0, 打開可以看到:
復(fù)制劃線部分并打開,拿到主文件,為方便后續(xù)查看修改,先格式化一下,工具:http://www.bejson.com/,命名為apiv2.0.min.js
去掉ak驗(yàn)證
搜索charset = "utf-8",添加 if (/^http/.test(a)) return;
function oa(a, b) { if (/^http/.test(a)) return; // 如果是調(diào)用外部資源就退出去 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 = 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) };
引用本地工具資源
搜索 domain.main_domain_cdn.baidu[0],找到使用它定義的z.ma,修改為z.ma = "";
加載模塊短路處理
搜索 &mod=,替換。那個 console.log(a),是為了給后面創(chuàng)建getModules.js用
在這里面放API需要調(diào)用的模塊,上面打印的數(shù)組a里面是需要請求的模塊,打印出來,通過下面方式獲取,放到getmodules2.0.js,例如 canvablepath_lf2t4w, 通過
http://api0.map.bdimg.com/getmodules?v=2.0&t=20140707&mod=canvablepath_lf2t4w
下載。
這個時候已經(jīng)可以用了:
4.獲取地圖瓦片Hello, World
很多人推薦了諸如太樂地圖下載器、全能地圖下載器、水經(jīng)注地圖下載等等,無奈都要花錢購買,再加上用的mac,各種不方便。最后用node自己寫的。新建文件夾tiles,放圖片,最終目標(biāo)形成按級分類(百度地圖瓦片層級分為16級,可根據(jù)需要選擇)的文件夾:
下面分步講解:
4.1 獲取地圖圖片請求地址查看請求圖片的地址,
在apiv2.0.min.js中找到相關(guān)代碼,搜索 getTilesUrl,有好幾個,對照URL地址的構(gòu)成,可以找到
方框內(nèi)是獲取圖片地址,url是原始地址,nname是即將存入的本地地址。根據(jù)需要對頁面的地圖進(jìn)行拖拽和縮放,在調(diào)用頁面,拿到xxxUrls。
先對地圖進(jìn)行拖拽(加載圖片),確保想要的省市(比如我要江浙滬)都出現(xiàn)在可是范圍內(nèi),每縮放到一個等級,都要把江浙滬拖到可視區(qū)域溜一圈。
4.2 下載圖片nodejs的主要代碼貼上:
const imgArr = xxxUrls; const newArr = new Set(imgArr); //去重 const finalArr = Array.from(newArr); //創(chuàng)建目錄 const fs = require("fs"); const axios = require("axios"); const request = require("request"); const path = require("path") const hostdir = "./"; function mkdirSync(dirname) { if (fs.existsSync(dirname)) { return true; } else { if (mkdirSync(path.dirname(dirname))) { fs.mkdirSync(dirname); return true; } } return false } const n = 0; for (const item of finalArr) { const last = item.name.lastIndexOf("/") if (last > 0) { const name = item.name.substr(last + 1) const dir = item.name.substr(0, last) const dstpath = hostdir + dir + "/" + name if (name.length && dir.length && !fs.existsSync(dstpath)) { if (mkdirSync(hostdir + dir)) { ++n; request(item.url).pipe(fs.createWriteStream(dstpath)) } } } }
長這樣
在apiv2.0.min.js中找到相關(guān)代碼,搜索 getTilesUrl,同上, 找到后修改。
開始的時候我把這api,getModues的文件都放在調(diào)用頁面那邊,圖片加載報錯,后來移到項(xiàng)目最外層的static中才解決。最終的目錄結(jié)構(gòu):
5.與echarts結(jié)合引入BMap,兩種方法,一種是引入echarts安裝包里的bmap.js文件(本文采用這用),另一種是從windows中直接拿
const newMap = echarts.init(document.getElementById("newMap")); newMap.setOption(this.newOption); // bmap const bmap = newMap.getModel().getComponent("bmap").getBMap(); const point = new BMap.Point(118.78, 31.04); // 設(shè)置中心點(diǎn) // 設(shè)置縮放范圍(地圖層級),這次只需要到10級就好,最小能看中國地圖5級就好。 bmap.setMaxZoom(10); bmap.setMinZoom(5); // 限制拖拽范圍,就是限制拖拽的邊界,圖片沒那么多,一直拖,等圖片用完,就出現(xiàn)空白。 const b = new BMap.Bounds(new BMap.Point(111.64, 26.40), new BMap.Point(125.95, 35.28)); // 左下角,右上角 try { BMapLib.AreaRestriction.setBounds(bmap, b); } catch (e) { alert(e); }; bmap.centerAndZoom(point, 7);
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/108207.html
摘要:百度地圖創(chuàng)建標(biāo)簽進(jìn)行加載使用百度地圖需要百度地圖添加擴(kuò)展,用于讓百度地圖支持地圖可能會遇見兩個問題地圖圖片錯位忘記加載中使用的一個主要問題是默認(rèn)圖標(biāo)的加載問題,詳見另外也可以考慮使用動態(tài)創(chuàng)建標(biāo)簽的方法,類似百度地圖加載百度地圖因?yàn)楸旧碇С值? webpack+百度地圖 創(chuàng)建 script標(biāo)簽進(jìn)行加載 export function MP(ak){ return new Prom...
摘要:渲染能力采用渲染除了對使用,一般來說,更適合繪制圖形元素數(shù)量非常大這一般是由數(shù)據(jù)量大導(dǎo)致的圖表如熱力圖地理坐標(biāo)系或平行坐標(biāo)系上的大規(guī)模線圖或散點(diǎn)圖等,也利于實(shí)現(xiàn)某些視覺特效如交通圖。 一.簡介 echartsecharts是百度公司前端開發(fā)的一個圖表庫,2013年發(fā)布第一版,主要采用canvas畫圖,目前版本3.8.4;完全免費(fèi); highcharthighcharts是國外的一家公司...
摘要:本人也做過一些數(shù)據(jù)可視化相關(guān)的產(chǎn)品,下面聊聊對數(shù)據(jù)可視化的一些思考。這也是數(shù)據(jù)可視化最麻煩的一直,一般我們借助的地圖,或者百度地圖,高德地圖等來開發(fā),其實(shí)百度地圖也出了個地圖可視化的庫,展示效果沒有好。。。。 最近幾年隨著大數(shù)據(jù)的興起,以及瀏覽器性能的提升,數(shù)據(jù)可視化成為了一個熱點(diǎn),前端也冒出來了很多數(shù)據(jù)可視化的崗位。本人也做過一些數(shù)據(jù)可視化相關(guān)的產(chǎn)品,下面聊聊對數(shù)據(jù)可視化的一些思考。...
摘要:本人也做過一些數(shù)據(jù)可視化相關(guān)的產(chǎn)品,下面聊聊對數(shù)據(jù)可視化的一些思考。這也是數(shù)據(jù)可視化最麻煩的一直,一般我們借助的地圖,或者百度地圖,高德地圖等來開發(fā),其實(shí)百度地圖也出了個地圖可視化的庫,展示效果沒有好。。。。 最近幾年隨著大數(shù)據(jù)的興起,以及瀏覽器性能的提升,數(shù)據(jù)可視化成為了一個熱點(diǎn),前端也冒出來了很多數(shù)據(jù)可視化的崗位。本人也做過一些數(shù)據(jù)可視化相關(guān)的產(chǎn)品,下面聊聊對數(shù)據(jù)可視化的一些思考。...
閱讀 1014·2021-11-25 09:43
閱讀 1677·2019-08-30 13:59
閱讀 1604·2019-08-30 11:22
閱讀 2131·2019-08-30 11:06
閱讀 1306·2019-08-28 17:51
閱讀 3736·2019-08-26 12:12
閱讀 786·2019-08-26 12:11
閱讀 453·2019-08-26 12:10