国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue2 使用 cesium 【第二篇-相機(jī)視角移動(dòng)+添加模型】

這篇具有很好參考價(jià)值的文章主要介紹了vue2 使用 cesium 【第二篇-相機(jī)視角移動(dòng)+添加模型】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

vue2 使用 cesium 【第二篇-相機(jī)視角移動(dòng)+添加模型】

搞了一陣子 cesium,小白入門,這東西很牛逼,但是感覺這東西好費(fèi)勁啊!網(wǎng)上資料不多,每個(gè)人的用法又不一樣,操作起來真的是絕絕子。之前寫了一篇 vue2 使用 cesium 的博文,沒有寫完,本來想繼續(xù)寫來著,想了一下還是重新開一篇吧。上一篇說到了事件,今天不想寫事件了,先寫一點(diǎn)兒別的吧,一些基本的操作。注意:僅供參考,切勿盡心。
其次,這篇博文是基于 vue2 使用 cesium 這篇博文繼續(xù)的,所以說關(guān)于 cesium 怎么放到 vue 項(xiàng)目里面,怎么加載圖層啥的去看上一篇博文,起碼到我寫的時(shí)候,這個(gè)博文是沒有過時(shí)的,都是親測可用的,這幾篇博文都是一邊寫、一邊敲、一邊截圖的。

相機(jī)視角移動(dòng)

這小節(jié)說一下相機(jī)視角的移動(dòng),就比如說我們想讓地球加載完之后,自動(dòng)轉(zhuǎn)到一個(gè)位置,我們可以使用 cesium 提供的一個(gè)方法,把相機(jī)移動(dòng)到我們需要的地方。

這部分的代碼就很簡單了,首先貼一下官網(wǎng)相關(guān) API。這個(gè)相機(jī)移動(dòng),是在 viewer 下面的 camera 相機(jī)下面,有一個(gè) flyTo (options) 方法。

vue2 使用 cesium 【第二篇-相機(jī)視角移動(dòng)+添加模型】

我代碼寫的是比較簡單的案例了,如果比較復(fù)雜的話根據(jù)官方給出的 api 去修改。

首先我們封裝一個(gè)相機(jī)移動(dòng)的函數(shù),然后在使用的時(shí)候直接調(diào)用這個(gè)封裝好的函數(shù)就可以了。

  /**
   * 相機(jī)視角移動(dòng)函數(shù) - by wjw
   * @param lon 目標(biāo)經(jīng)度
   * @param lat 目標(biāo)緯度
   * @param height  相機(jī)高度
   * @param heading  航向角
   * @param pitch  俯仰角
   * @param roll   距中心的距離,以米為單位
   * @param duration  飛行時(shí)間
   */
  flyToTarget(lon, lat, height, heading, pitch, roll, duration) {
    this.viewer.camera.flyTo({
      destination: Cesium.Cartesian3.fromDegrees(lon, lat, height), // 經(jīng)緯度以及相機(jī)離地高度
      orientation: {
        heading: Cesium.Math.toRadians(heading), // 航向角
        pitch: Cesium.Math.toRadians(pitch), // 俯仰角
        roll: roll // 距中心的距離,以米為單位
      },
      duration: duration // 飛行時(shí)間
    })
  }

然后使用的話也很簡單,直接調(diào)用一下子就可以了。

// 比如說兩秒之后,視角移動(dòng)到目標(biāo)區(qū)域
setTimeout(() => {
      // 相機(jī)視角移動(dòng)至目標(biāo)位置
      this.flyToTarget(117.000923, 36.675807, 12000000, 0, -90, 0, 2)
}, 2000)

這樣的話,相機(jī)移動(dòng)視角的基本實(shí)現(xiàn)就完成了,看一下效果哈。吐槽一下,CSDN 這個(gè)上傳 gif 圖片很不友好,有些效果截圖效果不好,gif 更好,但是圖片大小有限制,好多我錄好了導(dǎo)入發(fā)現(xiàn)太大了不讓我上傳,氣!

