使用开源Cesium+Vue实现倾斜摄影三维展示功能

下面是使用开源Cesium+Vue实现倾斜摄影三维展示功能的完整攻略。

1. 开源Cesium+Vue简介

1.1 Cesium

Cesium 是一个可视化地球数据的 JavaScript 库,拥挤者来自美国宾夕法尼亚州的开源项目。

Cesium支持多样化地球数据的可视化,包括卫星、建筑、城市、气象等等,特别是对于三维地球数据的处理。

1.2 Vue

Vue 是一套用于构建用户界面的渐进式 JavaScript 框架,具有易上手、易扩展等特点。

Vue处理模板、组件两个核心,则可极大地简化HTML的编写,并能够为你提供更一致的结构。

1.3 结合使用

Cesium和Vue是可以结合在一起使用的,通过构建自己的Vue前端页面,并且通过调用Cesium的API来实现三维地图的部署和展示。

2. 构建Vue工程

首先我们需要构建 Vue 工程,这里假定您已经了解Vue的基本使用方法,并拥有Vue CLI的开发环境。

2.1 安装Vue CLI

使用npm或yarn安装Vue CLI:

# npm
npm install -g @vue/cli

# yarn
yarn global add @vue/cli

2.2 创建Vue工程

使用Vue CLI创建一个Vue工程:

vue create my-project

2.3 安装依赖

切换至工程目录下,安装以下依赖:

npm install cesium --save-dev    # 安装 Cesium 库
npm install vue-cesium --save-dev  # 安装 Vue-Cesium 模块

2.4 配置Cesium

安装依赖之后,需要在src目录下创建一个CesiumWrapper.vue文件,在其中完成对Cesium的初始化和配置。

下面是一个简单的配置文件:

<template>
  <div class="cesium-container" ref="cesiumViewer" />
</template>

<script>
import Cesium from "cesium/Cesium";
import "cesium/Widgets/widgets.css";

export default {
  data() {
    return {
      viewer: null
    };
  },
  mounted() {
    this.viewer = new Cesium.Viewer(this.$refs.cesiumViewer, {
      contextOptions: {
        webgl: {
          alpha: true
        }
      }
    });
  },
  methods: {}
};
</script>

<style scoped>
.cesium-container {
  height: 100%;
  width: 100%;
}
</style>

3. 添加倾斜摄影数据

Cesium支持导入倾斜摄影数据,这里我们仅介绍一种数据格式 LAS。

3.1 概述

LAS(Lidar data Exchange Format)是一种公认的激光雷达点云数据格式。LAS数据格式由美国环境系统研究院(USGS)和美国公司Environmental Systems Research Institute(ESRI)共同发明,它可用于存储三维点云数据、数 据相关性信息以及RGB颜色数据。

3.2 生成倾斜摄影数据

我们需要调用第三方软件来生成倾斜摄影数据,常见的软件有Pix4D、Agisoft,这里我们用Agisoft来进行操作。

我们可以采用Agisoft PhotoScan软件创建倾斜摄影数据:将无人机采集的图像导入软件中,生成点云数据和DEM(Digital Elevation Model)文件,之后对点云数据进行点云分类,提取建筑物点云信息,最终导出LAS点云文件。

3.3 添加倾斜摄影数据到Cesium

导出LAS点云文件后,将数据放置在本地服务器上,可以使用以下代码添加点云数据:

Cesium.Ion.defaultAccessToken = "your-access-token";

const viewer = new Cesium.Viewer("cesiumContainer", {
  terrainProvider: Cesium.createWorldTerrain()
});

// Load LAS data
viewer.scene.primitives.add(Cesium.Cesium3DTileset.fromUrl("http://localhost:8080/data/las_file.las"));

4. 使用示例

下面是两个使用开源Cesium+Vue实现倾斜摄影三维展示功能示例:

示例一

<template>
  <div>
    <cesium-wrapper />
  </div>
</template>

<script>
import CesiumWrapper from "@/components/CesiumWrapper.vue";

export default {
  components: {
    CesiumWrapper
  }
};
</script>

<style>
html,
body,
#app {
  height: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden;
}
</style>

示例二

<template>
  <div>
    <cesium-wrapper />
    <div class="control-panel">
      <div>
        <label>Latitude</label>
        <input type="text" v-model="latitude" />
      </div>
      <div>
        <label>Longitude</label>
        <input type="text" v-model="longitude" />
      </div>
      <div>
        <label>Height</label>
        <input type="text" v-model="height" />
      </div>
      <button @click="flyToLocation">Fly to location</button>
    </div>
  </div>
</template>

<script>
import CesiumWrapper from "@/components/CesiumWrapper.vue";

export default {
  components: {
    CesiumWrapper
  },
  data() {
    return {
      latitude: 0,
      longitude: 0,
      height: 0
    };
  },
  methods: {
    flyToLocation() {
      this.$refs.cesiumWrapper.viewer.camera.flyTo({
        destination: Cesium.Cartesian3.fromDegrees(
          Number(this.longitude),
          Number(this.latitude),
          Number(this.height)
        )
      });
    }
  }
};
</script>

