Mapbox 教程: 改变地图样式

        注:相关功能在Mapbox GL JS v3中可用。在新版本中,默认使用标准样式,在创建地图时,可以在构造函数中明确指定style option 设置指定样式,也可以不设置style option 从而使用默认样式。

        本示例通过Mapbox加载了一份带三维白膜的地图。可以看到埃菲尔铁塔等建筑模型。可以看到Mapbox二三维展示效果还是非常赞的,也非常流畅。

        本示例在地图上添加了一个点击交互界面,可以修改Mapbox地图标准样式的一些参数。另外这个示例也增加了一个自定义图层。对于GIS是什么的问题,其中一个答案是GIS就是数据库。我觉得Mapbox的架构师大概是这种说法的拥趸。在Mapbox中,要添加一个图层,需要首先addSource添加数据源,然后再addLayer添加图层,就像是数据库里面,先指定数据源,再指定表名和查询条件,来获取数据。

        点击交互组件上与属性关联的按钮,调用setConfigPropety方法来修改属性关联的样式,basemap关键字指代标准样式。

        *-emissive-strength样式的新属性,例如  line-emissive-strength,可以控制照射到模型上的光照强度。调整 line-emissive-strength属性,可以提高线的亮度,尤其是在更暗的光照设置下,会更加明显。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Change a map's style configuration property</title>
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
<link href="https://api.mapbox.com/mapbox-gl-js/v3.2.0/mapbox-gl.css" rel="stylesheet">
<script src="https://api.mapbox.com/mapbox-gl-js/v3.2.0/mapbox-gl.js"></script>
<style>
body { margin: 0; padding: 0; }
#map { position: absolute; top: 0; bottom: 0; width: 100%; }
</style>
</head>
<body>
<style>.map-overlay {font:12px/20px 'Helvetica Neue',Arial,Helvetica,sans-serif;position: absolute;width: 200px;top: 0;left: 0;padding: 10px;}.map-overlay .map-overlay-inner {background-color: #fff;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);border-radius: 3px;padding: 10px;margin-bottom: 10px;}.map-overlay-inner fieldset {display: flex;justify-content: space-between;border: none;}.map-overlay-inner label {font-weight: bold;margin-right: 10px;}.map-overlay-inner .select-fieldset {display: block;}.map-overlay-inner .select-fieldset label {display: block;margin-bottom: 5px;}.map-overlay-inner .select-fieldset select {width: 100%;}
</style><div id="map"></div><div class="map-overlay top"><div class="map-overlay-inner"><fieldset class="select-fieldset"><label>Select light preset</label><select id="lightPreset" name="lightPreset"><!-- Each value matches a light preset --><option value="dawn">Dawn</option><option value="day" selected="">Day</option><option value="dusk">Dusk</option><option value="night">Night</option></select></fieldset><fieldset><label for="showPlaceLabels">Show place labels</label><input type="checkbox" id="showPlaceLabels" checked=""></fieldset><fieldset><label for="showPointOfInterestLabels">Show POI labels</label><input type="checkbox" id="showPointOfInterestLabels" checked=""></fieldset><fieldset><label for="showRoadLabels">Show road labels</label><input type="checkbox" id="showRoadLabels" checked=""></fieldset><fieldset><label for="showTransitLabels">Show transit labels</label><input type="checkbox" id="showTransitLabels" checked=""></fieldset></div>
</div><script>// 请通过https://account.mapbox.com申请自己的mapboxgl.accessToken = 'pk.eyJ1IjoibW9yZ2Vua2FmZmVlIiwiYSI6ImNpeHJmNXNmZTAwNHIycXBid2NqdTJibjMifQ.Dv1-GDpTWi0NP6xW9Fct1w';// 初始化地图,初始化参数中可以不含styleconst map = new mapboxgl.Map({container: 'map', // 地图容器 IDcenter: [2.2932, 48.86069], // 初始位置 [lng, lat]zoom: 15.1, // 初始缩放级别pitch: 62, // 初始倾斜角度bearing: -20 // 初始渲染角度});// 样式加载完成后,在地图上添加一条线map.on('style.load', () => {map.addSource('line', {type: 'geojson',lineMetrics: true,data: {type: 'LineString',coordinates: [[2.293389857555951, 48.85896319631851],[2.2890810326441624, 48.86174223718291]]}});map.addLayer({id: 'line',source: 'line',type: 'line',paint: {'line-width': 12,//  `*-emissive-strength` 属性控制照射到物体上的光照强度。// 加大 `line-emissive-strength`的数值,可以提升线在暗色光照下的亮度。 'line-emissive-strength': 0.8,'line-gradient': ['interpolate',['linear'],['line-progress'],0,'red',1,'blue']}});});// 设置交互界面document.getElementById('lightPreset').addEventListener('change', function () {//为下拉框添加change事件响应函数map.setConfigProperty('basemap', 'lightPreset', this.value);});document.querySelectorAll('.map-overlay-inner input[type="checkbox"]')// 获取交互组件中的checkbox.forEach((checkbox) => {checkbox.addEventListener('change', function () {// 为checkbox添加change事件响应函数map.setConfigProperty('basemap', this.id, this.checked);});});
</script></body>
</html>

            界面效果如下。           修改代码调整line-emissive-strength的值,在光照调整为夜晚的情况下,line-emissive-strength0.8和0.1的区别如下,图中埃菲尔铁塔到特洛卡代罗花园的连线亮度变化明显。

         教程完毕,快来试试吧。

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

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

相关文章

esxi配置使用以及虚拟机管理

vSphere Client安装和esxi主机 esxi配置 许可证 虚拟机管理 vSphere Client中创建、删除等虚拟机的管理。 vSphere Client中创建虚拟机并安装操作系统&#xff1b; 步骤1 创建虚拟机 密码&#xff1a;Tongxin2023 (1) 厚置备延迟置零 以默认的厚格式创建虚拟磁盘。创建过…

佛山市人工智能产业生态交流会:实在智能Agent引领“智造浪潮”

制造业&#xff0c;实体经济的核心&#xff0c;技术创新的先锋&#xff0c;供给侧结构性改革的关键。在新一轮产业竞争中&#xff0c;数字化转型成为制造业升级的必由之路&#xff0c;是引领未来的重要抓手。 为促进数字经济赋能实体经济&#xff0c;加快人工智能技术的推广应用…

设计模式|建造者模式(Builder Pattern)

文章目录 结构优点缺点适用场景示例建造者模式(Builder Pattern)是一种创建型设计模式,用于将一个复杂对象的构建过程与其表示分离,以便可以使用相同的构建过程创建不同的表示。 结构 Builder(建造者)接口或抽象类: 定义了构建对象的各个步骤的方法。ConcreteBuilder(具…

C# 冻结Excel窗口以锁定行列、或解除冻结

在处理大型Excel工作簿时&#xff0c;有时候我们需要在工作表中冻结窗格&#xff0c;这样可以在滚动查看数据的同时保持某些行或列固定不动。冻结窗格可以帮助我们更容易地导航和理解复杂的数据集。相反&#xff0c;当你不需要冻结窗格时&#xff0c;你可能需要解冻它们以获得完…

数据结构 | 线性表的顺序表示(王道)

文章目录 顺序表定义综合应用顺序表定义 静态分配 #define MaxSize 50 typedef struct{ElemType data[MaxSize];int length; }SqList;动态分

ubuntu 20.04 设置国内镜像源(阿里源、清华源)

在网上搜了好多设置国内镜像源&#xff0c;都写的乱七八糟的&#xff0c;都是随便换&#xff0c;最后还是换得一堆问题。 镜像源也是跟版本一一对应的&#xff0c;不能随便一个国内源就还过去用&#xff0c;否则会出现各种各样的问题&#xff0c;我也是吃过亏之后才发现的。 国…

【Vue 自定义事件】

组件的自定义事件 一种组件间通讯的方式&#xff0c;适用于&#xff1a;子组件 —> 父组件 绑定自定义事件 第一种方式:在父组件中写单标签1.<Demo 事件名"方法">2.<Demo v-on:事件名"方法"/>第二种方式:使用ref绑定(配置在生命周期中)this…

通讯录项目(用c语言实现)

一.什么是通讯录 通讯录是一种用于存储联系人信息的工具或应用程序。它是一种电子化的地址簿&#xff0c;用于记录和管理个人、机构或组织的联系方式&#xff0c;如姓名、电话号码、电子邮件地址和邮寄地址等。通讯录的目的是方便用户在需要时查找和联系他人。 通讯录通常以列…

手眼标定问题排查_2_圆网格数据排查

经过昨天晚上的调试&#xff0c;发现了一个主要问题&#xff1a;使用圆网格标定板标定时&#xff0c;不能使用cornerSubPix()函数&#xff0c;否则寻找角点时&#xff0c;会导致图一的情况(裁剪为30万像素)。就找到能参考的程序&#xff0c;推进还是很快的。 图一 一些数据对比…

imu6xl点灯(C语言)

参考正点原子开发指南 根据原理图可以看出&#xff0c;我们需要设置低电平导通电路。 在原理图上找到LED0&#xff0c;对应IO为GPIO3 IO复用配置 IMX6UL每个引脚都可以复用 在用户手册第30章可以找到IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03这个寄存器&#xff0c;地址为0x020E0068&…

Linux网络名称空间和虚拟机有何区别

在Linux系统中&#xff0c;网络名称空间和虚拟机都是实现资源隔离和虚拟化的技术&#xff0c;但它们在设计理念、实现机制、资源消耗、使用场景等方面存在着显著的区别。本文旨在全方位、系统性地分析这两种技术的区别。&#x1f50d; 1. 设计理念与实现机制 1.1. 网络名称空…

未来汽车硬件安全的需求(2)

目录 4.汽车安全控制器 4.1 TPM2.0 4.2 安全控制器的硬件保护措施 5. EVITA HSM和安全控制器结合 6.小结 4.汽车安全控制器 汽车安全控制器是用于汽车工业安全关键应用的微控制器。 他们的保护水平远远高于EVITA HSM。今天的典型应用是移动通信&#xff0c;V2X、SOTA、…

bat脚本中使用gradle命令后,脚本不继续执行,直接退出

在window 的bat脚本执行的时候&#xff0c;执行完一个gradlew 目标后会自动退出&#xff0c;pause命令也无效。 原因&#xff1a;gradlew本身是一个bat命令&#xff0c;因此在exit退出的时候&#xff0c;整个脚本进程将退出&#xff0c;加入call命令调用即可&#xff1a; 如下…

python使用ffmpeg分割视频为Hls分片文件/使用OpenSSL加密m3u8和TS文件

FFmpeg和OpenSSL是一个开源免费的软件&#xff0c;在官网上就能下载&#xff0c; FFmpage网址&#xff08;建议选择文件名full结尾的文件&#xff09;&#xff1a;Builds - CODEX FFMPEG gyan.dev OpenSSL网址&#xff08;建议选择win64的MSI文件&#xff09;&#xff1a;Win3…

TS中interface和type的区别

前言 在面试中如果问TS的话&#xff0c;经常会问的一个问题就是interface和type有什么区别&#xff0c;这里做个记录 interface和type的区别 Interface 支持声明合并&#xff1a;如果你有两个相同名称的接口&#xff0c;TypeScript会合并它们 interface User {name: string…

maven依赖管理:依赖仓库管理

1、Maven的依赖如何存放管理&#xff1f; Maven中存在依赖组件&#xff08;常用的是jar包、war包、pom等&#xff0c;也可把Zip包等通过POM文件定义为依赖组件&#xff09;的地方称为仓库&#xff08;Repository&#xff09;。 在Maven中&#xff0c;仓库有三种类型&#xff1…

CSS中grid网格布局(秒懂如何实现网格布局)-菜鸟教程

目录 一、概念 二、使用 1.网格元素 2.display属性 3.网格轨道 4.fr 单位 5.网格单元 6.网格区域 7.网格列与行 8.CSS 网格属性 三、网格容器 display&#xff1a; grid-template-columns 和 grid-template-rows&#xff1a; grid-gap、grid-row-gap 和 grid-column-…

如何使用SQL注入工具?

前言 今天来讲讲SQL注入工具&#xff0c;sqlmap。如何使用它来一步步爆库。 sqlmap官方地址如下。 sqlmap: automatic SQL injection and database takeover tool 前期准备&#xff0c;需要先安装好docker、docker-compose。 一个运行的后端服务&#xff0c;用于写一个存在…

Composer安装与配置详解

目录 第一章:Composer简介 1.1 什么是Composer? 1.2 Composer与传统的依赖管理工具的区别 1.3 Composer的发展历程 1.4 本章小结 第二章:Composer安装 2.1 全局安装与项目内安装 2.1.1 全局安装 安装步骤 2.1.2 项目内安装 安装步骤 2.2 不同操作系统下的安装方…

计算机网络-TCP断开连接阶段错误应对机制

连接断开阶段 四次挥手机制&#xff1a;TCP连接的断开需要四次挥手&#xff0c;这是因为双方都需要独立地关闭数据传输。第二次和第三次挥手不能合并&#xff0c;因为在回复第二次挥手的时候&#xff0c;可能还有数据没有接收完成&#xff0c;所以需要先回复ACK报文&#xff0c…