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 相关文章推荐
js限制文本框只能输入数字(正则表达式)
Jul 15 Javascript
JavaScript 异常处理 详解
Feb 06 Javascript
jquery自定义表格样式
Nov 23 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
Aug 17 Javascript
JavaScript基于对象去除数组重复项的方法
Oct 09 Javascript
利用纯Vue.js构建Bootstrap组件
Nov 03 Javascript
深入浅析Vue组件开发
Nov 25 Javascript
js仿淘宝商品放大预览功能
Mar 15 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
Sep 30 Javascript
利用VS Code开发你的第一个AngularJS 2应用程序
Dec 15 Javascript
JavaScript运行原理分析
Feb 09 Javascript
Vue实现拖放排序功能的实例代码
Jul 08 Javascript
通过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 simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
数据库中排序的对比及使用条件详解
2012/02/23 PHP
php简单浏览目录内容的实现代码
2013/06/07 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
JavaScript 函数式编程的原理
2009/10/16 Javascript
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
2016/12/02 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
基于hover的用法实例(推荐)
2017/07/04 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
js实现石头剪刀布游戏
2020/10/11 Javascript
使用Python抓取模板之家的CSS模板
2015/03/16 Python
老生常谈进程线程协程那些事儿
2017/07/24 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
Python3爬虫学习入门教程
2018/12/11 Python
python类的实例化问题解决
2019/08/31 Python
python的faker库用法
2019/11/28 Python
木马的传播途径主要有哪些
2016/04/08 面试题
介绍一下Ruby的多线程处理
2013/02/01 面试题
建筑专业自荐信
2013/10/18 职场文书
家庭教育先进个人事迹材料
2014/01/24 职场文书
十八届三中全会个人学习材料
2014/02/13 职场文书
客服专员岗位职责
2014/02/28 职场文书
群众路线查摆问题整改措施
2014/10/10 职场文书
委托书英文
2015/01/28 职场文书
老兵退伍感言
2015/08/03 职场文书
《老人与海鸥》教学反思
2016/02/16 职场文书
检讨书之工作不认真
2019/08/14 职场文书
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis