当前位置: 首页 > news >正文

Pythoner 的Flask项目实践-Mapboxgl-v3全球3D地图体验之地标性 3D 建筑物(迪拜哈里发大厦三维模型展示)

文章目录

    • 1,Mapbox GL JS v3简介
    • 2,使用方法
    • 3,Pythoner 的Flask项目实践
      • 3.1、mapboxglv3.html页面
      • 3.2、app.py修改
      • 3.3、home.html中添加导航菜单
    • 4,运行效果

1,Mapbox GL JS v3简介

Mapbox GL JS v3 引入了 Mapbox Standard Style 和 Mapbox Standard Satellite Style,提供全新的真实感 3D 光照系统、地标性建筑 3D 模型、建筑物与地形阴影等多种视觉增强效果,并且提供了更符合人体工学的 API,便于使用这种全新、丰富、可配置的地图样式,并能与自定义数据实现无缝集成。

新的 Mapbox Standard 样式提供了高性能、优雅的 3D 地图体验,支持强大的动态光照功能、地标性 3D 建筑物,以及精心设计的符号美学。

2,使用方法

项目中使用新的 Mapbox GL JS v3,可以通过 Mapbox GL JS CDN 引入,或者安装 mapbox-gl npm 包。

<script src='https://api.mapbox.com/mapbox-gl-js/v3.15.0/mapbox-gl.js'></script>
<link href='https://api.mapbox.com/mapbox-gl-js/v3.15.0/mapbox-gl.css' rel='stylesheet' />
<div id='map' style='width: 400px; height: 300px;'></div>
<script>
mapboxgl.accessToken = 'pk.eyJ1IjoidGlnZXJiZ3AyMDIwIiwiYSI6ImNsaGhpb3Q0ZTBvMWEzcW1xcXd4aTk5bzIifQ.4mA7mUrhK09N4vrrQfZA_Q';
const map = new mapboxgl.Map({container: 'map', // container IDcenter: [-74.5, 40], // starting position [lng, lat]zoom: 9, // starting zoom
});
</script>

NPM安装使用

npm install --save mapbox-gl

css样式的导入

import 'mapbox-gl/dist/mapbox-gl.css';
import mapboxgl from 'mapbox-gl'; // or "const mapboxgl = require('mapbox-gl');"mapboxgl.accessToken = 'pk.eyJ1IjoidGlnZXJiZ3AyMDIwIiwiYSI6ImNsaGhpb3Q0ZTBvMWEzcW1xcXd4aTk5bzIifQ.4mA7mUrhK09N4vrrQfZA_Q';
const map = new mapboxgl.Map({container: 'map', // container IDcenter: [-74.5, 40], // starting position [lng, lat]zoom: 9, // starting zoom
});

使用 Mapbox GL JS,需要提前申请Mapbox access token。

3,Pythoner 的Flask项目实践

本文以上几篇文章中的Flask项目为基础,添加新的MapboxglV3页面来体验Mapbox3D地图。

3.1、mapboxglv3.html页面

添加新的mapboxglv3.html页面:

