mapBox 绘制多边形无法设置 边框宽度 解决方法

目录

一、问题

二、解决方法

 三、总结


tips:如嫌繁琐,直接看有颜色的文字即可!

一、问题

1.使用mapBox在地图上绘制点、线、面。绘制多边形的时候发现 直接用 zh(一家提供地图引擎的公司),提供的绘制多边形的方法无法设置边框颜色和边框宽度。很是离谱,按道理这种简单css就能实现的东西,为什么他们不能实现呢?况且fengMap是可以实现的。

二、解决方法

1.mapbox-gl-draw:下载链接https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.js

2.方法一绘制完多边形后,再在多边形外面绘制 一条闭合的线段。于是写了如下的代码:

1)代码如下:


//线覆盖物基础参数
export const LineCoverConfig = {id: 'line',type: 'line',source: 'lineSource',paint: {'line-color': '#28e990','line-width': 9,}
}//多边形覆盖物样式
export const PolygonStyle = {color: '#ff5c2e',opacity: 0.5,height: 1,}
//2)外边线样式(无法优化)
export const PolygonLineStyle = {id: 'polygonLine',type: 'line',source: 'polygonLineSource',paint: {'line-color': '#ff5c2e','line-width': 2}
}      //根据坐标点添加线覆盖物 config:线覆盖物配置项addMark_line(pointArr, config, dataInfo) {const that = Locpard.instance;if (that && that.map) {let linePoint = []let option = Object.assign({}, LineCoverConfig, config);console.log("addMark_line", option, option.source, config)if (Array.isArray(pointArr)) {pointArr.forEach((element) => {linePoint.push([element.y, element.x])})option.floor = pointArr[0]?.floor;}// that.map.drawLine( dataInfo.id, linePoint, option);this.drawLine(linePoint, option, dataInfo)const lineMarker = {id: option.id,source: option.source,type: 'layerLine'}return lineMarker;}}// 根据点集绘制 线段drawLine(pointArr, option, dataInfo) {const that = Locpard.instance;if (that) {that.map.map.addSource(option.source, {type: 'geojson',data: {type: 'Feature',properties: {data: dataInfo},geometry: {type: 'LineString',coordinates: pointArr,}}})that.map.map.addLayer(option)}}// 添加多边形addMark_polygon(option, dataInfo) {const that = Locpard.instance;if (that && that.map) {let pointArr = option.points.map((element) => {return [element.y, element.x]})let config = Object.assign({}, PolygonStyle, { ...option, floor: option.level })console.log("points", pointArr)let markerId = dataInfo.id.toString()//使用 zh 提供的apithat.map.drawPolygon(markerId, pointArr, config)//手动 添加外边框that.addMark_line(option.points, { ...PolygonLineStyle, id: markerId, source: markerId }, dataInfo)return {id: markerId,source: markerId,type: "polygon"}}}

2)效果如下:

 3.方法二:总感觉方法一有问题,一次性渲染难道不是更好吗?为什么要去渲染两个图层,于是去mapBox找到绘制多边形的api,自己封装了一个绘制多边形的方法

1)代码如下:

//多边形覆盖物样式
export const PolygonStyle_2={id:'polygon',type:'fill',source:'polygonSource',layout:{},paint:{'fill-color':'#ff5c2e','fill-opacity':0.5,'fill-outline-color':'#ff5c2e',}
}// can't set border-widthaddMark_polygon(option, dataInfo) {const that = Locpard.instance;if (that && that.map) {let pointArr = option.points.map((element) => {return [element.y, element.x]})option=Object.assign({},PolygonStyle_2,option)//that.map是 zh 封装的地图对象; that.map.map是 mapBox封装的地图对象that.map.map.addSource(option.source,{type:'geojson',data:{type:'Feature',geometry:{type:'Polygon',coordinates:[pointArr]}}})that.map.map.addLayer(option)return {id:dataInfo.id.toString(),soureId:option.source,type: "polygon"}}}

2)效果如下: 虽然可以用fill-outline-color加边框了,仔细看一下可以看到边框的,但是不能设置边框的宽度。

尝试了 fill-outline-width,报错了,没有这个属性。去搜了一下gitHub上说:没有提供设置边框宽度的属性,因为WebGL不支持(会影响渲染速度)

 三、总结

1.所以如果你的需求是 设置边框颜色和边框宽度的话,就只能是 绘制两个图层:一个填充的多边形,外面再加一个 线覆盖图层(即采用方法一:其中的 that.map.drawPolygon(markerId, pointArr, config)==第三方厂家提供的方法 可以使用 方法二中的方法代替)

