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 处理网页内容的实现代码
Feb 15 Javascript
Extjs实现进度条的两种便捷方式
Sep 26 Javascript
使用jQuery实现更改默认alert框体
Apr 13 Javascript
用javascript实现自动输出网页文本
Jul 30 Javascript
微信小程序 保留小数(toFixed)详细介绍
Nov 16 Javascript
实例解析angularjs的filter过滤器
Dec 14 Javascript
Ajax跨域实现代码(后台jsp)
Jan 21 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
Feb 11 Javascript
微信小程序左滑动显示菜单功能的实现
Jun 14 Javascript
微信小程序 简易计算器实现代码实例
Sep 02 Javascript
js实现秒表计时器
Dec 16 Javascript
JS 创建对象的模式实例小结
Apr 28 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 cron中的批处理
2008/09/16 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
PHP empty函数报错解决办法
2014/03/06 PHP
Zend Framework教程之视图组件Zend_View用法详解
2016/03/05 PHP
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
JavaScript中的对象的extensible属性介绍
2014/12/30 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
js判断文件类型大小并给出提示的实现方法
2018/01/03 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
JS实现的雪花飘落特效示例
2019/12/03 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
理解Python中的类与实例
2015/04/27 Python
在Python中操作日期和时间之gmtime()方法的使用
2015/05/22 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
python批量替换多文件字符串问题详解
2018/04/22 Python
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
Python socket服务常用操作代码实例
2020/06/22 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
Python生成器generator原理及用法解析
2020/07/20 Python
python利用faker库批量生成测试数据
2020/10/15 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
Python运算符+与+=的方法实例
2021/02/18 Python
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
教师党的群众路线对照检查材料
2014/09/24 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
硕士毕业论文导师评语
2014/12/31 职场文书
商场收银员岗位职责
2015/04/07 职场文书
Python实现查询剪贴板自动匹配信息的思路详解
2021/07/09 Python