vue3.2+ts+cesium制作3DGIS效果的大屏(下)

本文详细介绍了如何使用Vue3.2、TypeScript和Cesium创建3D地理信息系统大屏展示,包括定位、视角控制、提示信息(tip)的动态跟随以及接口调用来加载数据。同时,文中提到了如何处理右键、左键事件,避免不必要的放大效果,并封装 cesium 的 3D GIS 效果为组件,以便于在大屏项目中复用。最后,讨论了未来可能涉及的模型编辑器和更多GIS效果的开发。
摘要由CSDN通过智能技术生成

cesium用于三维可视化,在城市场景 工业场景 巡航等场景用处多,接下来我们初始地址是图五的效果,我们镜头跟随视角函数flyto来到山西阳泉,定位其中的一个建筑并正射这个建筑,给这个建筑打上tip控制相机视角高度为2000,我们从图一的效果执行代码

viewer.camera.flyTo( {
  destination: Cesium.Cartesian3.fromDegrees(113.572642,37.86694,2000),//山西阳泉
  orientation: {
    heading: Cesium.Math.toRadians(0),
    pitch: Cesium.Math.toRadians(-90),
    roll: Cesium.Math.toRadians(0 ),
    range:10000
  }});

然后我们定位到了我们所需要的位置,然后我们设置tip,并给tip设置开启关闭气泡弹窗功能(tip的箭头太丑了没找到合适的),此后视角无论如何转动 弹窗都跟随你的镜头

我们写一个tip实体类  里面inage属性可以放base64  我没有图片就用的自带的蓝色图标,总体代码如下  只需实列化一个对象,生产tip调用addEntity函数,参数传入弹窗所需要的数据

export default class DragEntity{
    constructor(val,Cesium){
        this.viewer = val.viewer
        this.Cesium = Cesium
    }
    addEntity(value){
        let pinBuilder = new this.Cesium.PinBuilder();
        let poin = this.viewer.entities.add({
            id:value.id,
            name: value.name,
            position: this.Cesium.Cartesian3.fromDegrees(parseFloat(value.position.x), parseFloat(value.position.y)),
            billboard: {
                image:  pinBuilder.fromColor(this.Cesium.Color.ROYALBLUE, 48).toDataURL(),
                verticalOrigin: this.Cesium.VerticalOrigin.BOTTOM,
            },
            monitoItems:{
                data:value
            },
        });
        return poin
    }

}

然后简单封装一个fetch对象函数作为我们接口的调用,大屏展示接口暂时只有get

export default function (url:string,method:string = "get",data?:Array<any>|Object) {
    let headers:{ Authorization: string; "tenant-id": string }={
        "Authorization": opener["filter"]["Authorization"],
        "tenant-id":  opener["filter"]["tenant-id"]+""
    }
    return fetch(url, {headers,method}).then(
        (response:Response)=>{
        if(response.status === 200){
            return response.json();
        }else{
            return {}
        }
    },(error)=>{
        return {}
    })
}

在setup后面我们定义一些数据和一些响应式数据

let viewer:any=null
let map:any=null
let citys:Array<number>=[]
let views:Array<any>=[]
let twinkles:Array<any>=[]
interface ttcObject { value?: boolean }
interface msgObject { value?: string|number }
interface videoP extends Object {switch: boolean; readonly type: string}
const alarmRankDataMax:number=232;
const devs: Array<any> = react
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值