mapbox 测量 图层切换 画圈

2024-02-20 08:30

本文主要是介绍mapbox 测量 图层切换 画圈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面

持续更新

  • 仓库地址
    github
    npm

  • 功能

  1. 测量工具
  2. 绘制工具
  3. 图层分组操作
  4. setStyle方法重写
  5. 回到初始位置
  6. 切换图层
  7. 涂鸦

功能介绍

图层分组操作

  • 图层操作是基于 Map 类添加的扩展,所以可以直接在 Map 的实例中使用以下函数
        /*** 所有图层组,不要尝试自行使用*/layerGroups: Dict<string, LayerGroup>/*** 所有图层组的图层id合集*/getAllGroupLayerIds(): string[]/*** 创建图层组* @param id 图层组id*/addLayerGroup(id: string): LayerGroup/*** 获取图层组* @param id 图层组id*/getLayerGroup(id: string): LayerGroup | undefined/*** 删除图层组* @param id 图层id*/removeLayerGroup(id: string): void
  • 使用 addLayerGroup 方法创建的实例(LayerGroup类型)又可以对单图层进行添加、删除、是否显示等操作,具体请在仓库example中查看把😂。下面展示一下效果,很方便的将 文字(symbol)、线(line)、面(fill)同时显示和隐藏。
    setTimeout(() => {setInterval(() => {group.show = !group.show;}, 1000)}, 1000);

测量

const map = new mapboxgl.Map({...});
map.addControl(new MeasureControl(options)) // 参数可以为空,或自行配置

鼠标操作

  • 左键点击 : 添加一个点
  • 右键点击 : 删除一个点
  • 左键双击 : 完成测量,开始下一次测量

样式
可以通过 options 中的参数自行调整

export interface MeasurePointOptions {textSize?: number, // 经纬度文字的大小pointSize?: number, // 点大小textColor?: string, // 文字颜色textOffsetY?: number, // 文字在众方向上的偏移 pointColor?: string, // 点颜色createText?: (lng: number, lat: number) => string //文字创建
}export interface MeasureLineStringOptions {lineColor?: string, //线颜色lineWidth?: number, // 线宽segmentPointColor?: string, // 端点颜色segmentPointSize?: number, // 端点大小textOffsetY?: number, // 文字在纵方向上的偏移segmentTextSize?: number, // 端点(距离求和)文字的大小segmentTextColor?: string, // 端点(距离求和)文字的颜色showCenterText?: boolean, // 是否显示线段中间文字(线段长度)centerTextSize?: number, // 线段中间文字(线段长度)大小centerTextColor?: string, // 线段中间文字(线段长度)颜色createText?: (length: number) => string // 计算长度显示的文字,length 单位为千米(km)
}export interface MeasurePolygonOptions {polygonColor?: string, // 内部颜色polygonOpacity?: number, // 内部颜色透明度polygonOutlineColor?: string, // 边框颜色textSize?: number, // 文字大小textColor?: string, // 文字颜色createText?: (area: number) => string // 创建面积文字,area为平方米
}export interface MeasureControlOptions {btnBgColor?: string // 按钮背景颜色btnActiveColor?: string // 按钮激活颜色svgHoverColor?: string // 图标hover颜色geometryClick?: boolean // 图形是否可以点击enableModes?: MeasureType[] //  允许的测量模式,默认所有measurePointOptions?: MeasurePointOptions // 测量点选项measureLineStringOptions?: MeasureLineStringOptions // 测量线选项measurePolygonOptions?: MeasurePolygonOptions // 测量面选项
}

你也可以使用那三个测量类自定义ui,在 MeasureBase 这个抽象类中可以找到所有的公开方法,很简单😄

测量新功能

  • 点击绘制图形(包括标记文字)弹出更多操作
    这个功能可以在初始化MeasureControl中通过设置geometryClick:true开启