vue2 使用 cesium 【第二篇-相機(jī)視角移動(dòng)+添加模型】

看,我刷新一下頁面,地球最開始顯示的是北美區(qū)域,但是過了一會(huì)兒,地球視角旋轉(zhuǎn)到了我們設(shè)定的目標(biāo)區(qū)域,嗯,就是這個(gè)樣子。

添加模型

嗯,添加模型這個(gè)東西,每個(gè)人的方式都有自己的習(xí)慣和方式,我這邊就簡單的寫一下哈。

首先如果想要一個(gè)真實(shí)的模型加載在藍(lán)星,就需要去找一個(gè)模型,如果是正經(jīng)項(xiàng)目開發(fā),添加模型什么的,肯定會(huì)有自己設(shè)計(jì)制作好的模型文件提供,或者是委托第三方采購,但是如果是自己玩怎么辦,沒關(guān)系寶子們,我推薦一個(gè)網(wǎng)站叫做 Sketchfab,這個(gè)網(wǎng)站是國外的,里面有很多模型可以免費(fèi)下載,盡管有些精致的需要付費(fèi),但是自己玩的話,這都不重要了。

vue2 使用 cesium 【第二篇-相機(jī)視角移動(dòng)+添加模型】

比如我們搜索 “衛(wèi)星” ,英文就是 “satellite”。搜索一下,搜出來的模型,右上角帶有下載按鈕的,就是可以免費(fèi)下載的了 :

vue2 使用 cesium 【第二篇-相機(jī)視角移動(dòng)+添加模型】

點(diǎn)擊了右上角的下載按鈕,會(huì)彈窗選擇文件類型,我是選擇 gltf 格式的,確定好點(diǎn)擊藍(lán)色的下載按鈕就可以下載下來了。

vue2 使用 cesium 【第二篇-相機(jī)視角移動(dòng)+添加模型】

下載下來就是個(gè)壓縮包,里面是我們的模型文件:

vue2 使用 cesium 【第二篇-相機(jī)視角移動(dòng)+添加模型】

解壓后 是這個(gè)樣子的:

vue2 使用 cesium 【第二篇-相機(jī)視角移動(dòng)+添加模型】
我們在項(xiàng)目里面引入的就是這個(gè) gltf 文件,但是其他文件,是 gltf 文中調(diào)用的,所以說呢,都得要。但是有的文件哈,只有 gltf 文件,他是沒有貼圖的,所有的數(shù)據(jù)都保存在 gltf 中了,沒有分開相互引用。所以說呢,都一樣。

然后把這個(gè)解壓后的文件夾,直接放在項(xiàng)目的 public -> static -> models 文件夾中就可以了,當(dāng)然可以根據(jù)需要隨便改改名字,這個(gè)是沒有問題的。

vue2 使用 cesium 【第二篇-相機(jī)視角移動(dòng)+添加模型】

接下來就是在項(xiàng)目中添加這個(gè)模型,讓他加載到藍(lán)星上面去。

每個(gè)人編碼方式不一樣哈,我把模型單獨(dú)寫了一個(gè) TModels.js 文件引入的:

/**
 * 普通衛(wèi)星模型
 * @param id 模型唯一標(biāo)識(shí)ID
 * @param position 位置信息
 * @param orientation 方向信息
 * @param description 模型描述
 * @returns {{orientation, description, model: {minimumPixelSize: number, show: boolean, scale: number, maximumSize: number, uri: string}, id, position}}
 */
export const satelliteModel = function (id, position, orientation, description, modelData) {
  return {
    // 模型id
    id: id,
    // 模型類型
    modelType: 'wx',
    // 模型位置
    position: position,
    // 模型自定義數(shù)據(jù)
    modelData: modelData,
    // 模型方向
    orientation: orientation,
    // 模型資源
    model: {
      // 模型路徑
      uri: '/static/models/weixing/scene.gltf',
      scale: 1000.0, //放大倍數(shù)
      // 模型是否可見
      show: true,
      // 模型最小刻度
      minimumPixelSize: 150,
      // 模型最大刻度
      maximumSize: 150,
      // // 模型輪廓顏色
      silhouetteColor: Cesium.Color.WHITE,
      // // 模型輪廓大小,單位px
      silhouetteSize: 0,
    },
    // 添加描述
    description: description
  }
}

