准备工作

VUE开发工具:Visual studio Code

倾斜摄影转换工具:CesiumLab—下载地址:http://www.cesiumlab.com/

三维显示:Cesium,api参考网站:https://cesium.com/learn/cesiumjs/ref-doc/Camera.html#setView

下图为CesiumLab提供的数据处理流程图,我们可以参考学习。

功能实现

首先我们安装VsCode,然后安装Vue,然后依次操作,新建文件夹kibacesium,打开VsCode—打开文件夹kibacesium—点击终端—在终端内输入命令npm install -g @vue/cli@4下载vue脚手架4;命令如下。

npm i vue -g
npm uninstall vue-cli -g 卸载旧版本
npm cache clean --force 清除缓存
npm install -g @vue/cli@4 安装最新版Vue脚手架 Vue CLI 4
npm install npm@latest 更新npm到最新版本,避免编译出问题

准备好vue后,创建vue项目,项目名称kibacesium。

vue create kibacesium

在弹出的选项里,选择Vue3,如下图。

Vue项目创建完成后,会在我们的创建的文件夹kibacesium下再创建一个文件夹kibacesium,所以我们需要使用VsCode重新打开文件夹,路径kibacesium/kibacesium。

然后执行命令:

npm run serve 

如下图,项目运行成功。

然后安装cesium的插件——vue-cli-plugin-cesium(只支持 VueCLI3.0+ 版本)。

参考网站:https://github.com/isboyjc/vue-cli-plugin-cesium

安装命令

vue add vue-cli-plugin-cesium

插件安装过程中会有三个询问,内容如下:


询问一

Please choose a version of 'cesium' from this list
请在列表中选择 cesium 的版本

在此选择想使用的 Cesium 版本

询问二

Whether to import styles globally. 
This operation will automatically import widgets.css in main.js
是否全局引入样式,该操作将自动在main.js引入widgets.css?

此项默认为 yes,该操作将自动在 main.js 引入 widgets.css,即全局引入 Cesium 的 css 样式

如果此项设置为 no,那么开发时我们要手动引入widgets.css样式文件,引入命令如下

import "cesium/Widgets/widgets.css"

询问三

Whether to add sample components to the project components directory
是否添加示例组件到项目components目录?

此选项默认为 yes,该操作会自动在 src/components 文件夹下生成 CesiumExample 文件夹,此文件夹中包含一些 Cesium 的使用示例供参考

如果此项设置为 no,则不生成示例文件

生成的示例中每个文件为一个模块,可直接模块引入至项目中查看。


cesium的插件安装完成后,代码结构如下图(注意,这里我并没有配置vue.config.js文件):

项目里增加了CesiumExample文件夹和一个实例vue文件。

运行前,我们再执行一次npm install,重新安装一下依赖,避免编译会报错。

然后修改helloWorld.Vue文件如下:

<template>
<div>
<No01InitVue></No01InitVue>
</div> </template> <script>
import No01InitVue from './CesiumExample/No01-init.vue'
export default {
name: 'HelloWorld',
components: {
No01InitVue
},
props: {
msg: String
}
}
</script> <!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>

然后执行命令:

npm run serve 

网站启动后,在浏览器输入http://localhost:8080/访问,页面如下:

PS:修改package.json里的代码验证规则, 增加"no-undef": "off",因为Cesium是被注入的对象,不添加这个规则就必须一直在Cesium对象相关代码上面加注释——// eslint-disable-next-line no-undef

更多地图功能

想要进行更多地图功能的开发,需要下载Cesium源码—下载地址:https://github.com/CesiumGS/cesium

下载后的代码,用VSCode打开,然后执行npm install安装依赖,然后执行 npm run build(注意,必须先执),

然后执行npm start。

启动后点击Sandcastle (built version),如下图:

可以在页面检索我们想要使用的功能示例,可以输入hello,widget等关键字,如下图。

加载Arcgis Server提供的默认矢量地图

修改No01-init.vue代码如下:

<template>
<div class="map-box">
<div id="cesiumContainer"></div>
</div>
</template> <script>
export default {
name: "",
mounted() {
// var viewer = new Cesium.CesiumWidget('cesiumContainer') // eslint-disable-next-line no-undef
//var viewer = new Cesium.Viewer("cesiumContainer"); // eslint-disable-next-line no-console
// console.log(viewer)
this.init();
}
,
methods: {
init() { let url = "http://192.168.1.1:6080/arcgis/rest/services/SampleWorldCities/MapServer";
// eslint-disable-next-line no-undef
let geogle = new Cesium.ArcGisMapServerImageryProvider({ url: url });
// eslint-disable-next-line no-undef
this.viewer = new Cesium.Viewer('cesiumContainer', {
baseLayerPicker: false, //是否显⽰图层选择控件
selectionIndicator: false,
// geocoder: false, //是否显⽰地名查找控件
// sceneModePicker: false, //是否显⽰投影⽅式控件
// navigationHelpButton: false, //是否显⽰帮助信息控件
// homeButton: false, //是否显⽰Home按钮
// fullscreenButton: false, //是否显⽰全屏按钮
// timeline:false, //时间轴控件
// animation:false, //动画控件
imageryProvider: geogle,
// terrainProvider:new Cesium.createWorldTerrain({
// requestVertexNormals:true,
// requestWaterMask:true
// }),
});
},
}
};
</script>
<style scoped>
.map-box {
width: 100%;
height: 100%;
} #cesiumContainer {
width: 100%;
height: 100%;
}
</style>

