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

相关文章

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)

《JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)》本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有... 目录第一步 下载安装JDK第二步 配置环境变量第三步 切换JDK版本并验证可能遇到的问题前提:公司常

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

Spring Boot实现多数据源连接和切换的解决方案

《SpringBoot实现多数据源连接和切换的解决方案》文章介绍了在SpringBoot中实现多数据源连接和切换的几种方案,并详细描述了一个使用AbstractRoutingDataSource的实... 目录前言一、多数据源配置与切换方案二、实现步骤总结前言在 Spring Boot 中实现多数据源连接

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

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

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

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