就是上邊這個(gè)樣子,然后這是拋出了一個(gè)方法,傳的參數(shù)根據(jù)自己項(xiàng)目的實(shí)際需要進(jìn)行修改。一些注釋我寫的也算可以,應(yīng)該是可以看懂的,如果需要其他的參數(shù)或者是效果,可以去官網(wǎng)查一下手冊。

這只是創(chuàng)建模型的方法,通過這個(gè)方法可以讀取出一個(gè)模型出來。接下來就是把這個(gè)模型放到藍(lán)星上面。把一個(gè)模型放到藍(lán)星上面。

首先需要一個(gè)經(jīng)緯度信息,就是把模型放到哪里;
然后一個(gè)高度,就是把模型放著這個(gè)位置后,距離海平面多高;
然后方向角相關(guān)參數(shù),因?yàn)槟P褪侨S的,他在這個(gè)位置朝向哪里,中心點(diǎn)旋轉(zhuǎn)多少;

首先引入上一步的模型

import { satelliteModel } from './TModels'

然后編寫封裝一下模型加載的方法:

  /**
   * 添加衛(wèi)星模型  - by wjw
   * @param lon 經(jīng)度
   * @param lat 緯度
   * @param height 高度
   * @param heading 航向角
   * @param pitch 俯仰角
   * @param roll 轉(zhuǎn)向角度
   * @param id 模型唯一標(biāo)識(shí)符
   * @param description 描述
   */
  addModel(id, description, lon, lat, height, heading, pitch, roll) {
  	// 模型位置信息
    let position = Cesium.Cartesian3.fromDegrees(lon, lat, height);
    // 設(shè)置模型方向
    let hpRoll = new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(heading), Cesium.Math.toRadians(pitch), Cesium.Math.toRadians(roll));
    let orientation = Cesium.Transforms.headingPitchRollQuaternion(position, hpRoll);
    // 向藍(lán)星添加模型,返回模型對(duì)象
    let model = this.viewer.entities.add(satelliteModel(id, position, orientation, description));
    return model
  }

這樣想藍(lán)星添加模型的方法就封裝好了,我們傳參調(diào)用一下就可以了。

this.addModel('wjw-001', '測試模型', 117, 36, 1000000, 0, 0, 0)

然后我們的小衛(wèi)星就加載到藍(lán)星了。

vue2 使用 cesium 【第二篇-相機(jī)視角移動(dòng)+添加模型】
好了,這是最簡單的加載模型到藍(lán)星的方式,還有其他的方式,如果需要的話可以自己看一下研究一下。

移除模型

上一小節(jié)說了一下加載模型,加載上了還需要移除。

大體邏輯哈,我們添加模型的時(shí)候不是給模型設(shè)置了一個(gè) id 嗎?這是唯一的,我們根據(jù)這個(gè)唯一的標(biāo)識(shí)符 id ,去獲取到這個(gè)模型對(duì)象,如果獲取到了,就說明藍(lán)星確實(shí)有這個(gè) id 的模型,我們直接刪除就可以了,如果沒有獲取到,那么就說明藍(lán)星上沒有這個(gè) id 的模型,那就不用處理了,因?yàn)闆]有就不需要?jiǎng)h除。

封裝方法:

  /**
   * 根據(jù) ID 查詢模型  - by wjw
   * @param id 模型唯一標(biāo)識(shí)符 id
   * @returns {Entity}
   */
  getModelById(id) {
    let model = this.viewer.entities.getById(id)
    return model
  }

  /**
   * 刪除模型  - by wjw
   * @param model 模型實(shí)體對(duì)象
   */
  removeModel(model) {
    this.viewer.entities.remove(model)
  }