界面如下:

加载倾斜摄影

倾斜摄影切片

首先安装CesiumLab,然后打开CesiumLab,默认网址:http://localhost:9003/index.html

点击倾斜模型切片,然后在数据路径输入倾斜摄影文件夹。

如果输入正确的倾斜摄影文件夹,那么空间参考和零点坐标会自动读取出来。

然后在右侧存储类型中添加输出路径,并未clt文件命名。

然后点击提交处理。

处理完成后,系统会把切片的倾斜摄影发布成服务,点击分发服务——3dtiles服务,如下图所示:

显示倾斜摄影

在项目中增加文件——No02-3D.vue,使用我们刚刚发布服务地址,将三维图像展示处理,输入代码如下:

<template>
<div class="map-box">
<div id="cesiumContainer"></div>
</div>
</template> <script>
export default {
name: "",
mounted() {
this.show3DTile();
}
,
methods: {
show3DTile() {
var url = 'http://192.168.19.112:9003/model/tEn5ey1J3/tileset.json';
// eslint-disable-next-line no-unused-vars
const viewer = new Cesium.Viewer("cesiumContainer", {
terrainProvider: Cesium.createWorldTerrain(),
});
window.viewer = viewer;
// eslint-disable-next-line no-unused-vars
let tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
url: url,
// modelMatrix: Cesium.Matrix4.fromArray([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),
baseScreenSpaceError: 1024,
//【重要】数值加大,能让最终成像变模糊
skipScreenSpaceErrorFactor: 16,
skipLevels: 1,
immediatelyLoadDesiredLevelOfDetail: false,
loadSiblings: false,
cullWithChildrenBounds: true,
skipLevelOfDetail: true, //开启跳级加载
//这个参数默认是false,同等条件下,叶子节点会优先加载。但是Cesium的tile加载优先级有很多考虑条件,
//这个只是其中之一,如果skipLevelOfDetail=false,这个参数几乎无意义。所以要配合skipLevelOfDetail=true来使用,
//此时设置preferLeaves=true。这样我们就能最快的看见符合当前视觉精度的块,对于提升大数据以及网络环境不好的前提下有一点点改善意义。
preferLeaves: true,
//【重要】内存建议显存大小的50%左右,内存分配变小有利于倾斜摄影数据回收,提升性能体验
maximumMemoryUsage: 1024
//控制切片视角显示的数量,可调整性能
// maximumScreenSpaceError: 2,//最大的屏幕空间误差
// maximumNumberOfLoadedTiles: 100000, //最大加载瓦片个数
}));
window.viewer.flyTo(tileset)
viewer.camera.setView({
destination: Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 15000.0)
});
}
}
};
</script>
<style scoped>
.map-box {
width: 100%;
height: 100%;
} #cesiumContainer {
width: 100%;
height: 100%;
}
</style>

页面效果如下:

 

----------------------------------------------------------------------------------------------------

到此,使用开源Cesium+Vue实现倾斜摄影三维展示已经介绍完了。

代码已经传到Github上了,欢迎大家下载。

Github地址:https://github.com/kiba518/KibaCesium

----------------------------------------------------------------------------------------------------

注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!

https://www.cnblogs.com/kiba/p/16455532.html

