离线百度地图,添加按钮点击切换卫星地图和街道地图(纯JS)

离线百度地图,添加按钮点击切换卫星地图和街道地图

  • 需求
  • 代码
  • 涉及信息
  • 截图

需求

百度地图离线应用,网络上大部分都是不能切换地图的离线,只能根据配置文件填写一个类型;网上搜了一下没有这块添加类似在线版的可切换地图类型,使用官网的加载控件方式直接调用在线数据;不可行;网上搜了一款用QT实现的,想自己实现一个JS的,一样可以适用。
目前此版只对V2版离线做了实现。

代码

// ------------------------------------
// 自定义地图控件
// --------------------------------/*** 自定义地图类型切换* @param {Object} bdmapcfg 离线地图配置参数*/function MapTypeControl(bdmapcfg){this.bdmapcfg = bdmapcfg;//console.log('container', this.bdmapcfg);// 设置默认停靠位置和偏移量  this.defaultAnchor = BMAP_ANCHOR_TOP_RIGHT;    this.defaultOffset = new BMap.Size(10, 10);    }    //通过JavaScript的prototype属性继承于BMap.Control   MapTypeControl.prototype = new BMap.Control();// 自定义控件必须实现自己的initialize方法,并且将控件的DOM元素返回// 在本方法中创建个div元素作为控件的容器,并将其添加到地图容器中MapTypeControl.prototype.initialize = function(map){var self = this;// 创建一个DOM元素var div = document.createElement("div");div.id="type-control";// 设置样式   div.style.cursor = "pointer";div.style.width="70%";div.style.height="30px";div.style.margin="10px 0px";var childNodes = [{name:"卫星",value:'satemap'},{name:"普通",value:'normalmap'}];childNodes.forEach(function(divNode, idx){//子divvar childDiv=document.createElement('div');childDiv.value=divNode.value;childDiv.style.width="35px";childDiv.style.height="20px";childDiv.style.background="#FFFFFF";childDiv.style.float="right";childDiv.style.margin="0px";childDiv.style.fontSize="12px";childDiv.style.textAlign="center";if(idx === 0) {childDiv.style.borderRadius="0 3px 3px 0";childDiv.style.borderBottom="thin solid #8EA8E0";childDiv.style.borderRight="thin solid #8EA8E0";childDiv.style.borderTop="thin solid #8EA8E0";} else if(idx === (childNodes.length -1)) {childDiv.style.borderRadius="3px 0 0 3px";childDiv.style.borderBottom="thin solid #8EA8E0";childDiv.style.borderLeft="thin solid #8EA8E0";childDiv.style.borderTop="thin solid #8EA8E0";}childDiv.addEventListener('click', function(){//console.log(this.parentNode);self.changeMapType(this.value);this.parentNode.childNodes.forEach(function(nd){//console.log(nd.id);nd.style.background="#FFFFFF";nd.style.color="#000000";});this.style.background="#8EA8E0";this.style.color="#FFFFFF";this.style.fontWeight="bold";});//console.log(self.bdmapcfg['map_type'], divNode.value, (self.bdmapcfg['map_type'] == divNode.value));if(self.bdmapcfg['map_type'] === divNode.value) {childDiv.style.background="#8EA8E0";childDiv.style.color="#FFFFFF";childDiv.style.fontWeight="bold";}childDiv.appendChild(document.createTextNode(divNode.name));div.appendChild(childDiv);});// 添加DOM元素到地图中map.getContainer().appendChild(div);// 将DOM元素返回return div;};MapTypeControl.prototype.changeMapType = function(type){var self = this;if(self.bdmapcfg['map_type'] !== type) {self.bdmapcfg['map_type'] = type;//console.log(this);//console.log('this->需在地图类型', type);if(type === 'satemap') {self.bdmapcfg.imgext = '.png';  //瓦片地图后缀self.bdmapcfg.tiles_dir = self.bdmapcfg.home+'satemap';  //瓦片图目录} else {self.bdmapcfg.imgext = '.png';  //瓦片地图后缀self.bdmapcfg.tiles_dir = self.bdmapcfg.home+'tiles';  //瓦片图目录}self.loadJScript();}};MapTypeControl.prototype.loadJScript = function(){var self = this;var script = document.createElement("script");script.type = "text/javascript";script.src =  self.bdmapcfg.home+"baidumap_offline_v2_20160921_min.js";document.body.appendChild(script);map = null;initMap();};var map,zoomInt=8;function initMap(){// 百度地图API功能map = new BMap.Map("map_demo");    // 创建Map实例map.centerAndZoom(new BMap.Point(117.003586,36.67173), zoomInt);  // 初始化地图,设置中心点坐标和地图级别//map.addControl(new BMap.MapTypeControl());   //添加地图类型控件 离线只支持电子地图,卫星/三维不支持//map.setCurrentCity("北京");          // 设置地图显示的城市 离线地图不支持!!map.enableScrollWheelZoom(true);     //开启鼠标滚轮缩放map.addControl(new BMap.NavigationControl());   //缩放按钮// 添加自定义控件map.addControl(new MapTypeControl(bdmapcfg));map.addEventListener("zoomend", function(){zoomInt = this.getZoom();//alert("地图缩放至:" + this.getZoom() + "级");});}initMap();