{% extends "home.html" %} {% block title %}地图绘制并保存{% endblock %} {% block content %}
<!-- Mapbox GL JS -->
<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title>mapboxgl-v3</title><meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" /><link href="https://api.mapbox.com/mapbox-gl-js/v3.15.0/mapbox-gl.css" rel="stylesheet" /><script src="https://api.mapbox.com/mapbox-gl-js/v3.15.0/mapbox-gl.js"></script><style>body {margin: 0;padding: 0;}#map {position: absolute;top: 0;bottom: 0;width: 100%;}#info {position: absolute;bottom: 10px;left: 10px;background: rgba(255, 255, 255, 0.8);padding: 5px 10px;font-family: monospace;font-size: 14px;border-radius: 4px;}</style></head><body><div id="map" style="width: 100%; margin-top: 10px;"></div><div id="info">移动鼠标查看经纬度</div><!-- Mapbox GL --><script src="https://api.mapbox.com/mapbox-gl-js/v3.15.0/mapbox-gl.js"></script><link href="https://api.mapbox.com/mapbox-gl-js/v3.15.0/mapbox-gl.css" rel="stylesheet" /><!-- Mapbox GL Draw --><link rel="stylesheet" href="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-draw/v1.5.0/mapbox-gl-draw.css" type="text/css" /><script src="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-draw/v1.5.0/mapbox-gl-draw.js"></script><script>mapboxgl.accessToken = "pk.eyJ1IjoidGlnZXJiZ3AyMDIwIiwiYSI6ImNsaGhpb3Q0ZTBvMWEzcW1xcXd4aTk5bzIifQ.4mA7mUrhK09N4vrrQfZA_Q";const map = new mapboxgl.Map({container: "map", // container IDcenter: [55.2744, 25.1972], // starting position [lng, lat]zoom: 14, // starting zoom});var info = document.getElementById("info");// 监听鼠标移动事件map.on("mousemove", function (e) {var lng = e.lngLat.lng.toFixed(5);var lat = e.lngLat.lat.toFixed(5);info.innerHTML = `经度: ${lng}, 纬度: ${lat}`;});// 添加绘图工具var Draw = new MapboxDraw({displayControlsDefault: true,controls: {point: true,line_string: true,polygon: true,trash: true,combine_features: false,uncombine_features: false,},});// 绘图工具控制面板map.addControl(Draw, "top-left");// Add zoom and rotation controls to the map.map.addControl(new mapboxgl.NavigationControl({ visualizePitch: true }), "top-left");// FullscreenControlmap.addControl(new mapboxgl.FullscreenControl({ container: document.querySelector("body") }), "top-left");</script></body>
</html>
{% endblock %}

3.2、app.py修改

app.py中添加页面跳转路由:

@app.route("/mapboxglv3")
def mapboxglv3():return render_template("mapboxglv3.html")

3.3、home.html中添加导航菜单

在home.html页面中,相应的位置添加如下代码:

<a href="{{ url_for('mapboxglv3') }}" class="{% if request.endpoint=='mapboxglv3' %}active{% endif %}"><i class="fa-solid fa-cube"></i> MapboxGLV3-3D地图展示</a>

4,运行效果

在这里插入图片描述

通过鼠标按键操作抬高拉伸地图,显示3D地图:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


“人的一生会经历很多痛苦,但回头想想,都是传奇”。


http://www.dtcms.com/a/422491.html

相关文章:

  • 学习机器学习要学习和掌握哪些知识?
  • 化学专业大型语言模型——SparkChemistry-X1-13B本地部署教程:洞察分子特性,精准预测化学行为
  • qt5下载
  • c 网站开发代码wordpress调用副标题
  • vscode 不能跳转 ERR_OSSL_EVP_BAD_DECRYPT
  • 大数据毕业设计选题推荐-基于大数据的全球产品库存数据分析与可视化系统-大数据-Spark-Hadoop-Bigdata
  • GitPuk入门到实战(4) - 如何进行分支管理
  • 基于AC6351D2做无线键盘
  • 【STM32项目开源】基于STM32的智能路灯控制系统
  • 超越编辑器:IntelliJ IDEA,如何成为Java开发的智慧引擎
  • Day31_【 NLP _1.文本预处理 _(2)文本张量表示方法】
  • UNIX下C语言编程与实践3-Vi 编辑器从入门到精通:快捷键使用与高效编辑技巧
  • 网站 设计 案例 简单易订货小程序怎么收费
  • 锂离子扩散能垒计算如何驱动高性能电池研发-测试GO
  • rtsoft 的“整理”流程
  • C++程序设计上机作业(1)
  • 【C++STL :vector类 (一) 】详解vector类的使用层vector实践:算法题
  • 机器学习项目结构目录的构建
  • 2022 年 CSP-J(中国计算机学会软件能力认证入门级)初赛真题与答案解析
  • 常州市建设工程网站衡水做网站
  • 北京58网站建设wordpress在线商城插件
  • 2025年计算机网络与信号处理国际会议(CNSP 2025)
  • 利用css的动画效果制作轮播图
  • docker镜像和
  • CSS通用优惠券样式
  • STM32F1学习——CAN外设(上)
  • Docker Desktop实战、问题记录
  • 《 Linux 点滴漫谈: 二 》全面掌握 Linux 系统安装与环境准备,迈出学习第一步
  • 从0死磕全栈之Next.js 中的 CSS 方案全解析:Global CSS、CSS Modules、Tailwind CSS 怎么选?
  • 先域名 还是先做网站蜘蛛搜索引擎