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]; // 最大最小缩放等级

/* 循环产生瓦片图目录结构 */

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的流程后再执行这个

// 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]; // 百度地址切换的规则 百度地图源码中有

// 下面这个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`));

};

前端代码就不上了

百度地图瓦片 android,百度地图自定义瓦片图获取相关推荐

  1. android地图入门,android 百度地图入门01 (史上最详没有之一)

    最近一直和百度地图打交道,写几篇博客记录一下吧,目前最新版是4.0的 ,之前我用的是3.7的, 就以4.0的为例说一下最基本的配置流程吧. 一.准备工作 1.申请一个百度地图开发者账户--地址:htt ...

  2. android 百度开发论坛,Android 百度地图开发(一)

    现在好多手机应用开发需要使用到百度地图,在使用百度地图的过程和遇到的问题整理一下方便以后使用 申请密钥 使用白度地图首先需要申请API Key,申请百度账户才能得到API Key. 登录 http:/ ...

  3. android地图选点,【百度地图】Android实现地图展示、定位、选点、地点查询和地点模糊查询功能...

    1.集成百度地图sdk 请查看百度地图开放平台,这里有很详细的教程. 2.地图展示功能 将地图控件放入到当前页面的布局中即可,如下: MapView 在页面代码中,通过id获取到MapView的对象, ...

  4. android+高德地图教程,Android高德地图开发(三)地图简单操作

    一.概述 上一节中我们了解到地图的定位,图层切换,离线地图等基础操作,接下来学习地图的基本操作. 二.本章内容 --- 地图交互设置 --- 地图绘制 1.地图交互设置 在使用地图的时候,不可避免的会 ...

  5. android室内地图,概述-Android 室内地图SDK | 高德地图API

    Android 室内地图 SDK 简介 说明: 室内地图数据对新用户暂停开放,建议您使用 Android地图SDK 可实现室内外一体化效果. 高德地图 Android 室内地图SDK 是一套室内地图开 ...

  6. 百度输入法键盘android,百度输入法Android 1.2.0正式版 支持智能手写

    百度手机输入法前身为点讯梅花手机输入法.这是目前智能手机用户最熟悉及喜爱的输入法之一,独有触摸屏点划结合专利技术等交互设计专利,加上基于每日数亿计搜索请求挑选的百度精准词库,极大提高输入法综合输入效率 ...

  7. java实现高德地图app,Android 高德地图入门demo,最新高德地图实现方法,附源码及apk...

    [实例简介] Android 高德地图入门demo,最新高德地图实现方法,附源码及apk [实例截图] [核心代码] GaoDeDemo ├── GaoDeDemo │   ├── app │   │ ...

  8. android类似画地图轨迹,Android实现地图轨迹的方法

    本文实例为大家分享了Android实现地图轨迹的具体代码,供大家参考,具体内容如下 mainActivity.java package com.example.amapdemo; import and ...

  9. android自定义百度地图导航,Android百度定位导航之基于百度地图移动获取位置和自动定位...

    一.问题描述 使用百度地图实现如图所示应用,首先自动定位当前我起始位置(小圆点位置),并跟随移动不断自动定位我的当前位置 百度Api不同版本使用会有些差异,本例中加入lib如下: 二.编写MyAppl ...

最新文章

  1. Python中glob.glob的排序问题
  2. mega_[MEGA DEAL] Android课程的Java基础知识(61%折扣)
  3. 批处理命令 For循环命令具体解释!
  4. 移动端网页打印代码_WEB移动端怎么是实现Console.log打印
  5. linux查看r的安装路径,在Linux CentOS 6.5版上安装R3.1.1的问题(检查LDFLAGS以获取Fortran库的路径)...
  6. html转为纯文本并且保留换行,使用jsoup将html转换为纯文本时,如何保留换行符?...
  7. mysql里面的页面筛选_【mysql】像很多网站(比如电商)里的筛选功能一般是如何实现的?...
  8. java 字符字节数组_Java字符串与字符、字节数组知识点总结
  9. 计算机网络的分层结构、协议、服务和接口
  10. python 的列表遍历删除
  11. 设计模式系列——单例模式
  12. js实现图片的透明度运动
  13. 全球服务器系统排行,服务器操作系统排行榜
  14. CentOS Install Passenger for ROR
  15. Java基础知识面试题(2021最新)
  16. W ndows 10模拟器,手机windows10模拟器
  17. Arduino MEGA2560与蓝牙的通信(玄学)问题
  18. php 小程序即时聊天,网易云IM小程序聊天室集成。PHP版SDK API使用示例
  19. 【前端小实战】百度新闻雪碧图及动画(CSS sprites)
  20. 二叉树的遍历-先序遍历、中序遍历、后序遍历

热门文章

  1. 1.5 黑群晖安装后洗白的三种方法 教程
  2. 汽车 Automotive > CAN Transceivers收发器选择
  3. ADAU1452 如何配置支持SPDIF 光纤数字输入?
  4. Android开发实战《手机安全卫士》——10.“进程管理”模块实现 PopupWindow 内存清理
  5. 【数据采集】获取网站数据(二)
  6. 大体肌肉解剖必学45个肌肉
  7. H5与CSS所做的QQ注册界面
  8. python编程实现将文本音频数据还原为wav语音文件
  9. VS2019 x64环境下应用程序无法正常启动,出现0xc000007b报错
  10. 人工智能AI库Spleeter免费人声和背景音乐分离实践(Python3.10)