摘要:代碼起始點坐標左上角終點坐標右下角根據地圖平臺使用轉換類這里是用百度的最大最小縮放等級循環(huán)產生瓦片圖目錄結構層級橫坐標范圍縱坐標范圍這個是你圖片要存放的位置先要產生操作完的流程后再執(zhí)行這個后面有說這個的用處這個函數是獲取一個的對象數組
nodejs代碼
const request = require("request"); const fs = require("fs"); const bagpipe = require("bagpipe"); const TileLnglatTransform = require("tile-lnglat-transform"); let [x1, y1] = [72.26, 54.57]; // 起始點坐標(左上角) let [x2, y2] = [137.31, 17.8]; // 終點坐標(右下角) let TileLnglatTransformBaidu = TileLnglatTransform.TileLnglatTransformBaidu; // 根據地圖平臺使用轉換類 這里是用百度的 let tileArr = []; let [minZoom, maxZoom] = [5, 9]; // 最大最小縮放等級 /* 循環(huán)產生瓦片圖目錄結構 */ for (let i = minZoom; i <= maxZoom; i++) { tileArr[i] = {}; p1 = TileLnglatTransformBaidu.lnglatToTile(x1, y1, i); p2 = TileLnglatTransformBaidu.lnglatToTile(x2, y2, i); tileArr[i].t = i; // 層級 tileArr[i].x = [p1.tileX, p2.tileX]; // 橫坐標范圍 tileArr[i].y = [p2.tileY, p1.tileY]; // 縱坐標范圍 } let bagGrep = new bagpipe(20, { timeout: 1000 }); let path = "./default"; // 這個是你圖片要存放的位置 fs.access(path, fs.constants.F_OK, err => { if (err) fs.mkdir(path, err => {}); for (let z = minZoom; z <= tileArr.length - 1; z++) { fs.access(`${path}/${z}`, fs.constants.F_OK, err => { if (err) fs.mkdir(`${path}/${z}`, err => {}); for (let x = tileArr[z].x[0]; x <= tileArr[z].x[1]; x++) { fs.access(`${path}/${z}/${x}`, fs.constants.F_OK, err => { if (err) fs.mkdir(`${path}/${z}/${x}`, err => {}); }); } }); } setTimeout(() => { requestPush(); // 先要產生xyz.js 操作完createLevelArr的流程后再執(zhí)行這個 // createLevelArr(); // 后面有說這個的用處 }, 1000); }); const writeFile = data => { fs.writeFile("./xyz.js", data, function(err) { if (err) { throw err; } }); }; /* * 這個函數是獲取一個{x,y,z}的對象數組 并且寫入本地的xyz.js * 然后你自己需要在前端搭建一個百度地圖2.0版本的demo https://www.echartsjs.com/examples/editor.html?c=map-polygon 按他這個來 但是樣式你改成你需要的 * 重要的事情說三遍! 2.0版本 2.0版本 2.0版本 * 以上準備做完后 F12找到一個瓦片圖的加載地址復制下來 接下來你需要去緩存所有的百度地圖自定義瓦片圖片 做法如下: * 在前端demo中引入xyz.js 遍歷這個數組 用img標簽加載 設置src(路徑看download方法中的 產生圖片URL 開始 -> 產生圖片URL 結束) * 確保圖片都加載了一遍 做完這些你就可以注釋上面的createLevelArr調用 打開requestPush調用 然后就能拿到你所有需要的自定義瓦片圖了 */ const createLevelArr = () => { let allXYZ = []; for (let z = minZoom; z <= tileArr.length - 1; z++) { for (let x = tileArr[z].x[0]; x <= tileArr[z].x[1]; x++) { for (let y = tileArr[z].y[0]; y <= tileArr[z].y[1]; y++) { allXYZ.push({ x, y, z }); } } } writeFile(JSON.stringify(allXYZ)); }; const requestPush = () => { for (let z = minZoom; z <= tileArr.length - 1; z++) { for (let x = tileArr[z].x[0]; x <= tileArr[z].x[1]; x++) { for (let y = tileArr[z].y[0]; y <= tileArr[z].y[1]; y++) { bagGrep.push(download, x, y, z); } } } }; const download = (x, y, z) => { // 產生圖片URL 開始 let baiduApiArr = [ "http://api0.map.bdimg.com/", "http://api1.map.bdimg.com/", "http://api2.map.bdimg.com/" ]; let main = baiduApiArr[Math.abs(x + y) % baiduApiArr.length]; // 百度地址切換的規(guī)則 百度地圖源碼中有 // 下面這個url是獲取自定義瓦片圖的地址 (這個url的獲取就是你用百度地圖2.0版本的庫搭建一個本地的demo 把地圖跑出來 然后你去看它的圖片請求 復制一條過來就好了) //let url = // "http://api0.map.bdimg.com/customimage/tile?&x=7&y=2&z=5&udt=20190718&scale=1&ak=填你自己的ak&styles=t%3Awater%7Ce%3Aall%7Cc%3A%233990e9%2Ct%3Aland%7Ce%3Aall%7Cc%3A%23004981%2Ct%3Aboundary%7Ce%3Ag%7Cc%3A%23064f85%2Ct%3Arailway%7Ce%3Aall%7Cv%3Aoff%2Ct%3Ahighway%7Ce%3Ag%7Cc%3A%23004981%2Ct%3Ahighway%7Ce%3Ag.f%7Cc%3A%23005b96%7Cl%3A1%2Ct%3Ahighway%7Ce%3Al%7Cv%3Aoff%2Ct%3Aarterial%7Ce%3Ag%7Cc%3A%23004981%2Ct%3Aarterial%7Ce%3Ag.f%7Cc%3A%2300508b%2Ct%3Apoi%7Ce%3Aall%7Cv%3Aoff%2Ct%3Agreen%7Ce%3Aall%7Cv%3Aoff%7Cc%3A%23056197%2Ct%3Asubway%7Ce%3Aall%7Cv%3Aoff%2Ct%3Amanmade%7Ce%3Aall%7Cv%3Aoff%2Ct%3Alocal%7Ce%3Aall%7Cv%3Aoff%2Ct%3Aarterial%7Ce%3Al%7Cv%3Aoff%2Ct%3Aboundary%7Ce%3Ag.f%7Cc%3A%23029fd4%2Ct%3Abuilding%7Ce%3Aall%7Cc%3A%231a5787%2Ct%3Alabel%7Ce%3Aall%7Cv%3Aoff"; let url = `${main}customimage/tile?&x=${x}&y=${x}&z=${z}&customid=undefined`; // 這個是默認樣式的瓦片圖 // 產生圖片URL 結束 request( { url, timeout: 180000 // 響應時間可以設高點 }, (err, res, body) => { if (err) { console.log(err + "&" + x + "&" + y + "&" + z); } } ).pipe(fs.createWriteStream(`${path}/${z}/${x}/${y}.png`)); };
前端代碼就不上了
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/106291.html
摘要:根據需要對頁面的地圖進行拖拽和縮放,在調用頁面,拿到。最終的目錄結構與結合引入兩種方法,一種是引入安裝包里的文件本文采用這用,另一種是從中直接拿設置中心點設置縮放范圍地圖層級,這次只需要到級就好,最小能看中國地圖級就好。 由于客戶需求,之前使用的json形式的可鉆取型地圖被放棄了,要好看,沒有網~,于是開啟了打地鼠(bug)模式,總結如下: 網上搜索,百度離線地圖資料很有限啊,可以用的...
閱讀 753·2021-07-25 21:37
閱讀 3667·2019-08-30 15:55
閱讀 2582·2019-08-30 15:54
閱讀 1731·2019-08-30 15:44
閱讀 3134·2019-08-30 15:44
閱讀 872·2019-08-30 15:43
閱讀 1037·2019-08-29 15:36
閱讀 3047·2019-08-29 10:58