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

vue2中引入cesium全步骤

1.npm 下载cesium建议指定版本下载,最新版本有兼容性问题

npm install cesium@1.95.0

2.在node_models中找到cesium将此文件下的Cesium文件复制出来放在项目的静态资源public中或者static中,获取去github上去下载zip包放在本地也可以

3.在index.html中引入js和css

<script src="./static/Cesium/Cesium.js"></script>
  <link rel="stylesheet" href="./static/Cesium/Widgets/widgets.css">

4.现在就可以在页面中打压cesium对象了如果有输出说明引入成功可以直接使用

<div id="my-map"></div>
 <div id="myModal" class="modal">
    <div id="modal-body">
    <div id="modelContent">
   .....自定义样式
<div>
</div>
</div>
mounted(){
   //设置token
            Cesium.Ion.defaultAccessToken = "cesium的token自己去官网申请";
            var lagObj = [6378137.0, 6378137.0, 6356752.3142451793];//定义地球形状
            Cesium.Ellipsoid.WGS84 = Object.freeze(new Cesium.Ellipsoid(lagObj[0], lagObj[1], lagObj[2]));
            const viewer = new Cesium.Viewer('my-map', {
                homeButton: false,
                sceneModePicker: false,
                baseLayerPicker: false, // 影像切换
                animation: false, // 是否显示动画控件
                infoBox: false, // 是否显示点击要素之后显示的信息
                selectionIndicator: false, // 要素选中框
                geocoder: false, // 是否显示地名查找控件
                timeline: false, // 是否显示时间线控件
                fullscreenButton: false,
                shouldAnimate: false,
                scene3DOnly: true, // 每个几何实例仅以3D渲染以节省GPU内存
                navigationHelpButton: false, // 是否显示帮助信息控件
                imageryProvider: new Cesium.UrlTemplateImageryProvider({
                    url: '',//地图背景链接
                    maximumLevel: 17,//瓦片图最大层级
                })
            });
            // 去掉logo
            viewer.cesiumWidget.creditContainer.style.display = "none";
            // 加载分割模型3dtitles
            const tileset = new Cesium.Cesium3DTileset({
            // 3DTiles文件夹的路径
                url: "/xxxxx/tileset.json",
            });
 // 创建一个Entity对象,表示标注点(多个标注点继续写就行会自动增加到 viewer.entities对象)
            viewer.entities.add({
                // 设置实体的位置 标注点显示在3D Tiles模型上方(8.0)
                position: Cesium.Cartesian3.fromDegrees(108.22690195918085, 36.01883508577498, 8.0), // 纬度, 经度
                // 标记图片
                billboard: {
                    image: '/static/model/address.png', // 图片的URL
                    scale: 0.1//图片缩放大小
                },
                description: '这里是北京市人民大会堂' // 鼠标悬浮时显示的描述
            });
// 创建一个屏幕空间事件处理器(增加标注点的点击弹框自定义样式)
            var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
            // 用于存储点击位置
            var lastClickPosition = null;
            var lon = null;
            var lat = null;
            handler.setInputAction(function (click) {
                const pickedObject = viewer.scene.pick(click.position);
                const { ellipsoid } = viewer.scene.globe;
                console.log(viewer.entities, 'viewer.entities++++')
                const cartesian = viewer.camera.pickEllipsoid(click.position, ellipsoid);
                const cartographic = ellipsoid.cartesianToCartographic(cartesian);
                if (Cesium.defined(pickedObject)) {
                    lon = Cesium.Math.toDegrees(cartographic.longitude);
                    lat = Cesium.Math.toDegrees(cartographic.latitude);
                    lastClickPosition = click.position;
                    // 显示模态框
                    showPopup(lastClickPosition);
                }
            }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
            var modal = document.getElementById('myModal');
            var contentDiv = document.getElementById('modelContent');
            function showPopup(position) {
                // 清空模态框内容
                document.getElementById('modal-body').innerHTML = '';
                // 复制内容到模态框
                var cloneContent = contentDiv.cloneNode(true);
                document.getElementById('modal-body').appendChild(cloneContent);
                modal.style.display = "block";
                // 设置模态框的位置
                updatePopupPosition(position);
                // 添加关闭按钮事件监听
                document.querySelector('.close').addEventListener('click', function () {
                    modal.style.display = "none";
                });
            }
            // 更新弹窗位置
            function updatePopupPosition(position) {
                if (!position || !lastClickPosition) return;
                // 获取当前视图的屏幕边界
                var clientPosition = viewer.canvas.getBoundingClientRect();
                // 计算点击位置相对于浏览器窗口的位置
                var x = position.x - clientPosition.left;
                var y = position.y - clientPosition.top;
                // 设置模态框的位置
                modal.style.left = x + 'px';
                modal.style.top = y + 'px';
            }
            // 监听视图变化事件
            viewer.scene.postRender.addEventListener(function () {
                if (lastClickPosition) {
                    const Cartesian3Result = Cesium.Cartesian3.fromDegrees(lon, lat);
                    const Cartesian2Result222 = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, Cartesian3Result,);
                    updatePopupPosition(Cartesian2Result222);
                }
            });
            window.addEventListener('unload', function () {
                handler.destroy();
                viewer.destroy();
            });
  // 将3DTiles集添加到Cesium Viewer
            viewer.scene.primitives.add(tileset);
            // // 控制视角到模型位置  自适应大小添加new Cesium.HeadingPitchRange(0.0, -0.5, 0) 到viewer.zoomTo中
            viewer.zoomTo(tileset, new Cesium.HeadingPitchRange(0.0, -0.5, 0));
}


http://www.kler.cn/a/404622.html

相关文章:

  • 初始ArkUI
  • Electron开发构建工具electron-vite(alex8088)添加VueDevTools(VitePlugin)
  • conda 创建环境失败故障解决记录
  • 解决vm虚拟机中ctrl键粘滞问题(一直处于按下状态)
  • 【PDFBox】-初识
  • 自动语音识别(ASR)与文本转语音(TTS)技术的应用与发展
  • MongoDB调优利器:掌握性能分析工具mongostat
  • 字节跳动青训营刷题笔记14
  • Spark 分布式计算中网络传输和序列化的关系(二)
  • leetcode - 2516. Take K of Each Character From Left and Right
  • 2024年亚太C题第二版本二问题1求解过程+代码运行以及问题2-4超详细思路分析
  • 第三百三十节 Java网络教程 - Java网络UDP服务器
  • uni-app快速入门(十)--常用内置组件(下)
  • 查看docker日志 journalctl -u docker.service
  • Modern Effective C++ Item 11:优先考虑使用deleted函数而非使用未定义的私有声明
  • Webserver回顾
  • 【AI知识】两类最主流AI应用(文生图、ChatGPT)中的目标函数
  • React第五节 组件三大属性之 props 用法详解
  • ts: 定义一个对象接收后端返回对象数据,但是报错了有红色的红线为什么
  • 安全测试必学神器 --BurpSuite 安装及使用实操
  • Go 工具链详解(八):go telemetry
  • Wallpaper壁纸制作学习记录05
  • 【JavaSE 网络编程和日期与时间知识总结】
  • Java Web应用中的跨站请求伪造(CSRF)防御策略
  • 关于一次开源java spring快速开发平台项目RuoYi部署的记录
  • hj 212 协议解包php解包,