說哈,其實(shí)可以一個(gè)方法寫完是吧?但是這里我分了兩個(gè),這么做肯定有原因的,每個(gè)人業(yè)務(wù)不一樣,所以說呢,封裝起來肯定有區(qū)別,之前有博客被人罵了,說我封裝的不對(duì),那是因?yàn)榫唧w的業(yè)務(wù)需求不一樣,我就簡單寫個(gè) demo,根據(jù)自己的實(shí)際情況自己封裝哈。不喜勿噴!

然后就簡單了,調(diào)用一下就可以了。

	// 添加衛(wèi)星
    this.addModel('wjw-001', '測試模型', 117, 36, 1000000, 0, 0, 0)
    // 根據(jù) id 獲取模型
    let model = this.getModelById('wjw-001')
    console.log(model)

之前添加了一個(gè) id 是 wjw-001 的模型,我們先獲取一下看看:

vue2 使用 cesium 【第二篇-相機(jī)視角移動(dòng)+添加模型】
控制臺(tái)打印出來了。

如果查詢一個(gè)沒有的 id 看一下效果:

    // 添加衛(wèi)星
    this.addModel('wjw-001', '測試模型', 117, 36, 1000000, 0, 0, 0)
    // 根據(jù) id 獲取模型
    let model = this.getModelById('wjw-002')
    console.log('獲取到的模型對(duì)象------->> ', model)

沒有 id 是 wjw-002 的模型,查詢出來看結(jié)果:

vue2 使用 cesium 【第二篇-相機(jī)視角移動(dòng)+添加模型】

沒有,和我們想的邏輯對(duì)起來了。

然后刪除就可以了:

    // 添加衛(wèi)星
    this.addModel('wjw-001', '測試模型', 117, 36, 1000000, 0, 0, 0)
    // 根據(jù) id 獲取模型
    let model = this.getModelById('wjw-001')
    if (model) {
      setTimeout(() => {
        this.removeModel(model) // 四秒后刪除
      }, 4000)
    }

看一下效果:

vue2 使用 cesium 【第二篇-相機(jī)視角移動(dòng)+添加模型】
好了,就這樣。

