在vue上使用cesium开发三维地图-点位弹框
以前端webGIS开发工程师的角度,讲述关于GIS的知识,带大家快速了解下webGIS的知识。
![在vue上使用cesium开发三维地图-点位弹框](/content/images/size/w2000/2024/11/bf94a125-fa61-4243-b1ea-f4c68a4c0a49.png)
推荐使用NSDT 3DConvert进行3D模型格式转换,支持glb、obj、stp、fbx、ifc等多种3D模型格式之间进行互相转换,在转换过程中,能够很好的保留模型原有的颜色、材质等信息。
点位弹框
点击事件
点位弹框是点击之后才出来了,所以我们现在要做的第一件事,就是搞定cesium的点击事件
ScreenSpaceEventHandler
![](https://www.mvrlink.com/content/images/2024/11/image-92.png)
ScreenSpaceEventType
![](https://www.mvrlink.com/content/images/2024/11/image-93.png)
![](https://www.mvrlink.com/content/images/2024/11/image-94.png)
经纬度获取
弹窗的实现效果是点击某个存在的点模型后在点的右侧打开,原理是通过获取点击点的屏幕坐标
,将坐标的y
和x
分别赋值给div
的top
和left
属性。我们现在要先拿到屏幕坐标。
![](https://www.mvrlink.com/content/images/2024/11/image-95.png)
创建弹框
创建弹窗div
创建弹框,两种方式,大家按照各自的实际情况来选择:
- 可以直接在html中创建一个
<div>我是弹框</div>
的标签,然后弹框的内容通过js往里面添加
- 也可以直接通过js的方法
document.createElement('div');
的方法,在js中创建html标签
,进而构造出弹框来
因为我们是vue开发
,组件思维
更适合我们的这个场景,我们就选用第一种方式,在html里面创建一个<div>我是弹框</div>
标签,弹框里面的内容可能根据业务不同,展示的内容页不同,这个内容我们就通过组件的方式引进来,而且这种方式,也避免了在同一个.vue文件中,写大量的代码,避免了后期查看代码的复杂性。
![](https://www.mvrlink.com/content/images/2024/11/image-96.png)
如果弹框里面还要加其他的东西,我还可以再接着引入其他的组件,丰富弹框的内容。
html
部分需要加上弹框
![](https://www.mvrlink.com/content/images/2024/11/image-97.png)
css
部分需要设置样式
![](https://www.mvrlink.com/content/images/2024/11/image-98.png)
js
部分
![](https://www.mvrlink.com/content/images/2024/11/image-99.png)
![](https://www.mvrlink.com/content/images/2024/11/image-100.png)
![](https://www.mvrlink.com/content/images/2024/11/image-101.png)
现在弹框创建出来了。
绑定到点击事件
在左键点击监听事件
中调用,在点击事件中通过pick
来判断是否选中点对象
。
点击监听事件的基础上进行了扩展,通过pick判断是否选中对象,选中
后打开弹窗
,展示传入的信息。
使弹窗跟随点移动
不论缩放地图或者移动点,都会造成弹窗的移动的需求,那么就要通过监听来完成弹窗移动的效果。
预渲染preRender
![](https://www.mvrlink.com/content/images/2024/11/image-103.png)
scene
,我的理解,它就是渲染之后的整个canvas
对象,地图一系列的东西都在这个canvas
中。
点转到地球背后弹窗隐藏
因为我当前遇到的业务,基本都是在具体某某某地区地图上,不会让你把地图给缩放成一个地球,然后移动地球干嘛干嘛。不过代码中也实现了,也有注释。
效果如下。
![](https://www.mvrlink.com/content/images/2024/11/image-104.png)
在vue上使用cesium开发三维地图 - 索引
在vue上使用cesium开发三维地图-坐标系、webGIS简介