自学内容网 自学内容网

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));
}


原文地址:https://blog.csdn.net/wei80231996/article/details/143844669

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!