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 相关文章推荐
IE和firefox浏览器的event事件兼容性汇总
Dec 06 Javascript
一些主流JS框架中DOMReady事件的实现小结
Feb 12 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
Feb 19 Javascript
jQuery EasyUI Tab 选项卡问题小结
Aug 16 Javascript
简单几步实现返回顶部效果
Dec 05 Javascript
浅谈Javascript中的Label语句
Dec 14 Javascript
JavaScript的事件机制详解
Jan 17 Javascript
vue2.0结合Element实现select动态控制input禁用实例
May 12 Javascript
JavaScript取得gridview中获取checkbox选中的值
Jul 24 Javascript
vue组件Prop传递数据的实现示例
Aug 17 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
May 01 Javascript
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 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
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
php实现mysql备份恢复分卷处理的方法
2014/12/26 PHP
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
2016/06/20 PHP
php求数组全排列,元素所有组合的方法总结
2017/03/14 PHP
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
利用iscroll4实现轮播图效果实例代码
2017/01/11 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
关于JSON解析的实现过程解析
2019/10/08 Javascript
JS实现简单打字测试
2020/06/24 Javascript
python中wx将图标显示在右下角的脚本代码
2013/03/08 Python
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
浅谈django orm 优化
2018/08/18 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
Python目录和文件处理总结详解
2019/09/02 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
基于python调用psutil模块过程解析
2019/12/20 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
2020/10/15 Python
python中time包实例详解
2021/02/02 Python
100%羊绒:NakedCashmere
2020/08/26 全球购物
《跨越海峡的生命桥》教学反思
2014/02/24 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
会计求职自荐信
2014/06/20 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
高三生物教学反思
2016/02/22 职场文书
幼儿园2016年感恩节活动总结
2016/04/01 职场文书
nginx优化的六点方法
2021/03/31 Servers
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL