ArcGIS Maps SDK for JavaScript系列之三:在Vue3中使用ArcGIS API加載三維地球

目錄

  • SceneView類的常用屬性
  • SceneView類的常用方法
  • vue3中使用SceneView類創建三維地球
    • 項目準備
    • 引入ArcGIS API
    • 創建Vue組件
    • 在OnMounted中調用初始化函數initArcGisMap
    • 創建Camera對象
      • Camera的常用屬性
      • Camera的常用方法

要在Vue 3中使用ArcGIS API for JavaScript加載和展示三維地球,需要用到ArcGIS提供的SceneView類。SceneView類是ArcGIS API for JavaScript中用于呈現和操作3D場景的類。下面我們先來了解下SceneView類的常用屬性和方法

SceneView類的常用屬性

  1. container:設置場景視圖的容器元素,比如一個div元素。
  2. map:設置或獲取場景視圖中使用的地圖。
  3. spatialReference:獲取或設置場景視圖的空間參考。
  4. zoom:獲取或設置場景視圖的縮放級別。
  5. camera:獲取或設置場景視圖的相機位置和朝向。
  6. center:獲取或設置場景視圖的中心點。
  7. constraints:獲取或設置一組約束條件,如縮放級別范圍,相機傾角范圍等。
  8. interacting:獲取場景視圖是否正在交互。
  9. navigating:是否正在導航視圖(例如平移時)。
  10. navigation:用于配置視圖導航行為的選項。
  11. Viewpoint:獲取或設置場景視圖的視圖點,包括位置、縮放級別、相機朝向等信息。

SceneView類的常用方法

  1. when:在場景視圖及其所有相關資源加載完成后執行一個回調函數。可以通過該方法來執行一些場景加載完成后的操作。
  2. goTo:移動視圖到指定位置,可以指定target參數來指定位置,如經緯度坐標、圖層范圍等。
  3. hitTest:從給定的屏幕坐標處執行一次命中測試,以查找命中的圖形或要素。
  4. toMap:將屏幕坐標轉換為場景坐標系對應的地理坐標。
  5. toScreen:將場景坐標轉換為屏幕坐標。
  6. takeScreenshot:獲取當前場景視圖的屏幕截圖。

vue3中使用SceneView類創建三維地球

項目準備

  • 創建Vue 3項目:
    使用vite構建工具創建一個新的Vue項目,運行以下命令:

    npm create vite@latest
    

    創建vite項目,輸入項目名稱vite-vue3-arcgis,選擇vue框架,并選中JavaScript語音創建項目,創建成功后,進入vite-vue3-arcgis文件夾,并使用npm i 安裝依賴

  • 安裝ArcGIS JS API依賴包:
    在項目目錄下,運行以下命令安裝需要的依賴包:

    npm install @arcgis/core
    

引入ArcGIS API

在Vue組件中引入ArcGIS API for JavaScript模塊:在需要使用地球的Vue組件中,使用import語句引入ArcGIS API:

import Map from '@arcgis/core/Map.js'; 
import SceneView from "@arcgis/core/views/SceneView.js";

創建Vue組件

  • 創建vue組件,在components文件夾下新建ArcGisMap.vue組件
  • 準備三維地球展示的容器元素:
    在ArcGisMap.vue組件的模板中,準備一個div元素作為地球的容器:
    <template><div id="viewDiv"></div>
    </template>
    
  • 創建一個初始化函數initArcGisMap()用于創建Map實例和SceneView實例:
const initArcGisMap = () => {const map = new Map({basemap: "topo-vector"});view = new SceneView({center: [-118.80500, 34.02700],zoom: 4,container: "viewDiv",map: map});view.ui.components = [];
}

在OnMounted中調用初始化函數initArcGisMap

引入vue的OnMounted生命周期函數,并在其中調用上面定義的initArcGisMap方法,

import { onMounted } from 'vue'
onMounted(() => {initArcGisMap()
})

運行瀏覽器,可以看到三維地球已經呈現在了瀏覽器中
在這里插入圖片描述
完整代碼如下:

