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 相关文章推荐
js随机颜色代码的多种实现方式
Apr 23 Javascript
你必须知道的JavaScript 变量命名规则详解
May 07 Javascript
完美解决AJAX跨域问题
Nov 01 Javascript
JavaScript中的值类型详细介绍
Dec 29 Javascript
浅谈javascript的分号的使用
May 12 Javascript
jQuery基于json与cookie实现购物车的方法
Apr 15 Javascript
js注入 黑客之路必备!
Sep 14 Javascript
js实现省份下拉菜单效果
Feb 15 Javascript
详解vue2.0脚手架的webpack 配置文件分析
May 27 Javascript
详解Vue中localstorage和sessionstorage的使用
Dec 22 Javascript
深入理解vue中slot与slot-scope的具体使用
Jan 26 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
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对象模型深度探索之对象复制
2008/03/27 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
php中Session的生成机制、回收机制和存储机制探究
2014/08/19 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
php检测文本的编码
2015/07/26 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
PHP7 标准库修改
2021/03/09 PHP
用javascript连接access数据库的方法
2006/11/17 Javascript
js Flash插入函数免激活代码
2009/03/31 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
javascript图片延迟加载实现方法及思路
2015/12/31 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
2016/09/19 Javascript
node+express制作爬虫教程
2016/11/11 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
2018/04/12 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
Python基础练习之用户登录实现代码分享
2017/11/08 Python
python ansible服务及剧本编写
2017/12/29 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
电子工程专业毕业生求职信
2014/03/14 职场文书
小班教师个人总结
2015/02/05 职场文书
全国爱眼日活动总结
2015/02/27 职场文书
辅导员学期工作总结
2015/08/14 职场文书
同学会演讲稿
2019/04/02 职场文书
详解Laravel制作API接口
2021/05/31 PHP