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 相关文章推荐
javascript 类方法定义还是有点区别
Apr 15 Javascript
javascript中简单的进制转换代码实例
Oct 26 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
Jul 27 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
Jul 22 jQuery
ReactNative踩坑之配置调试端口的解决方法
Jul 28 Javascript
JS库 Highlightjs 添加代码行号的实现代码
Sep 13 Javascript
vue中slot(插槽)的介绍与使用
Nov 12 Javascript
在微信小程序中使用图表的方法示例
Apr 25 Javascript
Vue + Element UI图片上传控件使用详解
Aug 20 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
Jun 05 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
Jul 22 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 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
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
2014/08/20 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
JavaScript调用Activex控件的事件的实现方法
2010/04/11 Javascript
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
实例讲解js验证表单项是否为空的方法
2016/01/09 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
JavaScript Math 对象常用方法总结
2016/04/28 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
2016/10/24 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
2018/08/27 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
详解javascript 变量提升(Hoisting)
2019/03/12 Javascript
微信小程序在text文本实现多种字体样式
2019/11/08 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
Python3字符串encode与decode的讲解
2019/04/02 Python
python dlib人脸识别代码实例
2019/04/04 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
python爬取微博评论的实例讲解
2021/01/15 Python
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
荷兰超市:DEEN
2018/03/14 全球购物
linux面试题参考答案(6)
2014/08/29 面试题
授权委托书
2014/09/17 职场文书
模范教师事迹材料
2014/12/16 职场文书
2015年库房管理工作总结
2015/10/14 职场文书
python实现批量移动文件
2021/04/05 Python