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 EasyUI NumberBox(数字框)的用法
Jul 08 Javascript
理解Javascript_14_函数形式参数与arguments
Oct 20 Javascript
JSON 数据格式介绍
Jan 13 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
Feb 27 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
May 19 Javascript
Jquery获得控件值的三种方法总结
Feb 13 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
Feb 21 Javascript
JavaScript字符串删除重复字符的方法
Dec 25 Javascript
JS多文件上传的实例代码
Jan 11 Javascript
基于AngularJS实现表单验证功能
Jul 28 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
Apr 29 Javascript
vue $mount 和 el的区别说明
Sep 11 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 5.0创建图形的巧妙方法
2010/10/12 PHP
php对csv文件的读取,写入,输出下载操作详解
2013/08/10 PHP
php文件上传简单实现方法
2015/01/24 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
jquery tab标签页的制作
2010/05/10 Javascript
用javascript作一个通用向导说明
2011/08/30 Javascript
javascript中数组的冒泡排序使用示例
2013/12/18 Javascript
jQuery遍历Table应用示例
2014/04/09 Javascript
使用typeof方法判断undefined类型
2014/09/09 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
微信小程序实现菜单左右联动
2020/05/19 Javascript
[02:53]2018年度DOTA2最佳战队-完美盛典
2018/12/17 DOTA
Python执行时间的计算方法小结
2017/03/17 Python
理解Python中的绝对路径和相对路径
2017/08/30 Python
浅谈Pandas中map, applymap and apply的区别
2018/04/10 Python
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
自考生毕业自我鉴定
2013/10/10 职场文书
高中教师考核方案
2014/05/18 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
关于学习的决心书
2015/02/05 职场文书
男人帮观后感
2015/06/18 职场文书
如何书写读后感?(附范文)
2019/07/26 职场文书
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis
python函数的两种嵌套方法使用
2022/04/02 Python