這篇文章先這樣,后邊繼續(xù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-502710.html

到了這里,關(guān)于vue2 使用 cesium 【第二篇-相機(jī)視角移動(dòng)+添加模型】的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 解決cesium中3dtiles模型隨視角移動(dòng)

    我們在使用cesium的時(shí)候有時(shí)會(huì)遇到一個(gè)問題就是模型導(dǎo)入之后,模型沒有固定住會(huì)隨著視角的變化而移動(dòng),研究發(fā)現(xiàn)模型在地底下。我認(rèn)為是建模的問題有可能是建模軟件使用的坐標(biāo)不是wgs84導(dǎo)致高程不一的原因,但我沒試過。 解決方案是:1.打開深度檢測 2.手動(dòng)把模型提上

    2024年02月16日
    瀏覽(24)
  • Cesium 問題:加載 gltf 格式的模型之后太小,如何讓相機(jī)視角拉近

    Cesium 問題:加載 gltf 格式的模型之后太小,如何讓相機(jī)視角拉近

    剛加載的模型太小,如何拉近視角放大 在這里有兩種方式進(jìn)行拉近視角, 一種是點(diǎn)擊復(fù)位進(jìn)行視角拉近 一種是剛加載就直接拉近視角

    2024年02月22日
    瀏覽(22)
  • Vue基礎(chǔ)第二篇

    總結(jié): 1 寫在data或method中的屬性或方法,從vm中直接可以 . 出來 2 methods的函數(shù)中,如果想使用data或methods中的屬性,直接this.名字 ?就可以了 示例: 總結(jié): 1 ?v-on:事件名=\\\'函數(shù)\\\'-----》簡寫成 ?@事件名=\\\'函數(shù)\\\' 2 觸發(fā)函數(shù),可以傳參數(shù) 示例: 標(biāo)簽上 ? name ? id ?class ?src ?href

    2024年02月08日
    瀏覽(21)
  • Vue第二篇:概念深度剖析

    參考鏈接:https://www.bilibili.com/video/BV1oj411D7jk/?spm_id_from=333.788.recommend_more_video.0vd_source=3969f30b089463e19db0cc5e8fe4583a 1、響應(yīng)式數(shù)據(jù)與插值表達(dá)式理解 前端最基本的操作是:把數(shù)據(jù)呈現(xiàn)到頁面上,把更新的數(shù)據(jù)再更新到頁面上。 原生js的賦值操作如下: div id=\\\"box\\\"/div script let value = \\\'這

    2024年02月17日
    瀏覽(21)
  • vue中加載使用cesium加載3dTileset以及三維模型移動(dòng)(1.108版本)

    加載三維模型 視頻參考地址: https://www.bilibili.com/video/BV14g411s7DX/?spm_id_from=333.1007.top_right_bar_window_history.content.clickvd_source=4716b12357fe8e4b33b293b4bbbbfcd8

    2024年01月23日
    瀏覽(92)
  • vue2配置cesium詳細(xì)教程

    vue2配置cesium詳細(xì)教程

    網(wǎng)絡(luò)上現(xiàn)在關(guān)于vue配置cesium的教程有很多,包括csdn和掘金等。雖然這些教程在一定意義上提供了開發(fā)者如何配置cesium的方法,但是大部分的方法都不切實(shí)際,因?yàn)槊總€(gè)人的電腦中npm、node、cesium、vue、webpack的版本都基本不一致的,如果只是照搬全抄就會(huì)出現(xiàn)一連續(xù)的錯(cuò)誤和

    2024年02月03日
    瀏覽(12)
  • vue2移動(dòng)端使用vue-qrcode-reader實(shí)現(xiàn)掃一掃功能

    移動(dòng)端實(shí)現(xiàn)掃一掃? ?掃碼功能 第一種:如果是用uniapp開發(fā)? 可以直接使用uni的語法 并且兼容多端 第二種:如果是開發(fā)瀏覽器的網(wǎng)頁,基于微信的話,也可以用微信的weixin-js-sdk ? ? ? ? 具體流程參考官網(wǎng):概述 | 微信開放文檔 第三種:用第三方vue-qrcode-reader實(shí)現(xiàn)掃一掃功能

    2024年02月07日
    瀏覽(26)
  • 【FPGA入門】第二篇、ISE軟件的使用

    【FPGA入門】第二篇、ISE軟件的使用

    目錄 第一部分、新建工程 第二部分、添加頂層文件 第三部分、添加管腳約束文件 第四部分、生成bit文件 第五部分、連接開發(fā)板,下載bit文件 第六部分、總結(jié) 第一步、如果提前建立了工程文件夾,那么這里就需要去掉生成子文件夾的路徑。 因?yàn)镮SE軟件輸入工程名稱后自動(dòng)

    2024年02月09日
    瀏覽(24)
  • 使用CentOS 7配置Web服務(wù)-第二篇

    使用CentOS 7配置Web服務(wù)-第二篇

    接上一個(gè)實(shí)驗(yàn)dhcp實(shí)驗(yàn)已經(jīng)配置好ip了 這個(gè)實(shí)驗(yàn)我們來在CentOS 7配置Web服務(wù) 1、創(chuàng)建一臺(tái)虛擬主機(jī)網(wǎng)站,滿足以下功能: 1)網(wǎng)站頁面存放路徑為學(xué)生用戶家目錄。 2)網(wǎng)站訪問端口為8080 3)可通過ip地址192.168.1.學(xué)號(hào)訪問 4)可通過域名訪問,域名為學(xué)生姓名。例如www.zhangsan.com

    2024年02月11日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包