vue cesium加载点与定位到指定位置

本文介绍了如何使用Vuecesium库在Web应用中实现地图上指定位置的导航以及动态加载并显示点位信息,包括坐标转换和自定义标注样式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

vue cesium定位到指定位置

window.viewer.camera.flyTo({
            destination: Cesium.Cartesian3.fromDegrees(point.longDeg, point.latDeg, 6500000), orientation: {
                heading: 6.2079384332084935, roll: 0.00031509431759868534, pitch: -1.535
            }, duration: 3
        })

vue cesium加载点

// 加载点位
function addPoints(pointArr, point, show) {
    let shenhaiPoint = ''
    if (boatLayer.length != 0) {
        boatLayer.forEach(item => {
            window.viewer.entities.remove(item)
        })
    }
    pointArr.forEach((item, i) => {
        boatLayer[i] = window.viewer.entities.add({
            id: item.id, name: item.name, position: Cesium.Cartesian3.fromDegrees(item.jd, item.wd, 0), billboard: {
                // 图像地址,URI或Canvas的属性
                image: item.img || '/static/img/earth/boat_point.png', // image: item.img,
                // 设置颜色和透明度
                // color: Cesium.Color.WHITE.withAlpha(0.8),
                // 高度(以像素为单位)
                height: 20, // 宽度(以像素为单位)
                width: 15, // 逆时针旋转,表示Billboard绕其原点旋转的角度(弧度)
                rotation: -((item.hdg > 360 ? item.cog : item.hdg) * Math.PI / 180), // rotation:-Cesium.Math.PI_OVER_FOUR *2,
                // 大小是否以米为单位
                sizeInMeters: false, // 相对于坐标的垂直位置
                // verticalOrigin: Cesium.VerticalOrigin.CENTER,
                // 相对于坐标的水平位置
                // horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
                // 该属性指定标签在屏幕空间中距此标签原点的像素偏移量
                // pixelOffset: new Cesium.Cartesian2(-7, 0),
                scaleByDistance: new Cesium.NearFarScalar(2000, 1, 100000000, 0.1), // 显示在距相机的距离处的属性,多少区间内是可以显示的
                distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 100000000), show: true,  // 是否显示
                alignedAxis: Cesium.Cartesian3.ZERO, // default
                heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
            }, label: {
                text: item.name,
                show:true,
                font: "10px Source Han Sans CN", //字体样式
                fillColor: Cesium.Color.WHITE, //字体颜色
                backgroundColor: Cesium.Color.fromCssColorString('red').withAlpha(0), //背景颜色
                showBackground: true, //是否显示背景颜色
                style: Cesium.LabelStyle.FILL_AND_OUTLINE, //label样式
                outlineWidth: 3, // verticalOrigin: Cesium.VerticalOrigin.CENTER, //垂直位置
                // horizontalOrigin: Cesium.HorizontalOrigin.LEFT, //水平位置
                pixelOffset: new Cesium.Cartesian2(0, -15) //偏移
            }, clampToGround: true
        });
    })    
}
<think>好的,我现在需要帮助用户在Vue项目中使用Cesium加载和显示Gltf模型。根据用户提供的引用资料,我需要先理清步骤,并解决可能遇到的问题。 首先,用户提到需要将Cesium集成到Vue项目中。引用1和引用3都提到了这一点,尤其是引用3提到需要将模型文件放在Public目录下。这可能涉及到Vue的静态资源处理,需要确认路径是否正确。 接下来是加载Gltf模型的具体代码。引用2给出了一个示例函数,使用Cesium.ModelInstanceCollection来加载模型,并指定了url路径。但用户可能需要注意模型文件的路径是否正确,比如在Vue中静态文件通常放在public目录下,所以url应该指向该位置,如引用3所述。 另外,用户可能会遇到模型不显示的问题,如引用4提到的报错、显示太黑或中心点不对。这可能涉及到模型材质问题、光照设置或定位错误。需要检查模型是否使用了正确的坐标系,以及是否添加了适当的光源。 还有,Cesium的初始化步骤是否正确?比如是否正确创建了viewer实例,并配置了所需的插件,如Cesium的Widgets样式和脚本。引用1和引用2都提到了需要引入Cesium的相关资源,可能需要检查HTML文件的配置。 最后,测试环节也很重要。用户可能需要调整模型的位置、缩放或方向,确保模型正确加载到场景中。同时,处理可能出现的控制台错误,如网络请求失败或Cesium的警告信息。 总结步骤应该是:安装Cesium库,配置Vue项目,初始化Cesium Viewer,加载模型,处理常见问题。需要一步步引导用户完成,并提醒可能遇到的坑,如路径错误、模型格式问题等。</think>以下是在 Vue 项目中集成 Cesium 并加载 GLTF/GLB 模型的完整步骤: ### 一、环境配置 1. **安装 Cesium 依赖** ```bash npm install cesium --save npm install @cesium/engine @cesium/widgets --save ``` 2. **配置 vue.config.js** ```javascript const path = require('path') const CopyWebpackPlugin = require('copy-webpack-plugin') module.exports = { configureWebpack: { plugins: [ new CopyWebpackPlugin({ patterns: [ { from: 'node_modules/cesium/Build/Cesium/Workers', to: 'Workers' }, { from: 'node_modules/cesium/Build/Cesium/ThirdParty', to: 'ThirdParty' }, { from: 'node_modules/cesium/Build/Cesium/Assets', to: 'Assets' }, { from: 'node_modules/cesium/Build/Cesium/Widgets', to: 'Widgets' } ] }) ] } } ``` ### 二、初始化 Cesium Viewer ```vue <template> <div id="cesium-container"></div> </template> <script> import * as Cesium from 'cesium'; import 'cesium/Build/Cesium/Widgets/widgets.css'; export default { mounted() { this.initViewer(); }, methods: { initViewer() { Cesium.Ion.defaultAccessToken = 'YOUR_ION_TOKEN'; window.viewer = new Cesium.Viewer('cesium-container', { terrainProvider: Cesium.createWorldTerrain(), animation: false, baseLayerPicker: false }); } } } </script> ``` ### 三、加载 GLTF 模型 ```javascript function loadGltfModel(position) { const modelEntity = viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(...position), model: { uri: '/static/models/ship.gltf', minimumPixelSize: 128, maximumScale: 20000 } }); viewer.flyTo(modelEntity); } ``` ### 四、常见问题处理 1. **模型路径问题** - 必须将模型文件放置在 `public/static/models/` 目录下[^3] - 使用绝对路径 `/static/models/xxx.gltf` 2. **模型显示异常** ```javascript // 调整材质光照 modelEntity.model.silhouetteColor = Cesium.Color.WHITE; modelEntity.model.silhouetteSize = 0; modelEntity.model.lightColor = new Cesium.Color(1.0, 1.0, 1.0, 1.0); ``` 3. **坐标定位校准** ```javascript // 添加坐标偏移调整 const offsetPosition = Cesium.Cartesian3.fromElements( originalPosition.x + 50, originalPosition.y - 30, originalPosition.z + 10 ); ``` ### 五、完整组件示例 ```vue <template> <div> <div id="cesium-container"></div> <button @click="loadShipModel">加载船舶模型</button> </div> </template> <script> export default { methods: { loadShipModel() { const longitude = 121.5; // 上海经度 const latitude = 31.2; // 上海纬度 const height = 500; // 海拔高度 const position = Cesium.Cartesian3.fromDegrees( longitude, latitude, height ); this.addModel('/static/models/ship.gltf', position); }, addModel(uri, position) { viewer.entities.removeAll(); const entity = viewer.entities.add({ position: position, model: { uri: uri, scale: 1.0, runAnimations: true } }); viewer.flyTo(entity); } } } </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值