首页 > 其他分享 >leaflet 加载高德地图自定义样式

leaflet 加载高德地图自定义样式

时间:2022-11-15 15:33:29浏览次数:61  
标签:layer 自定义 地图 leaflet amap 高德

最近项目需求,需要使用leaflet封装成一个vue组件,涉及功能主要有高德自定义样式地图封装为leaflet底图图层、自定义坐标系、topjson省市区街道下钻、线面区域热力层、飞线、点聚合图标撒点等功能。记录下开发遇到的问题,欢迎一起交流学习。

 

本来使用leaflet主要用于客户本地部署加载离线地图,但在线使用免费的瓦片地址样式很单一,如果想改变底图样式就很麻烦,搜查资料有一个改变地图图片颜色的方法,尝试使用感觉还是不方便,而且想单独设置建筑河水等样式也不支持。高德地图有个自定义地图样式,使用高德地图方法加载就可以加载各种我们自定义的地图,有了思路就在文档查找有没有合适的插件。

效果图如下:

具体操作如下:

查看文档发现有个Leaflet.CustomLayer.js插件可以自定义图层满足我们的需求。https://github.com/iDerekLi/Leaflet.CustomLayer

leaflet 初始化 (options 的inertia 需要设为false,后面会有说明)

const map = L.map("map", {
			center: [32.050678, 118.792199], // 地图中心
			zoom: 8.5, //缩放比列
			zoomControl: false, //禁用 + - 按钮
			doubleClickZoom: true, 
			attributionControl: true ,
			minZoom: 3,
			maxZoom: 20, 
			inertia:false  
		});

 动态创建高德地图容器

   需要注意的是高德地图容器样式要取消所有的鼠标事件 pointer-events: none

   高德地图初始化也要关闭所有动画以及禁用拖拽缩放等功能。

  这样是为了避免leaflet 和高德地图冲突,高德地图我们只需要加载出自定义样式,其余的操作交给leaflet

var amap=null;
		$(`<div id="contaion" style="width: 1920px;height: 800px;pointer-events: none;" ></div>`).appendTo('body')
		addAmap();

 function	addAmap(){
		window._AMapSecurityConfig = {
				      securityJsCode:'高德地图的安全秘钥',
				  }
		 AMapLoader.load({
		     "key": "高德地图key",              
		     "version": "2.0",   
		     "plugins": [],          
		 }).then((AMap)=>{
		         amap= new AMap.Map('contaion',
				 {
					 zoomEnable:true,
                     dragEnable:true,
					 resizeEnable: false,
					 animateEnable:false,
					 jogEnable:false,
					 terrain:true,
					  }
					);
	 var position = new AMap.LngLat(118.792199,32.050678); 
				 amap.setCenter(position); 
				 amap.setZoom(8.5); 
       amap.setMapStyle('amap://styles/高德地图分享的样式ID')
			 }).catch((e)=>{
		         console.error(e);  
		     });   
		 	
	 }

  将高德地图转成leaflet 自定义图层

    Leaflet.CustomLayer.js 有加载canvas svg 和 Dom,我们使用加载Dom的方法

    layer-render监听每次地图的拖拽缩放去设置高德地图的缩放,但操作时发现高德地图有延迟不同步卡顿问题,体验感非常不好,翻看文档将inertia 设为false后就可以了。

var customLayer = new L.customLayer({
          container: $('#contaion')[0], // The DomElement object to display.
          minZoom: 3, // Minimum zoom level of the layer.
          maxZoom: 20, // Maximum zoom level of the layer.
          opacity: 1, // Opacity of the layer.
          visible: true, // Visible of the layer.
          zIndex: 100 // The explicit zIndex of the layer.
        });
        
        customLayer.on("layer-beforemount", function() {
          console.log("layerBeforeMount");
        });
        
        customLayer.on("layer-mounted", function() {
          console.log("layerMounted");
        })
        
        customLayer.on("layer-render", function(e) {
        
          if(!!amap){
      let azoom = amap.getZoom();
     amap.setZoomAndCenter(e.target._zoom,[e.target._center.lng,         e.target._center.lat],true) 
             } 
             });

        customLayer.on("layer-beforedestroy", function() {
          console.log("layerBeforeDestroy");
        });
        
        customLayer.on("layer-destroyed", function() {
          console.log("layerDestroyed");
        });
        
        customLayer.addTo(map);

 至此高德自定义地图加载完成了,上面是html做的demo,如果想vue中使用或者封装成组件还需要自己修改下。

 

 

标签:layer,自定义,地图,leaflet,amap,高德
From: https://www.cnblogs.com/hardmeng/p/16502687.html

相关文章

  • umi配置chainWebpack,使用自定义loader----jsx-px2rem
    前言虽然云谦大佬在github上说了,umi本身的配置已经很完善了,但是肯定满足不了所有人各种各样的奇葩需求。。。比如今天说的将jsx中的style里,将px转换为rem。 umi本身提......
  • java poi导出excel单元格设置自定义背景颜色(任意颜色)
    转自:http://t.csdn.cn/QHfUU//创建一个workbook对象Workbookworkbook=newXSSFWorkbook();//创建一个sheet对象Sheetsheet=workbook.createSheet();//创......
  • SAP ABAP FICO FAGLL03H CODING BLOCK新增自定义字段
    1、SGLPOS_N_GL_CT、SGLPOS_N_CT两个结构新增自定义字段  2、执行t-code:HDBVIEWS  3、实施增强 FAGL_LIB  4、使用selectdata方法 5、代码示例:......
  • 自定义一个python pip包
    新建一个目录mkdirexample基本说明文件README.rstLICENSEsetup.cfgsetup.pyMANIFEST.indocsexample/README.rst点击查看代码=====example=====Pollsi......
  • 自定义定时器
    自定义定时器#include<iostream>#include<sys/epoll.h>#include<chrono>#include<functional>#include<memory>#include<set>int64_tgid{0};structNodeBa......
  • 【AGC】远程配置如何传入自定义属性
    ​背景:现在AGC远程配置端侧服务提供的SDK支持传入自定义属性获取和更新云端配置数据了。下面将通过一个demo集成远程配置SDK来实现这一功能。 集成准备1.在AGC创建工......
  • 1710. 卡车上的最大单元数 ----- 贪心算法,自定义sort排序
    请你将一些箱子装在一辆卡车上。给你一个二维数组boxTypes,其中boxTypes[i]=[numberOfBoxesi,numberOfUnitsPerBoxi]:numberOfBoxesi是类型i的箱子的数量。numb......
  • JavaScript自定义数据类型判断函数
    functionjudgeType(ele){letres=typeofele;if(res==="object"){//短路表达式,第一个成立则返回第二个的值,第一个不成立,则返回第一个的值......
  • 自定义组件
    创建自定义组件类似于页面,一个自定义组件由jsonwxmlwxssjs4个文件组成。要编写一个自定义组件,首先需要在json文件中进行自定义组件声明(将component字段设为true......
  • 自定义页面
    [Page构造器]Page({/***页面的初始数据*/data:{},/***生命周期函数--监听页面加载*/onLoad:function(e){},/**......