mapbox加载全球3D建筑

本案例使用Mapbox GL JavaScript库进行加载全球3D建筑。

文章目录

  • 1. 引入 CDN 链接
  • 2. 创建地图
  • 3. 监听地图加载完成事件
    • 3.1. 获取地图的样式中的图层
    • 3.2. 查找图层
    • 3.3. 添加三维建筑图层
  • 4. 演示效果
  • 5. 代码实现

1. 引入 CDN 链接

<!-- 1.引入CDN链接 -->
<script src="https://api.mapbox.com/mapbox-gl-js/v2.12.0/mapbox-gl.js"></script>
<linkhref="https://api.mapbox.com/mapbox-gl-js/v2.12.0/mapbox-gl.css"rel="stylesheet"
/>

2. 创建地图

我们创建了一个Mapbox GL JS地图实例,设置了地图的容器、默认的地图风格、中心点坐标、地图级别、地图俯仰角、地球旋转角度以及启用抗锯齿功能。

const map = new mapboxgl.Map({container: "map", //地图容器style: "mapbox://styles/mapbox/light-v11", //地图样式center: [-74.0066, 40.7135], //地图中心zoom: 15.5, //缩放级别pitch: 45, //地图俯仰角bearing: -17.6, //地图旋转角度antialias: true, //启用抗锯齿功能
});

3. 监听地图加载完成事件

3.1. 获取地图的样式中的图层

const layers = map.getStyle().layers;

3.2. 查找图层

查找图层中类型为symbol并且有text-field属性的图层。

// 3.2 查找图层
const labelLayerId = layers.find((layer) => layer.type === "symbol" && layer.layout["text-field"]
).id;

3.3. 添加三维建筑图层

将三维建筑数据层添加到地图中,并应用一些样式来表现数据。

  • 首先,代码定义了一个图层对象,包括所需的属性,如 ID、数据源、图层名称、过滤器、类型和最小缩放级别。
  • 接着,为图层对象定义了一个 paint 属性,用于定义图层的样式。这里的样式包括填充颜色的透明度(opacity)、三维建筑的高度和基线。
  • 使用 "interpolate" 表达式来平滑地过渡效果,当用户缩放地图时,三维建筑的高度和基线会随着地图的放大而增加。
  • 最后,将图层对象添加到地图中,并指定标签层labelLayerId