涉及信息

方案重点:使用百度自定义控件方式,添加多DIV,通过鼠标事件重新生成Map对象;
资料信息:

  • 离线版百度地图,网上一搜很多的。这里就不提供了。
  • 官方自定义控件介绍:http://lbsyun.baidu.com/index.php?title=jspopular/guide/widget
  • 参考的QT版实现:传送门

截图

卫星图:
卫星图
普通图:普通图
因为我参考了官方的配色,为了区分,截取了官方示例: 官方示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1549599.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

vue百度地图 一进页面加载卫星图

<bm-map-type :map-types"mapType" anchor"BMAP_ANCHOR_TOP_RIGHT"></bm-map-type>data() {return {mapType:[BMAP_NORMAL_MAP, BMAP_HYBRID_MAP],}methods:{createMap({ BMap, map }) {//这句使得初始为卫星图map.setMapType(BMAP_HYBRID_MA…

百度离线地图示例之十一:混合图(街道图、卫星图)实现

前言介绍&#xff1a; 主要是基于v3.0的API版本进行的离线&#xff0c;纯内网可操作&#xff0c;基本上实现了现有90%以上的功能点&#xff0c;能兼容jpg和png格式的瓦片图层&#xff0c;实现了原生和基于Vue两个版本&#xff08;包含常用的55个示例&#xff09;&#xff0c;实…

堆中分配二维数组初始化排序

方法一&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> int getmem(char *** parry,int *depth,int *len){ int mydepth *depth; int mylen *len; char ** myarry (char **)malloc(mydepth*sizeof(char*)); for(int i0;i<…

arm内核调试仿真

qemu仿真ARM linux内核&#xff0c;支持网络协议&#xff0c;DHCP&#xff0c; telnet&#xff0c; ftp... 而且可以支持u-boot引导内核启动&#xff0c;下图为效果图&#xff1a;

ARM内核架构和SOC架构

注&#xff1a;本文资料全部来源于网络或书籍&#xff0c;同时加上个人理解。若有侵权&#xff0c;告知即删。若有错误&#xff0c;留言商讨。 0、ARM处理器功能扩展和架构演变 1、cortex A9 &#xff08;ARMv7指令集&#xff09;-----传说中的CPU 2、Exynos4412芯片框图-----…

arm linux 内核配置,Linux + ARM驱动开发环境配置(内核配置与编译)

要想编写驱动&#xff0c;首先是建立内核目录树。 ** 1、查看ARM开发板的内核版本 ** uname -a 我的arm开发板的版本是3.4.39 ** 2、安装必要的软件包 ** sudo apt-get install build-essential kernel-package libncurses5-dev sudo apt-get install ncurses-dev ** 3、下载一…

ARM 内核寄存器 和 基本汇编语言讲解

对于嵌入式开发者来说&#xff0c;了解汇编语言和内核寄存器是对内核深入理解的基础..增加 2.2 汇编伪指令 章节 2021/12/12..完善 2.3 ARM汇编指令集 2021/12/12..增加 3.1 不同编译器的反汇编 2021/12/14 ..增加 3.2 C和汇编 比较分析 …

jtag访问arm内核寄存器

jtag的原理图jtag接口访问arm Device ID code register的步骤jtag接口访问arm Device ID code register的功能验证的testbenchjtag接口访问arm Device ID code register的功能验证的波形图jtag相关注意细节jtag访问arm内核寄存器的步骤与DTR相关的协处理器指令介绍最后通过封装…

关于ARM内核经典系列ARM7/ARM9/ARM11和Cortex®-A/Cortex®-R/Cortex®-M的产品线简单介绍

目前市场上的嵌入式单片机或者Soc大部分都是ARM的内核架构&#xff0c;相信大家对Cortex-M3/Cortex-M4&#xff0c;Cortex-A53/Cortex-A73等有所耳闻。 ARM公司主要是设计处理器内核的公司&#xff0c;之前的ARM7/ARM9/ARM11被划分为经典的ARM内核&#xff1b;后面ARM公司分出…

常见前端面试之VUE面试题汇总三

7. Vue 中封装的数组方法有哪些&#xff0c;其如何实现页面更新 在 Vue 中&#xff0c;对响应式处理利用的是 Object.defineProperty 对数据进 行拦截&#xff0c;而这个方法并不能监听到数组内部变化&#xff0c;数组长度变化&#xff0c;数 组的截取变化等&#xff0c;所以需…

配置arm内核实现NFS功能

NFS介绍 NFS&#xff08;Network File System&#xff09;即网络文件系统&#xff0c;是FreeBSD支持的文件系统中的一种&#xff0c;它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中&#xff0c;本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件&…

什么是arm-arm体系架构版本(指令集版本)-arm内核版本

1、什么是arm&#xff1f; arm公司&#xff1a;是英国一家电子公司的名字&#xff0c;该公司成立于1990年11月&#xff0c;是苹果电脑&#xff0c;Acorn电脑集团和VLSI Technology的合资企业。Acorn曾在1985年推出世界上首个商用单芯片RISC&#xff08;Reduced Instruction Se…

ARM内核——寄存器功能讲解

根据“ARM-thumb 过程调用标准”&#xff1a; 通用寄存器 通用寄存器包含R0到R12&#xff0c;13个寄存器 R0-R3 用作传入函数参数&#xff0c;传出函数返回值。在子程序调用之间&#xff0c;可以将 r0-r3 用于任何用途。被调用函数在返回之前不必恢复 r0-r3。如果调用函数需…

ARM内核版本

ARM架构CPU发展历程&#xff1a; &#xff08;https://en.wikipedia.org/wiki/ARM_architecture#CPU_modes&#xff09;

嵌入式芯片的硬件组成(ARM内核)

嵌入式最小硬件系统的6部分 基于ARM内核的嵌入式芯片的硬件组成 连接到系统总线上的高带宽组件主要包括&#xff1a; 存储器及控制器、电源管理与时钟控制器、中断控制器、DMA控制器、GPIO端口、互联通信组件、定时计数组件、模拟通道组件。

ARM内核全解析

前不久 ARM 正式宣布推出新款 ARMv8架构 的 Cortex-A5 0处理器系列产品&#xff0c;以此来扩大ARM在高性能与低功耗领域的领先地位&#xff0c;进一步抢占移动终端市场份额。Cortex-A50是继 Cortex-A15 之后的又一重量级产品&#xff0c;将会直接影响到主流PC市场的占有…

ARM 内核分类

根据ARM官方资料和网上资料整理。 先来一张Architecture的图片 ARM微处理器系列 ARM 微处理器目前包括下面几个系列&#xff0c;以及其它厂商基于 ARM 体系结构的处理器&#xff0c;除了具有 ARM 体系结构的共同特点以外&#xff0c;每一个系列的 ARM 微处理器都有各自的特点和…

ARM内核结构

ARM内核有4个功能模块T、D、M、I&#xff0c;可供生产厂商根据不同用户的要求来配置生产ARM芯片。 其中&#xff1a;T功能模块表示16位Thumb&#xff0c;可以在兼顾性能的同时减少代码尺寸。M功能模块表示8位乘法器。D功能模块表示Debug&#xff0c;该内核中放置了用于调试的结…

ARM内核、指令集等简介

文章目录 1.ARM架构学习1.1.ARM相关背景介绍 2.ARM指令集2.1 A32指令集2.2 A64指令集2.3 代码举例说明 3.ARM与RISC、CISC的关系4.ARM与哈佛结构、冯诺依曼结构 1.ARM架构学习 ARM即是公司名&#xff0c;是一家英国的公司&#xff0c;也是芯片名&#xff0c;随便嵌入式设备的发…

ARM 之五 发展史及各时期内核(ARM1 ~ ARM11 / Cortex)介绍

很久很久以前   1978年12月5日&#xff0c;物理学家赫尔曼豪泽&#xff08;Hermann Hauser&#xff09;和工程师 Chris Curry&#xff0c;在英国剑桥创办了CPU公司&#xff08;Cambridge Processing Unit&#xff09;&#xff0c;主要业务是为当地市场供应电子设备。1979年&a…