2.如果仅仅是添加边框颜色,则方法一和方法二都可以

3.不明白 fengMap难道不是用WebGL实现的?为什么它可以直接设置边框宽度呢?如有大佬知道,欢迎评论。

/*

希望对你有帮助!

如有错误,欢迎指正,非常感谢!

*/ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/20485.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux登录时,下游回显非常慢

目录 问题现象 原因分析 解决方法 源码等资料获取方法 问题现象 登录linux时,远程连接正常,[root...]回显非常慢,在执行脚本时,很容易导致命令下发错乱 原因分析 家目录下的.bash_history文件太大,导致每次登陆时读…

SQLSERVER的truncate和delete有区别吗?

一:背景 1. 讲故事 在面试中我相信有很多朋友会被问到 truncate 和 delete 有什么区别 ,这是一个很有意思的话题,本篇我就试着来回答一下,如果下次大家遇到这类问题,我的答案应该可以帮你成功度过吧。 二&#xff1…

特斯拉降价阴影下,智己如何「登高」?

作者 | 刘然 来源 | 洞见新研社 都说背靠大树好乘凉,但背靠上汽集团的智己汽车,反而水深火热。 2021年,在智己正式向外界公布了“豪华纯电智能轿车”智己L7之后,其CEO刘涛曾放出豪言:“我们在未来的很多年后再回顾今…

【TI毫米波雷达笔记】DCA1000EVM+mmWave Studio数据采集的MIMO模式设置(多天线发射工作模式)

【TI毫米波雷达笔记】DCA1000EVMmmWave Studio数据采集的MIMO模式设置(多天线发射工作模式) 以IWR6843AOP为例 其为3发4收的雷达 MIMO模式有两种 TDM-MIMO和BPM-MIMO TDM-MIMO模式(时分复用) TDM-MIMO模式是最简单和常用的MIM…

【机器学习】特征降维 - 方差选择法VarianceThreshold

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 方差选择法 一、方差科普二、方差选择API三、获取数…

Slam十四讲之第一讲和第二讲,实践编程基础

目录 1.镜像寻找①方法1:百度网盘下载②方法2:在开源镜像网站上下载,③方法3:直接在Ubuntu官网下载 2 在VMware中创建虚拟机并安装Ubuntu18.043 安装VMware Tools4 初始系统中,部分软件的安装4.1 gcc 安装4.2 g安装4.3…

github搜索案例

目录结构 public/index.html <!DOCTYPE html> <html lang""><head><meta charset"utf-8"><!-- 针对IE浏览器的一个特殊配置&#xff0c;含义是让IE浏览器以最高的渲染级别渲染页面 --><meta http-equiv"X-UA-Comp…

阿里云配置端口安全组策略

文章目录 为何配置安全组安全组设置安全组应用到实例中 为何配置安全组 nginx正确配置了83端口&#xff0c;却无法访问资源&#xff0c;报502错误&#xff0c;这大概就是服务器的安全策略原因 安全组设置 安全组配置地址 安全组应用到实例中 配置地址

【设计模式】23种设计模式——工厂模式(原理讲解+应用场景介绍+案例介绍+Java代码实现)

工厂模式 需求了解 看一个披萨的项目&#xff1a;要便于披萨种类的扩展&#xff0c;要便于维护 披萨的种类很多(比如 GreekPizz、CheesePizz 等)披萨的制作有 prepare&#xff08;准备材料&#xff09;,bake&#xff08;烘焙&#xff09;,cut&#xff08;切割&#xff09;,b…

element ui 导入模块的封装

导入组件的封装 <template><Modal :visible"visible" title"导入" onSave"onSave" onCancal"closeDialog"><template #default><el-upload ref"upload" class"upload-demo"action"ht…

jmeter 连接数据库常见报错

1. 不允许主机连接到MySQL 报错信息&#xff1a; Response message:java.sql.SQLException: Cannot create PoolableConnectionFactory (null, message from server: "Host 192.168.1.6 is not allowed to connect to this MySQL server") 说明&#xff1a;本机的地…

Jmeter 压测工具的安装及使用

目录 一、简介二、下载三、安装四、启动五、使用1.调整界面显示大小2.添加线程组3.添加 HTTP 请求4.添加 HTTP 请求头5.保存压测配置6.启动压测7.查看结果树8.查看聚合报告 六、补充1.设置中文2.设置字体大小&#xff08;永久生效&#xff09;3.中文乱码 一、简介 官网地址&am…