// 3.3 添加三维建筑图层
map.addLayer({id: "add-3d-buildings",source: "composite","source-layer": "building",filter: ["==", "extrude", "true"],type: "fill-extrusion",minzoom: 15,paint: {"fill-extrusion-color": "#aaa",// Use an 'interpolate' expression to// add a smooth transition effect to// the buildings as the user zooms in.// 图层高度"fill-extrusion-height": ["interpolate",["linear"],["zoom"],1,0,8,["get", "height"],],// 离地高度"fill-extrusion-base": ["interpolate",["linear"],["zoom"],1,0,8,["get", "min_height"],],"fill-extrusion-opacity": 0.9,},},labelLayerId
);

4. 演示效果

image-20240228153111646

5. 代码实现

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><!-- 1.引入CDN链接 --><script src="https://api.mapbox.com/mapbox-gl-js/v2.12.0/mapbox-gl.js"></script><linkhref="https://api.mapbox.com/mapbox-gl-js/v2.12.0/mapbox-gl.css"rel="stylesheet"/><title>加载全球3D建筑</title><style>* {margin: 0;padding: 0;}#map {width: 100vw;height: 100vh;}</style></head><body><div id="map"></div><script>// 2.创建地图window.onload = () => {// 注册tokenmapboxgl.accessToken ="pk.eyJ1IjoiY2hlbmdjaGFvODg2NiIsImEiOiJjbGhzcWowMHUwYTNyM2VwNXZhaXhjd3Q4In0.FEh2q7sEW88Z1B5GcK_TDg";// 初始化地图对象const map = new mapboxgl.Map({container: "map", //地图容器style: "mapbox://styles/mapbox/light-v11", //地图样式center: [-74.0066, 40.7135], //地图中心zoom: 15.5, //缩放级别pitch: 45, //地图俯仰角bearing: -17.6, //地图旋转角度antialias: true, //启用抗锯齿功能});// 3.监听地图加载完成事件map.on("style.load", () => {// Insert the layer beneath any symbol layer.// 3.1 获取地图的样式中的图层const layers = map.getStyle().layers;// 3.2 查找图层//   查找图层中类型为symbol并且有text-field属性的图层const labelLayerId = layers.find((layer) => layer.type === "symbol" && layer.layout["text-field"]).id;// The 'building' layer in the Mapbox Streets// vector tileset contains building height data// from OpenStreetMap.// 3.3 添加三维建筑图层map.addLayer({id: "add-3d-buildings",source: "composite","source-layer": "building",filter: ["==", "extrude", "true"],type: "fill-extrusion",minzoom: 15,paint: {"fill-extrusion-color": "#aaa",// Use an 'interpolate' expression to// add a smooth transition effect to// the buildings as the user zooms in.// 图层高度"fill-extrusion-height": ["interpolate",["linear"],["zoom"],1,0,8,["get", "height"],],// 离地高度"fill-extrusion-base": ["interpolate",["linear"],["zoom"],1,0,8,["get", "min_height"],],"fill-extrusion-opacity": 0.9,},},labelLayerId);});};</script></body>
</html>

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

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

相关文章

bert 相似度任务训练简单版本,faiss 寻找相似 topk

目录 任务 代码 train.py predit.py faiss 最相似的 topk 数 任务 使用 bert-base-chinese 训练相似度任务&#xff0c;参考&#xff1a;微调BERT模型实现相似性判断 - 知乎 参考他上面代码&#xff0c;他使用的是 BertForNextSentencePrediction 模型&#xff0c;Bert…

基于springboot+vue实现民宿管理系统项目【项目源码+论文说明】

基于springbootvue民宿管理系统演示 摘要 伴随着我国旅游业的快速发展&#xff0c;民宿已成为最受欢迎的住宿方式之一。民宿借助互联网和移动设备的发展&#xff0c;展现出强大的生命力和市场潜力。民宿主要通过各种平台如携程、去哪儿、淘宝等在网络上销售线下住宿服务&#…

伪创新的迷惑手法-UMLChina建模知识竞赛第5赛季第6轮

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 只要最先答对前3题&#xff0c;即可获得本轮优胜。 如果有第4题&#xff0c;第4题为附加题&am…

Git入门学习笔记

Git 是一个非常强大的分布式版本控制工具&#xff01; 在下载好Git之后&#xff0c;鼠标右击就可以显示 Git Bash 和 Git GUI&#xff0c;Git Bash 就像是在电脑上安装了一个小型的 Linux 系统&#xff01; 1. 打开 Git Bash 2. 设置用户信息&#xff08;这是非常重要的&…

JS逆向进阶篇【去哪儿旅行登录】【下篇-逆向Bella参数JS加密逻辑Python生成】

目录&#xff1a; 每篇前言&#xff1a;引子——本篇目的1、 代码混淆和还原&#xff08;1&#xff09;单独替换&#xff1a;&#xff08;2&#xff09;整个js文件替换&#xff1a; 2、算法入口分析3、 深入分析&#xff08;0&#xff09;整体分析&#xff1a;&#xff08;1&am…

在K8S集群中部署SkyWalking

1. 环境准备 K8S 集群kubectlhelm 2. 为什么要部署SkyWalking&#xff1f; 我也不道啊&#xff0c;老板说要咱就得上啊。咦&#xff0c;好像可以看到服务的各项指标&#xff0c;像SLA&#xff0c;Apdex这些&#xff0c;主要是能够进行请求的链路追踪&#xff0c;bug排查的利…

stressapptest源码剖析:主函数main解析和sat类头文件分析

主函数main解析和sat类头文件分析 一、简介二、入口函数main.cc剖析三、SAT压力测试对象接口和数据结构总结 一、简介 stressapptest&#xff08;简称SAT&#xff09;是一种用于在Linux系统上测试系统稳定性和可靠性的工具&#xff0c;通过产生CPU、内存、磁盘等各种负载来测试…

制造业数字化赋能:1核心2关键3层面4方向

随着科技的飞速发展&#xff0c;制造业正站在数字化转型的风口浪尖。数字化转型不仅关乎企业效率与利润&#xff0c;更决定了制造业在全球竞争中的地位。那么&#xff0c;在这场波澜壮阔的数字化浪潮中&#xff0c;制造业如何抓住机遇&#xff0c;乘风破浪&#xff1f;本文将从…

【3GPP】【核心网】【5G】5G核心网协议解析(一)(超详细)

1. 5G核心网概念 5G核心网是支撑5G移动通信系统的关键组成部分&#xff0c;是实现5G移动通信的重要基础设施&#xff0c;它负责管理和控制移动网络中的各种功能和服务。它提供了丰富的功能和服务&#xff0c;支持高速、低时延、高可靠性的通信体验&#xff0c;并为不同行业和应…

专科生去华为面试,后续来了。。。

专科生去华为面试&#xff0c;后续来了。。。 大家好&#xff0c;我是銘&#xff0c;全栈开发程序员。 今天我正上班呢&#xff0c;一个之前的同事给我发信息&#xff0c;说他去华为面试了&#xff0c;我听到这个消息有点懵逼&#xff0c;我和他是同一年毕业的&#xff0c;我…

基于粒子群优化算法的图象聚类识别matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于粒子群优化算法的图象聚类识别。通过PSO优化方法&#xff0c;将数字图片的特征进行聚类&#xff0c;从而识别出数字0~9. 2.测试软件版本以及运行结果展示 M…

StarRocks——中信建投统一查询服务平台构建

目录 一、需求背景 1.1 数据加工链路复杂 1.2 大数据量下性能不足&#xff0c;查询响应慢 1.3 大量实时数据分散在各个业务系统&#xff0c;无法进行联合分析 1.4 缺少与预计算能力加速一些固定查询 二、构建统一查询服务平台 三、落地后的效果与价值 四、项目经验总结…