网站制作费多少/网站设计方案

网站制作费多少,网站设计方案,粗狂主义网站设计风格,wordpress 外链转内链作者:Lzzzz 在城市规划,应急救援,旅游规划等项目场景中,普遍存在通过二维地图定位区域或路线,三维场景展示布局细节的情况,那么,如何使三维场景与二维地图联动起来呢,一起来看看如何…

作者:Lzzzz

在城市规划,应急救援,旅游规划等项目场景中,普遍存在通过二维地图定位区域或路线,三维场景展示布局细节的情况,那么,如何使三维场景与二维地图联动起来呢,一起来看看如何实现吧!

最终效果

实现步骤

  • 监听二维地图的平移事件,并更新三维场景的相机位置。
  • 在三维场景移动时,获取相机位置,同时更新二维地图的中心点。

关键代码

定义信号变量

定义信号变量,保证地图联动效果和场景联动效果同一时间只能触发一个  防止循环调用。

        // 监听鼠标进入地图和 SuperMap3D 容器的区域,以确定当前激活的是哪个var activeMap = true;document.getElementById('map').addEventListener('pointerenter', () => {activeMap = true;});// 监听鼠标进入 SuperMap3D 容器的区域,以确定当前激活的是地图还是场景document.getElementById('Container').addEventListener('pointerenter', () => {activeMap = false;});

地图监听

// 监听地图中心变化,并更新 SuperMap3D 的相机位置map.getView().on('change:center', () => {if (activeMap) {const center = map.getView().getCenter();const cartographic = SuperMap3D.Cartographic.fromCartesian(viewer.camera.position);const height = cartographic.height; // 获取高度// 更新 MySuperMap3D 的相机位置const cartesian = SuperMap3D.Cartesian3.fromDegrees(center[0], center[1], height); // 设定一定高度viewer.camera.flyTo({destination: cartesian,duration: 0 // 立即移动});};});

场景监听

        // 监听相机位置变化事件,以更新 OpenLayers 地图的视点viewer.camera.changed.addEventListener(() => {if (activeMap) return;const camera = viewer.camera;// 从相机的世界坐标获取经纬度const cartographic = SuperMap3D.Cartographic.fromCartesian(camera.position);// 获取高度并打印以检查const latitude = SuperMap3D.Math.toDegrees(cartographic.latitude);const longitude = SuperMap3D.Math.toDegrees(cartographic.longitude);// 更新 OpenLayers 地图的视点map.getView().setCenter([longitude, latitude]);});