<style>
html,
body,
#app {
  height: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden;
}
.control-panel {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 999;
  padding: 20px;
  background-color: rgba(255, 255, 255, 0.8);
}
.control-panel div {
  display: flex;
  flex-direction: column;
  margin-bottom: 10px;
}
.control-panel label {
  margin-bottom: 5px;
  font-size: 14px;
}
.control-panel input {
  font-size: 16px;
  padding: 5px 10px;
}
.control-panel button {
  font-size: 16px;
  padding: 5px 10px;
  border: none;
  background-color: #2ecc71;
  color: #fff;
  cursor: pointer;
}
</style>

以上就是使用开源Cesium+Vue实现倾斜摄影三维展示功能的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用开源Cesium+Vue实现倾斜摄影三维展示功能 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • javascript RegExp multiline多行匹配影响的^

    JavaScript的正则表达式是一类对文本进行模式匹配的工具,其中RegExp对象是正则表达式的表示。 在正则表达式中,有一些特殊字符和元字符,用于匹配特定的文本,只要掌握这些特殊字符和元字符,就可以更加灵活和高效的处理文本。 其中^是表示字符串的起始位置,在单行模式中表示匹配以目标字符串开始的字符串,而在多行模式中,^匹配每行的起始位置。 multili…

    JavaScript 2023年6月11日
    00
  • Javascript中eval函数的使用方法与示例

    Javascript中eval函数的使用方法与示例 在 JavaScript 中,eval() 函数用于计算字符串中的 JavaScript 代码,并将其执行。以下是该函数的语法: eval(string) 其中,string 参数是包含要被计算的 JavaScript 代码的字符串。使用 eval() 函数时应谨慎,并确保输入的字符串是可信的,否则可能会发…

    JavaScript 2023年5月27日
    00
  • Jquery替换已存在于element上的event的方法

    在jQuery中,我们可以使用unbind()和bind()方法来替换已存在的事件。具体来说,可以按照以下步骤进行: 使用unbind()方法将原有的事件从元素上卸载掉。 使用bind()方法重新绑定需要替换的事件。 下面是两个示例: 示例1:替换已有的click事件 假设我们有一个按钮,已经绑定了click事件,在点击按钮时会弹出一个提示框。现在我们需要将…

    JavaScript 2023年6月10日
    00
  • JavaScript Dom对象的操作

    JavaScript DOM(文档对象模型)是一种使用JavaScript进行web页面编程的基本方式。它提供了API(应用程序接口),用于操作HTML和XML文档。在JavaScript中,DOM是一个对象层次结构,允许开发人员轻松地对HTML标记进行操作和访问。下面是JavaScript Dom对象的基本操作攻略: 获取元素 通过ID获取元素 javas…

    JavaScript 2023年5月27日
    00
  • 使用JS操作文件(FileReader读取–node的fs)

    使用JS操作文件可以通过浏览器的FileReader API或Node.js的fs模块来实现。下面分别介绍这两种方式的实现方法。 使用FileReader读取文件 步骤 通过<input type=”file”>元素选择文件,获取文件的File对象 利用FileReader对象读取文件内容 将读取的文件内容显示到页面上 代码示例 <!DOC…

    JavaScript 2023年5月27日
    00
  • 详解cesium实现大批量POI点位聚合渲染优化方案

    详解cesium实现大批量POI点位聚合渲染优化方案 概述 随着互联网和移动设备的普及,地理信息系统(GIS)以及地理数据的使用越来越广泛。在GIS应用开发中,矢量数据展示常常使用散点图,而在数据量较大的情况下,需要对散点进行聚合来达到优化效果。在本文中,我们将详细介绍如何使用cesium实现大批量POI点位聚合渲染优化方案。 cesium点位聚合原理 常见…

    JavaScript 2023年6月11日
    00
  • 详解JS判断页面是在手机端还是在PC端打开的方法

    下面详细介绍一下如何判断页面是在手机端还是在PC端打开,并提供两条示例说明。 方法一:使用UA判断 UA(UserAgent)是指HTTP请求头中的一部分,用于标识客户端的一些信息,比如用户的设备类型、浏览器型号等等。因此,我们可以通过判断UA中的关键字来确定页面访问者的设备类型。下面是实现的代码: const isMobile = /iPhone|iPad…

    JavaScript 2023年6月11日
    00
  • 深入解析JavaScript编程中的this关键字使用

    深入解析JavaScript编程中的this关键字使用 本文将深入讲解JavaScript编程中的this关键字的使用。this关键字在JavaScript中十分重要,它在不同的上下文环境下表现出不同的含义,常常让不少开发者摸不着头脑。本文将从概念入手,详细介绍this的定义、使用以及指向问题,并结合两个示例进行讲解。 this的定义和值 this是Java…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部