使用开源Cesium+Vue实现倾斜摄影三维展示的更多相关文章

  1. 太原面经分享:如何在vue面试环节,展示你晋级阿里P6+的技术功底?

    前言 一年一度紧张刺激的高考开始了,与此同时,我也没闲着,奔走在各大公司的前端面试环节,不断积累着经验,一路升级打怪. 最近两年,太原作为一个准二线城市,各大互联网公司的技术栈也在升级换代,假如你在太 ...

  2. 使用webgl(three.js)搭建3D智慧园区、3D大屏,3D楼宇,智慧灯杆三维展示,3D灯杆,web版3D,bim管理系统——第六课

    前言: 今年是建国70周年,爱国热情异常的高涨,为自己身在如此安全.蓬勃发展的国家深感自豪. 我们公司楼下为庆祝国庆,拉了这样的标语,每个人做好一件事,就组成了我们强大的祖国. 看到这句话,深有感触, ...

  3. VUE Base64编码图片展示与转换图片

    图片的 base64 编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址,使用 base64 传输图片文件可以节省一个 http 请求,图片的 base64 编码可以算是前端优化的一 ...

  4. vue轮播,展示pdf

    vue轮播,展示pdf 根据左侧图片格式,右侧展示相应的pdf文件与图片.(vue中不支持pdf格式,pdf文件要放在static文件里):代码如下: <template> <!-- ...

  5. 关于个人开源项目(vue app)的一些总结

    关于个人开源项目(vue app)的一些总结 项目地址 https://github.com/BYChoo/record 项目简介 此项目名叫:Record.是以Vue全家桶(vue,vue-rout ...

  6. [ABP开源项目]--vue+vuex+vue-router+EF的权限管理系统

    好久没写文字了,当然大家也不期待嘛,反正看代码就行了. 演示网站 首先说下这个项目吧. 如标题一样是基于VUE+.NET开发的框架,也是群友一直吼吼吼要一个vue版本的ABP框架. 我们先来看看首页吧 ...

  7. Cesium Vue开发环境搭建

    最近被问到如何在 vuejs 中集成 cesium,首先想到的官网应该有教程.官网有专门讲 Cesium and Webpack(有坑),按照官网的说明,动手建了一个Demo,在这记录下踩坑过程. 一 ...

  8. cesium 加载倾斜摄影模型(这里有一坑)

    代码如下: // Construct the default list of terrain sources. var terrainModels = Cesium.createDefaultTerr ...

  9. Supermap/Cesium 开发心得----获取三维视角的四至范围

    网上目前有两种获取当前Camera的四至范围的方法 方法一    这种方法是最通用的,即使在哥伦布视角(2.5D下依旧能准确获取值) function getCurrentExtent() { // ...

随机推荐

  1. 项目实战:rsync+sersync实现数据实时同步

    一.组网介绍 本次实验使用两台主机: qll251 角色:Rsync server + Sersync server qll252 角色: Rsync client 本次实验采用CentOS7.7系统 ...

  2. OracleRAC ACFS安装与卸载

    目录 ACFS安装与卸载: 一.在RAC上手动安装ACFS/ADVM 模块的步骤如下: 1.验证内存中是否存在 ACFS/ADVM 模块: 2.用root用户重新安装ACFS/ADVM 模块: 3.A ...

  3. zabbix脚本获取web status code,异常告警

    python代码,需要安装requests库 1 #!/usr/bin/env python 2 #-*-coding:utf-8-*- 3 import requests,os,sys 4 url ...

  4. netty系列之:使用Jboss Marshalling来序列化java对象

    目录 简介 添加JBoss Marshalling依赖 JBoss Marshalling的使用 总结 简介 在JAVA程序中经常会用到序列化的场景,除了JDK自身提供的Serializable之外, ...

  5. Vagrant之CentOS

    Vagrant之CentOS Vagrant官网 https://www.vagrantup.com https://app.vagrantup.com/boxes/search https://ap ...

  6. 2020级cpp机考模拟题A卷-#题解1

    为了各位朋友的身心健康(不是),我们按照题目难度顺序来写题解. 第一次写题解,希望多点包容和鼓励(恬不知耻 1:谁先输出-4 题意: 输入3个整数,按从大到小的顺序输出,每两个数字间加一个空格. 题解 ...

  7. 测试平台系列(95) 前置条件支持简单的python脚本

    大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持. 欢迎关注我的公众号米洛的测开日记,获取最新文章教程! 回顾 上一节我们构思了一下怎么去支 ...

  8. zigbee技术数传电台在石油探井状态监测系统

    石油探井分布分散,数量众多,出现异常现象需及时处理.人工巡视耗时长.时效性差:有线传输存在布线繁琐.成本高.现场无移动网络覆盖等诸多缺点. 现需要一种支持大量接入.覆盖范围广.数据传输高效且有数据中心 ...

  9. SpringBoot整合RabbitMQ实战附加死信交换机

    前言 使用springboot,实现以下功能,有两个队列1.2,往里面发送消息,如果处理失败发生异常,可以重试3次,重试3次均失败,那么就将消息发送到死信队列进行统一处理,例如记录数据库.报警等 环境 ...

  10. Jmeter(五十四) - 从入门到精通高级篇 - 如何在linux系统下运行jmeter脚本 - 上篇(详解教程)

    1.简介 上一篇宏哥已经介绍了如何在Linux系统中安装Jmeter,想必各位小伙伴都已经在Linux服务器或者虚拟机上已经实践并且都已经成功安装好了,那么今天宏哥就来介绍一下如何在Linux系统下运 ...