项目完整代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"><title>地图场景联动</title><link href="../../Build/SuperMap3D/Widgets/widgets.css" rel="stylesheet"><link href="./css/bootstrap.min.css" rel="stylesheet"><link href="./css/pretty.css" rel="stylesheet"><link href="./css/bootstrap-select.min.css" rel="stylesheet"><script src="./js/jquery.min.js"></script><script src="./js/bootstrap.min.js"></script><script src="./js/bootstrap-select.min.js"></script><script src="./js/config.js"></script><script type="text/javascript" src="../../Build/SuperMap3D/SuperMap3D.js"></script><script type="text/javascript" src="/examples/js/include-web.js"></script><script type="text/javascript" src="/examples/dist/openlayers/include-openlayers.js"></script>
</head>
<body>
<div id="Container"></div>
<div id='loadingbar' class="spinner"><div class="spinner-container container1"><div class="circle1"></div><div class="circle2"></div><div class="circle3"></div><div class="circle4"></div></div><div class="spinner-container container2"><div class="circle1"></div><div class="circle2"></div><div class="circle3"></div><div class="circle4"></div></div><div class="spinner-container container3"><div class="circle1"></div><div class="circle2"></div><div class="circle3"></div><div class="circle4"></div></div>
</div>
<div id="map" class="map" style="width:400px;height: 450px; position: absolute;top:580px">
</div><script>function onload(SuperMap3D) {var EngineType = getEngineType();var viewer = new SuperMap3D.Viewer('Container', {contextOptions: {contextType: Number(EngineType), // Webgl2:2 ; WebGPU:3}});viewer.scenePromise.then(function(scene){init(SuperMap3D, scene, viewer);});}function init(SuperMap3D, scene, viewer) {viewer.resolutionScale = window.devicePixelRatio;viewer.imageryLayers.addImageryProvider(new SuperMap3D.TiandituImageryProvider({credit : new SuperMap3D.Credit('天地图全球影像服务     数据来源:国家地理信息公共服务平台 & 四川省测绘地理信息局'),token: URL_CONFIG.TOKEN_TIANDITU}));var imageryLayers = viewer.imageryLayers;//初始化天地图全球中文注记服务,并添加至影像图层var labelImagery = new SuperMap3D.TiandituImageryProvider({mapStyle : SuperMap3D.TiandituMapsStyle.CIA_C, //天地图全球中文注记服务(经纬度投影)token: URL_CONFIG.TOKEN_TIANDITU});imageryLayers.addImageryProvider(labelImagery);var map = new ol.Map({target: 'map',view: new ol.View({center: [0,0],zoom: 1,projection: "EPSG:4326",multiWorld: true}),layers: [new ol.layer.Tile({source: new ol.source.Tianditu({key: "1d109683f4d84198e37a38c442d68311",projection: "EPSG:4326"})}), new ol.layer.Tile({source: new ol.source.Tianditu({key: "1d109683f4d84198e37a38c442d68311",isLabel: true,projection: "EPSG:4326"})})]});// 监听鼠标进入地图和 SuperMap3D 容器的区域,以确定当前激活的是哪个var activeMap = true;document.getElementById('map').addEventListener('pointerenter', () => {activeMap = true;});// 监听鼠标进入 SuperMap3D 容器的区域,以确定当前激活的是地图还是场景document.getElementById('Container').addEventListener('pointerenter', () => {activeMap = false;});// 监听地图中心变化,并更新 SuperMap3D 的相机位置map.getView().on('change:center', () => {if (activeMap) {const center = map.getView().getCenter();const cartographic = SuperMap3D.Cartographic.fromCartesian(viewer.camera.position);const height = cartographic.height; // 获取高度// 更新 MySuperMap3D 的相机位置const cartesian = SuperMap3D.Cartesian3.fromDegrees(center[0], center[1], height); // 设定一定高度viewer.camera.flyTo({destination: cartesian,duration: 0 // 立即移动});};});// 监听相机位置变化事件,以更新 OpenLayers 地图的视点viewer.camera.changed.addEventListener(() => {if (activeMap) return;const camera = viewer.camera;// 从相机的世界坐标获取经纬度const cartographic = SuperMap3D.Cartographic.fromCartesian(camera.position);// 获取高度并打印以检查const latitude = SuperMap3D.Math.toDegrees(cartographic.latitude);const longitude = SuperMap3D.Math.toDegrees(cartographic.longitude);// 更新 OpenLayers 地图的视点map.getView().setCenter([longitude, latitude]);});$('#loadingbar').remove();}if (typeof SuperMap3D !== 'undefined') {window.startupCalled = true;onload(SuperMap3D);}
</script>
</body>
</html>

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

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

相关文章

win本地vscode通过代理远程链接linux服务器

时间&#xff1a;2025.2.28 1. win本地下载nmap.exe nmap官网 https://nmap.org/或者 https://nmap.org/download#windows下载win版本并安装。 2. vscode插件Remote-SSH 插件下载Remote-SSH 3. 配置 按照图中顺序配置ssh 1.点击左侧工具栏的“小电视”图标 2.点击ssh的…

基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局

生态安全是指生态系统的健康和完整情况。生态安全的内涵可以归纳为&#xff1a;一&#xff0c;保持生态系统活力和内外部组分、结构的稳定与持续性&#xff1b;二&#xff0c;维持生态系统生态功能的完整性&#xff1b;三&#xff0c;面临外来不利因素时&#xff0c;生态系统具…

Java 入门 (超级详细)

一、什么是Java Java是一种高级编程语言&#xff0c;由Sun Microsystems公司于1995年推出。Java具有跨平台性、面向对象、健壮性、安全性、可移植性等特点&#xff0c;被广泛应用于企业级应用开发、移动应用开发、大数据处理、云计算等领域。Java程序可以在不同的操作系统上运…

神经网络 - 激活函数(Swish函数、GELU函数)

一、Swish 函数 Swish 函数是一种较新的激活函数&#xff0c;由 Ramachandran 等人在 2017 年提出&#xff0c;其数学表达式通常为 其中 σ(x) 是 Sigmoid 函数&#xff08;Logistic 函数&#xff09;。 如何理解 Swish 函数 自门控特性 Swish 函数可以看作是对输入 x 进行“…

Lua | 每日一练 (5)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 Lua | 每日一练 (5)题目参考答案浅拷贝深拷贝使用场景…

JavaEE--计算机是如何工作的

一、一台计算机的组成部分 1.CPU&#xff08;中央处理器&#xff09; 2.主板&#xff08;一个大插座&#xff09; 3.内存&#xff08;存储数据的主要模板&#xff09; 4.硬盘&#xff08;存储数据的主要模板&#xff09; 内存和硬盘对比&#xff1a; 内存硬盘读写速度快慢存…

电源测试系统有哪些可以利用AI工具的科技??

AI技术的发展对电源模块测试系统的影响是深远的&#xff0c;不仅协助系统提升了测试效率和精度&#xff0c;还推动了测试方法的创新和智能化。那么在电源测试系统中哪些模块可以利用AI工具实现自动化测试? 1. 自动化测试与效率提升 智能测试流程优化 AI算法可以自动优化测试…

通过多线程同时获取H264和H265码流

目录 一.RV1126 VI采集摄像头数据并同时编码H264、H265的大概流程​编辑​编辑 1.1初始化VI模块&#xff1a; 1.2H264、H265的VENC模块初始化&#xff1a; 1.3VI分别绑定H264的VENC层和H265的VENC层&#xff1a; ​​​​​​​1.4开启H264线程采集H264的VENC数据&#xff…

unity lua属性绑定刷新

我们现在有一个 角色属性类叫heroModel,内容如下,当heroModel中的等级发生变化的时候&#xff0c;我们需要刷新界面显示等级信息&#xff0c;通常我们是在收到等级升级成功的协议的时候&#xff0c;发送一个事件&#xff0c;UI界面接受到这个事件的时候&#xff0c;刷新一下等级…

vscode+vue前端开发环境配置

目录 一、安装Vue二、使用vue新建项目 一、安装Vue 在node.js安装好之后&#xff0c; npm config set registry https://registry.npmmirror.com# 安装vue相关工具&#xff0c;webpack用来项目构建、打包、资源整合等。 npm install webpack -g# 安装vue-cli脚手架 npm insta…

《白帽子讲 Web 安全》之文件操作安全

目录 引言 &#xff08;一&#xff09;文件上传与下载漏洞概述 1.文件上传的常见安全隐患 1.1前端校验的脆弱性与服务端脚本执行危机在文件上传流程中&#xff0c;部分开发者可能会在前端使用 JavaScript 代码对文件后缀名进行简单校验&#xff0c;试图以此阻止非法文件上传…

vector习题

完数和盈数 题目 完数VS盈数_牛客题霸_牛客网 一个数如果恰好等于它的各因子(该数本身除外)之和&#xff0c;如&#xff1a;6321。则称其为“完数”&#xff1b;若因子之和大于该数&#xff0c;则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。 输入描述&#xff…

cesium+vue3自定义HTML实体弹窗、加高德路网、防实体漂浮、让用户画圆、鹰眼

一、基础使用&#xff1a;Cesium.js基础使用&#xff08;vue&#xff09;-CSDN博客 1、基础路径 为 Cesium 库设置一个全局变量 CESIUM_BASE_URL&#xff0c;用于指定 Cesium 的资源文件&#xff08;如 WebGL shaders、纹理、字体等&#xff09;的 示例场景&#xff1a;假设你…

安全运营的“黄金4小时“:如何突破告警疲劳困局

在当今复杂多变的网络安全环境中&#xff0c;安全团队面临着前所未有的挑战。尤其是面对高级持续性威胁&#xff08;APT&#xff09;时&#xff0c;最初的“黄金4小时”成为决定成败的关键窗口。在这段时间内&#xff0c;快速而准确地响应可以极大地降低损失&#xff0c;然而&a…

[BUUCTF]web--wp(持续更新中)

ps:文章所引用知识点链接&#xff0c;如有侵权&#xff0c;请联系删除 [极客大挑战 2019]EasySQL 题目类型&#xff1a;简单SQL注入 发现是登录页面&#xff0c;用万能登录方法测试&#xff0c;两种语句均能解出flag [极客大挑战 2019]Havefun 题目类型&#xff1a;代码审计…

MySQL数据库的数据类型

1.设置MySQL服务器的默认储存引擎 set default_storage_engineMYISAM2. 数值类型 整数类型 TINYINT&#xff1a;1字节&#xff0c;范围&#xff1a;-128~127&#xff08;有符号&#xff09;&#xff0c;0~255&#xff08;无符号&#xff09;。适用于状态码、布尔值&#xff08…

探秘基带算法:从原理到5G时代的通信变革【四】Polar 编解码(二)

文章目录 2.3.3 极化编码巴氏参数与信道可靠性比特混合生成矩阵编码举例 2.3.4 极化译码最小单元译码串行抵消译码&#xff08;SC译码&#xff09;算法SCL译码算法 2.3.5 总结**Polar 码的优势****Polar 码的主要问题****Polar 码的应用前景** 2.3.6 **参考文档** 本博客为系列…

VirtualBox虚拟机转VM虚拟机

前言&#xff1a;部分靶机只适用于VirtualBox&#xff0c;VM打不开VirtualBox的文件&#xff0c;所以需要进行转换 前置条件&#xff1a;本机已经下载VM和VirtualBox 第一步&#xff1a;文件转换 找到VirtualBox.exe所在位置&#xff0c;启动cmd窗口 文件转换的命令&#xf…

DeepSeek API使用及私有化部署

DeepSeek 大模型概述 DeepSeek 是一款参数量高达 671B 的大语言模型&#xff0c;其模型参数文件规模庞大&#xff0c;即使是经过优化的版本&#xff0c;参数文件也有数十 GB。这种庞大的参数量赋予了 DeepSeek 强大的自然语言处理能力&#xff0c;使其能够处理复杂的语言任务&…

动态扩缩容引发的JVM堆内存震荡:从原理到实践的GC调优指南

目录 一、典型案例&#xff1a;系统发布后的GC雪崩事件 &#xff08;一&#xff09;故障现象 1. 刚刚启动时 GC 次数较多 2. 堆内存锯齿状波动 3. GC日志特征&#xff1a;Allocation Failure &#xff08;二&#xff09;问题定位 二、原理深度解析&#xff1a;JVM内存弹…