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 import css实例代码
Jul 18 Javascript
用js传递value默认值的示例代码
Sep 11 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
May 10 Javascript
jQuery基于BootStrap样式实现无限极地区联动
Aug 26 Javascript
jquery横向纵向鼠标滚轮全屏切换
Feb 27 Javascript
Vue.js实战之Vuex的入门教程
Apr 01 Javascript
简单谈谈vue的过渡动画(推荐)
Oct 11 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
Jan 13 Javascript
jquery.picsign图片标注组件实例详解
Feb 02 jQuery
extract-text-webpack-plugin用法详解
Feb 14 Javascript
JS实现简单随机3D骰子
Oct 24 Javascript
JavaScript实现打字游戏
Feb 19 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的命名空间(二)
2018/02/21 PHP
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
2015/03/04 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
JS中type="button"和type="submit"的区别
2017/07/04 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
在Python的Django框架中生成CSV文件的方法
2015/07/22 Python
pycharm安装图文教程
2017/05/02 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
工程师求职简历的自我评价分享
2013/10/10 职场文书
实习生自我鉴定
2013/12/12 职场文书
简短证婚人证婚词
2014/01/09 职场文书
工程索赔意向书
2014/08/30 职场文书
升学宴演讲稿
2014/09/01 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
2015年保送生自荐信
2015/03/24 职场文书
如何使用分区处理MySQL的亿级数据优化
2021/06/18 MySQL
Python基本知识点总结
2022/04/07 Python
Android Rxjava3 使用场景详解
2022/04/07 Java/Android