回到初始位置

  • 就是一个很简单的map.easeTo功能的封装,默认 zoom center pitch bearing 从map的初始值中取
    map.addControl(new BackToOriginControl({//eastToOptions:{}}))

切换图层

  • 切换到卫星影像
    可以自定义 textColor backgroundImage 和显示名字 name

  • 附加图层
    通过配置extraLayers参数,激活附加图层ui,提供图层分组功能,组与组之间图层的显隐不互斥,组可以通过mutex直接设置各个图层互斥,也可以在非互斥组内配置LayerItemmutex参数设置该图层与其他图层互斥。
    您还可以通过设置active属性设置图层默认加载到地图(显示),但这个active会在初始化控件时检查互斥是否正确,如果互斥组内存在一个以上的active图层或者非互斥组内存在一个互斥图层以及其他的active图层,则抛出异常。

map.addControl(new SwitchMapControl({satelliteOption: {textColor: 'white',//backgroundImage: '/relics.png'},extraLayers:{'foo':{}}
}));

涂鸦

为圈选做的控件,模仿画笔在地图上画出多边形,在回调中配置扩展逻辑

map.addControl(new DoodleControl({name: '',           // 控件名字reName : '',        // 重绘名exitText : '',      // 退出文本lineColor : '',     //线颜色lineWidth : 1,      // 线宽polygonColor: '',   // 多边形颜色polygonOpacity : 1, // 多边形透明度// 绘制开始onStart: () => { measureControl.stop() },// 绘制多边形完成onDrawed: polygon => { () => { alert(JSON.stringify(polygon)) } },// 清空回调onClear:()=>{},// 退出回调onExit:()=>{}
}))

写在最后

如果您觉得还不错,欢迎star 😊😊😊

这篇关于mapbox 测量 图层切换 画圈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/727602

相关文章

MyBatis 切换不同的类型数据库方案

下属案例例当前结合SpringBoot 配置进行讲解。 背景: 实现一个工程里面在部署阶段支持切换不同类型数据库支持。 方案一 数据源配置 关键代码(是什么数据库,该怎么配就怎么配) spring:datasource:name: test# 使用druid数据源type: com.alibaba.druid.pool.DruidDataSource# @需要修改 数据库连接及驱动u

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

Android 引导图层、引导页

Android 引导图层(参考gith项目) Android 引导图层参考gith项目 简介不多说 先上图 部分代码说明 简介: 最最轻量级的新手引导图层库,支持单页,多个引导,支持设置不同的图形,支持动画等,例如:Activity 、fragment、各种对应View 皆可; 不多说 先上图: OK ;可以根据自己的需求重新定义 显示的效果;都

15 组件的切换和对组件的data的使用

划重点 a 标签的使用事件修饰符组件的定义组件的切换:登录 / 注册 泡椒鱼头 :微辣 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-

71-java 导致线程上下文切换的原因

Java中导致线程上下文切换的原因通常包括: 线程时间片用完:当前线程的时间片用完,操作系统将其暂停,并切换到另一个线程。 线程被优先级更高的线程抢占:操作系统根据线程优先级决定运行哪个线程。 线程进入等待状态:如线程执行了sleep(),wait(),join()等操作,使线程进入等待状态或阻塞状态,释放CPU。 线程占用CPU时间过长:如果线程执行了大量的I/O操作,而不是CPU计算

R语言统计分析——重复测量方差分析

参考资料:R语言实战【第2版】         所谓重复测量方差分析,即受试者被测量不止一次。本例使用数据集市co2数据集:因变量是二氧化碳吸收量(uptake),自变量是植物类型(Type)和七种水平的二氧化碳浓度(conc)。Type是组间因子,conc是组内因子。Type已经被存储为一个因子变量,还需要将conc转换为因子变量。分析过程如下: # 将conc变量转化为因子变量CO2$c

[轻笔记]ubuntu shell脚本切换conda环境

source /home/yourhostname/anaconda3/etc/profile.d/conda.sh # 关键!!!conda activate env_name

ViewPager+fragment实现切换页面(一)

如今的很多应用中都是下面有一排按钮,点击可以切换页面,滑动也可以切换页面。下面就来简单的实现这个功能。 思路 首先肯定是会用到viewpager这个控件,为了能够向下兼容,最好用v4包下的viewpager,Activity要继承FragmentActivity 其次用一个集合来存储所有的fragment页面在设置viewpager的适配器时,把存储fragment页面的list集合传入ada

『功能项目』武器的切换实例【34】

本章项目成果展示 我们打开上一篇33战士的A键连击的项目, 本章要做的事情是按键盘E键切换职业时切换手中的武器 首先在资源商店下载免费的武器模型 创建一个空物体 命名为WeaponPos 将武器预制体拖拽至WeaponPos (注意调整空物体位置就可以后续文章会更换武器) 隐藏两把武器 运行项目 隐藏装备 在资源商店

2409wtl,切换视图

原文 介绍 我从一个基于SDI(单文档接口)WTL向导的应用开始,添加了一些从控件继承的窗口和一些对话框窗口(表单视图),然后才发现我必须,使SDI框架动态加载和卸载子窗口. 本文演示了两个可用来完成的技术:在SDI应用中的视图间动态切换.这是我使用的两个. 技术 1技术:第一个方法涉及按需析构和重建视图实例.这更简单,且在不介意析构和重建窗口对象时效果很好. 2:按需创建视图,然后用