准备工作

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

到此这篇关于使用开源Cesium Vue实现倾斜摄影三维展示的文章就介绍到这了,更多相关Cesium Vue倾斜摄影内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

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

  1. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  2. vue自定义加载指令v-loading占位图指令v-showimg

    这篇文章主要为大家介绍了vue自定义加载指令和v-loading占位图指令v-showimg的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  3. vue使用动画实现滚动表格效果

    这篇文章主要为大家详细介绍了vue使用动画实现滚动表格效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  4. 关于Vue 监控数组的问题

    这篇文章主要介绍了Vue 监控数组的示例,主要包括Vue 是如何追踪数据发生变化,Vue 如何更新数组以及为什么有些数组的数据变更不能被 Vue 监测到,对vue监控数组知识是面试比较常见的问题,感兴趣的朋友一起看看吧

  5. Vue子组件props从父组件接收数据并存入data

    这篇文章主要介绍了Vue子组件props从父组件接收数据并存入data的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. Vue h函数的使用详解

    本文主要介绍了Vue h函数的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  7. VUE响应式原理的实现详解

    这篇文章主要为大家详细介绍了VUE响应式原理的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

  8. vue+Element ui实现照片墙效果

    这篇文章主要为大家详细介绍了vue+Element ui实现照片墙效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. vue+elemet实现表格手动合并行列

    这篇文章主要为大家详细介绍了vue+elemet实现表格手动合并行列,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. iview+vue实现导入EXCEL预览功能

    这篇文章主要为大家详细介绍了iview+vue实现导入EXCEL预览功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部