<template><div id="viewDiv"></div>
</template><script setup>
import { onMounted } from 'vue'
import Map from '@arcgis/core/Map.js'; 
import SceneView from "@arcgis/core/views/SceneView.js";
let view
onMounted(() => {initArcGisMap()
})const initArcGisMap = () => {const map = new Map({basemap: "topo-vector"});view = new SceneView({center: [-118.80500, 34.02700],zoom: 4,container: "viewDiv",map: map});view.ui.components = [];
}
</script>
<style scoped>  #viewDiv {width: 100%;height: 100vh;}
</style>

創建Camera對象

在 SceneView 中,可以通過創建 Camera 對象并將其設置為 SceneView 的 camera 屬性來定義相機。Camera 對象將定義要在 SceneView 中使用的相機屬性,如位置、方向、投影方式等。

  • 引入Camera對象
    要使用Camera對象,需要先引入Camera模塊
    import Camera from "@arcgis/core/Camera.js";
  • 創建Camera實例
    通過new Camera()方法來創建Camera的實例
  var camera = new Camera({position: { // 相機位置x: -123.12,y: 40.57,z: 2000 // 高度},tilt: 60, // 相機俯仰角heading: 0 // 相機偏航角});
  • 將SceneView實例的camera屬性設置為上面的camera實例
  view = new SceneView({center: [-118.80500, 34.02700],zoom: 4,container: "viewDiv",map: map,camera: camera // 設置相機});

運行瀏覽器,可以看到,地圖視角已經按照camera設置的參數顯示了
在這里插入圖片描述

Camera的常用屬性

  1. position:相機的位置,可以使用 xyz 坐標表示。例如:camera.position = { x: -118, y: 34, z: 5000 };
  2. heading:相機的偏航角,表示相機繞其位置的垂直軸旋轉的角度。例如:camera.heading = 180;
  3. tilt:相機的俯仰角,表示相機繞其位置的水平軸旋轉的角度。例如:camera.tilt = 45;
  4. fov:相機的視場角,表示可視范圍的大小。例如:camera.fov = 60;
    示例代碼如下:
 var camera = new Camera({position: {x: -118,y: 34,z: 5000},heading: 180,tilt: 45,fov: 60});

Camera的常用方法

  1. clone():創建相機的副本。例如:var clonedCamera = camera.clone();
  2. fromJSON() :根據傳入的 JSON 對象,提取其中的屬性值,并使用這些屬性值創建一個新的 Camera 對象。這可以方便地將已存儲的相機屬性還原為 Camera 對象。
  3. toJSON():將相機屬性轉換為 JSON 對象。例如:var cameraJson = camera.toJSON();

下面的代碼我們使用 fromJSON() 方法來初始化 Camera 對象:

const initArcGisMap = () => {const map = new Map({basemap: "topo-vector"}); var cameraJson = {"position": {"x": -118,"y": 34,"z": 5000},"heading": 180,"tilt": 45,"fov": 60,"near": 0.1,"far": 100000
}; 
// 使用 fromJSON() 方法創建一個新的 Camera 實例
var camera = Camera.fromJSON(cameraJson);
console.log(camera) view = new SceneView({center: [-118.80500, 34.02700],zoom: 4,container: "viewDiv",map: map,camera: camera // 設置相機});view.ui.components = []; 
}

在上面的代碼中,我們創建了一個包含相機信息的 JSON 對象 cameraJson,然后通過 fromJSON() 方法將其轉換為 Camera 對象 camera。這樣可以快速將已存儲的相機信息還原為可操作的對象。

需要注意的是,fromJSON() 方法只能用于從 ArcGIS 產品生成的 JSON 對象初始化 Camera 對象。如果傳入的 JSON 對象不符合相機屬性的結構,則該方法可能會拋出錯誤。確保傳入的 JSON 對象與相機屬性的期望結構相匹配。

通過使用 fromJSON() 方法,可以輕松地將相機的狀態從一個應用程序傳遞到另一個應用程序,或者將相機屬性保存到持久存儲中以備將來使用。

好啦,這節就先到這里吧,更多內容小伙伴們可以上ArcGIS的官網進行查看學習。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38340.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38340.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38340.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【JavaSE】面向對象之封裝

封裝的概念 封裝是把過程和數據包圍起來&#xff0c;對數據的訪問只能通過已定義的接口。面向對象計算始于這個基本概念&#xff0c;即現實世界可以被描繪成一系列完全自治、封裝的對象&#xff0c;這些對象通過一個受保護的接口訪問其他對象。封裝是一種信息隱藏技術&#xff…

Java旋轉數組中的最小數字(圖文詳解版)

目錄 1.題目描述 2.題解 分析 具體實現 方法一&#xff08;遍歷&#xff09;&#xff1a; 方法二&#xff08;排序&#xff09;&#xff1a; 方法三&#xff08;二分查找&#xff09;&#xff1a; 1.題目描述 有一個長度為 n 的非降序數組&#xff0c;比如[1,2,3,4,5]&a…

Linux基礎

Linux 一、基礎01- 執行環境準備02- linux的版本分類02.1 內核版本02.2 發行版本02.3 內核和發行版本的區別: 03- 虛擬機安裝04- 啟動linux 二、系統操作05- 幫助命令05.1 man 幫助05.2 help 幫助05.2.1 內部命令05.2.2 外部命令 05.3 info 幫助 06- ls命令06.1 -r06.2 -rt06.3…

npm install 中 --save 和 --save-dev 是什么?

npm&#xff0c;全名 Node Package Manager&#xff0c;套件管理工具&#xff0c;package.json 會記下你在項目中安裝的所有套件。 假設在項目中安裝 lodash npm i --save lodash這樣在 dependencies 中會出現&#xff1a; 如果修改了導入方式&#xff1a; npm i --save-dev …

在Linux中對docker 一鍵安裝,本地安裝,無網絡安裝,

在Linux中對docker 一鍵安裝 前提先準備好安裝包 非常絲滑 首先先把需要準備的文件準備好&#xff0c;/package/base.tar 和 /package/docker-20.10.10.tgz包 這兩個文件包必須放在 /package目錄下 再和/package同級的目錄下再準備conf目錄&#xff0c;conf目錄下放docker.se…

Labview解決“重置VI:xxx.vi”報錯問題

文章目錄 前言一、程序框圖二、前面板三、問題描述四、解決辦法 前言 在程序關閉前面板的時候小概率型出現了 重置VI&#xff1a;xxx.vi 這個報錯&#xff0c;并且發現此時只能通過任務管理器殺掉 LabVIEW 進程才能退出&#xff0c;這里介紹一下解決方法。 一、程序框圖 程序…

特征選擇 | 遞歸特征消除算法篩選最優特征

特征選擇 | 遞歸特征消除算法篩選最優特征 目錄 特征選擇 | 遞歸特征消除算法篩選最優特征寫在前面常規方法算法原理結果分析參考資料 寫在前面 在實際應用中&#xff0c;特征選擇作為機器學習和數據挖掘領域的重要環節&#xff0c;對于提高模型性能和減少計算開銷具有關鍵影響…

pve7.2虛擬機 lvm磁盤擴容,增加硬盤操作

之前安裝pve時候只有256的ssd,最近安裝的虛擬機較多&#xff0c;給加塊閑置硬盤&#xff0c;順便學習一下&#xff0c;像pve這種虛擬機系統&#xff0c;硬盤應該可以像nas你這樣隨時增加&#xff0c;而不影響上層應用&#xff0c;我自己也是摸索著做。 一、安裝好硬盤后打開pv…

vue3+ts-tsconfig.json報錯Option ‘importsNotUsedAsValues’

vue3ts-tsconfig.json報錯Option ‘importsNotUsedAsValues’ is deprecated and will stop functioning in TypeScript 5.5. Specify compilerOption ‘“ignoreDeprecations”: “5.0”’ to silence this error. Use ‘verbatimModuleSyntax’ instead 自我記錄 翻譯 選項…

智能家居(2)---串口通信(語音識別)控制線程封裝

封裝語音線程&#xff08;語音通過串口和主控設備進行交流&#xff09;實現對智能家居中各種燈光的控制 mainPro.c(主函數) #include <stdio.h> #include "controlDevice.h" #include "inputCommand.h" #include <pthread.h>struct Devices …

echart 3d立體顏色漸變柱狀圖

如果可以實現記得點贊分享&#xff0c;謝謝老鐵&#xff5e; 1.需求描述 根據業務需求將不同的法律法規&#xff0c;展示不同的3d立體漸變柱狀圖。 2.先看下效果圖 3. 確定三面的顏色&#xff0c;這里我是自定義的顏色 // 右面生成顏色const rightColorArr ref(["#79D…

ComponentOne Studio ASP.NET MVC Crack

ComponentOne Studio ASP.NET MVC Crack FlexReport增強功能 添加了對在Microsoft Windows上部署Microsoft Azure的支持。 添加了對顯示嵌入字體的支持。 .NET標準版的經典C1PDF(Beta版) GrapeCity的經典C1Pdf庫現在提供了基于Microsoft.NET標準的版本。在任何.NET應用程序(包括…

每日一學——IP尋址

IP尋址是指在網絡中分配和識別設備的唯一IP地址。IP地址是由一串數字組成的標識符&#xff0c;用于在網絡中定位和識別設備。 IPv4是最常用的IP地址版本&#xff0c;它由32位的地址組成&#xff0c;通常表示為四個以點分隔的十進制數字&#xff08;例如192.168.0.1&#xff09…

江南大學計算機考研分析

24計算機考研|上岸指南 江南大學 江南大學計算機考研招生學院是人工智能與計算機學院。目前均已出擬錄取名單。 江南大學人工智能與計算機學院成立于2020年3月&#xff0c;辦學歷史可追溯到1994年設立的計算機應用專業。學院秉持江南大學“彰顯輕工特色&#xff0c;服務國計民…

【數據結構】棧和隊列

【數據結構】棧和隊列 一&#xff1a; 棧1.棧的概念及和結構2. 棧的實用3. 棧接口實現 二&#xff1a; 隊列1. 隊列的概念和結構2. 隊列的實用3. 隊列接口實現 三&#xff1a;擴展 一&#xff1a; 棧 1.棧的概念及和結構 棧&#xff1a;一種特殊的線性表&#xff0c;其只允許…

SAP安全庫存-安全庫存共享、安全庫存簡介

SAP系統中的安全庫存用于管理計劃外和計劃內的庫存需求,在某些行業中,由于不同的情況,如意外損耗、損壞、環境問題、制造工藝問題、需求增加等,通常會出現意外的庫存需求。 SAP提供了維護安全庫存的處理方式來處理這樣的問題,安全庫存的字段信息在主數據視圖中,在物料需…

題解 | #1002.Shortest path# 2023杭電暑期多校9

1002.Shortest path 簽到題 記憶化搜索 題目大意 給定一個正整數 n n n &#xff0c;可以對其進行以下操作&#xff1a; 如果 n n n 能被 3 3 3 整除&#xff0c;則可以使 n n / 3 nn/3 nn/3 ;如果 n n n 能被 2 2 2 整除&#xff0c;則可以使 n n / 2 nn/2 nn/2 …

【C++】deque容器

0.前言 1.deque構造函數 #include <iostream> using namespace std; #include <deque>//deque構造函數 void printDeque(const deque<int>& d) {for (deque<int>::const_iterator it d.begin(); it ! d.end(); it){//*it 100; //加了const就不能…

go的gin和gorm框架實現切換身份的接口

使用go的gin和gorm框架實現切換身份的接口&#xff0c;接收前端發送的JSON對象&#xff0c;查詢數據庫并更新&#xff0c;返回前端信息 接收前端發來的JSON對象&#xff0c;包含由openid和登陸狀態組成的一個string和要切換的身份碼int型 后端接收后判斷要切換的身份是否低于該…

windows下dll文件的創建詳細教程

1、前言 dll文件是啥&#xff0c;就不作過多贅述了。現在直接教大家如何創建與使用dll文件。 本文基于windows系統&#xff0c;使用的編譯相關工具為visual studio 2019。 2、創建dll 2.1 創建dll工程 首先打開visual studio&#xff0c;然后選擇創建新項目&#xff0c;在搜…