mapboxgl区划标签避让不遮盖实现的代码详解


Posted in Javascript onJuly 01, 2020

 Mapbox GL JS是一个JavaScript库,使用WebGL渲染交互式矢量瓦片地图和栅格瓦片地图。WebGL渲染意味着高性能,MapboxGL能够渲染大量的地图要素,拥有流畅的交互以及动画效果、可以显示立体地图并且支持移动端,是一款十分优秀的WEB GIS开发框架。

常见的 mapbox.js和mapbox-gl.js的异同点?

    相同点:

                1.都是由Mapbox公司推出的免费开源的JavaScript库

                2.都可以作为前端渲染矢量瓦片交互地图的工具

                3.它们的样式设置都支持Mapbox Style

    不同点:

                1.mapbox.js是Leaflet的一个插件,使用方式是通过结合Leaflet使用

                2.mapbox-gl.js是Leaflet的一个插件,使用方式是通过结合Leaflet使用

                3.使用mapbox-gl.js的浏览器必须支持WebGL渲染,在旧的浏览器中是不支持mapbox-gl.js的,而mapbox.js则没有 此限制

下面看下mapboxgl区划标签避让不遮盖实现的代码。

mapboxgl区划标签避让不遮盖实现的代码详解

mapboxgl地图区划标签采用Marker实现导致密集区域会相互遮盖

new mapboxgl.Marker(el)
    .setLngLat([dataTemp.lon,dataTemp.lat])
    .addTo(map);

经过查阅资料后决定采用Source cluster方式解决,clusterRadius可以根据地图缩放自动聚合检测,聚合半径可设置

1、首先添加一个addSource

map.addSource(sourceId, {
   "type": "geojson",
   "data": {
     "type": "FeatureCollection",
     "features": _this.formatData(datas,map) 
   },
   "cluster": true,
   "clusterRadius": 35 // 聚合半径
  });

2、添加区划标签图层

map.addLayer({//添加区划标签图层
   'id': layerId,
   'type': 'symbol',
   'source': sourceId,
   'layout': {
    'visibility': 'visible',
    'text-field': ['get', 'regionname'],
    'text-font': ['Helvetica Neue', 'Arial', 'Helvetica', 'sans-serif'],
    'text-offset': [0, 0],
    'text-anchor': 'top',
    'text-size':14,
   },
   'paint':{
    'text-color':'#000000',
    
   }
  });

3、鼠标经过区划文字弹出小窗口展示信息,此处采用Popup方便后期扩展

map.on('mouseenter', layerId, function(e) {
   let markerData = e.features[0].properties;
   _this.clearMarker(map);//先清除上次的弹窗
   _this.addMarker(markerData,map);//打开本次区划弹窗
  });
addMarker(){
  let className = 'region-selected-marker-box region-selected-marker-box-';
  let html = "自定义现实内容";
  var popup = new mapboxgl.Popup({
   offset: [20,5], 
   className: className,
   anchor:'left',
   closeButton:false
  })
   .setLngLat([lon,lat])
   .setHTML(html)
   .setMaxWidth("300px")
   .addTo(map);
 }

到此,地区区划标签主动避让就已经实现了,此种方式的优势是不需要重复计算,利用地图cluster属性即可实现,clusterRadius可以设置聚合半径

总结

到此这篇关于mapboxgl区划标签避让不遮盖实现的代码详解的文章就介绍到这了,更多相关mapboxgl区划标签不遮盖内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jQuery 相关控件的事件操作分解
Aug 03 Javascript
javascript的原生方法获取数组中的最大(最小)值
Dec 19 Javascript
js与jQuery 获取父窗、子窗的iframe
Dec 20 Javascript
Jquery 获取对象的几种方式介绍
Jan 17 Javascript
jQuery中:animated选择器用法实例
Dec 29 Javascript
浅析javascript中函数声明和函数表达式的区别
Feb 15 Javascript
JavaScript ES5标准中新增的Array方法
Jun 28 Javascript
js创建对象几种方式的优缺点对比
Sep 28 Javascript
原生JS实现导航下拉菜单效果
Nov 25 Javascript
使用canvas实现一个vue弹幕组件功能
Nov 30 Javascript
Vue学习之常用指令实例详解
Jan 06 Javascript
vue实现锚点定位功能
Jun 29 Vue.js
通过angular CDK实现页面元素拖放的步骤详解
Jul 01 #Javascript
微信小程序用户盒子、宫格列表的实现
Jul 01 #Javascript
vue商城中商品“筛选器”功能的实现代码
Jul 01 #Javascript
vue实现购物车列表
Jun 30 #Javascript
vue实现简单图片上传
Jun 30 #Javascript
vue基于better-scroll仿京东分类列表
Jun 30 #Javascript
vue使用better-scroll实现滑动以及左右联动
Jun 30 #Javascript
You might like
php日期转时间戳,指定日期转换成时间戳
2012/07/17 PHP
PHP中鲜为人知的10个函数
2014/02/28 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
js GridView 实现自动计算操作代码
2009/03/25 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
angular2实现统一的http请求头方法
2018/08/13 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
[06:45]2018DOTA2亚洲邀请赛 4.5 SOLO赛 Sccc vs Maybe
2018/04/06 DOTA
[34:10]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
python中的代码编码格式转换问题
2015/06/10 Python
浅析Python中signal包的使用
2015/11/13 Python
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
树莓派+摄像头实现对移动物体的检测
2019/06/22 Python
Python图像处理模块ndimage用法实例分析
2019/09/05 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
Win10里python3创建虚拟环境的步骤
2020/01/31 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
JVM是一个编译程序还是解释程序
2012/09/11 面试题
小学生学习雷锋倡议书
2014/05/15 职场文书
应届毕业生自荐信
2014/05/28 职场文书
元宵节寄语大全
2015/02/27 职场文书
工作自我推荐信范文
2015/03/25 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技