ArcGIS Maps SDK для JavaScript Series 3: использование ArcGIS API для загрузки трехмерной Земли в Vue3


Чтобы использовать ArcGIS API for JavaScript для загрузки и отображения трехмерной Земли в Vue 3, вам необходимо использовать класс SceneView, предоставляемый ArcGIS. Класс 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. goTotarget: переместить вид в указанное положение. Для указания положения можно указать параметры, такие как координаты широты и долготы, диапазон слоев и т. д.
  3. hitTest: выполнить проверку попадания по заданной экранной координате, чтобы найти изображение или функцию совпадения.
  4. toMap: Преобразование экранных координат в географические координаты, соответствующие системе координат сцены.
  5. toScreen: Преобразовать координаты сцены в координаты экрана.
  6. takeScreenshot: получить снимок экрана текущего вида сцены.

Используйте класс SceneView для создания трехмерной земли в vue3.

Подготовка проекта

  • Создайте проект 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

Добавьте модуль ArcGIS API for JavaScript в компонент Vue: В компоненте Vue, которому необходимо использовать землю, используйте оператор импорта, чтобы представить ArcGIS API:

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

Создать компонент Vue

  • Создайте компонент vue и создайте новый компонент 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 = [];
}

Вызовите функцию инициализации initArcGisMap в OnMounted.

Представьте функцию жизненного цикла OnMounted vue и вызовите в ней метод initArcGisMap, определенный выше:

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

Запустите браузер, и вы увидите, что в браузере представлена ​​3D-земля.
Вставьте сюда описание изображения
Полный код выглядит следующим образом:

<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>

Создать объект камеры

В SceneView камера определяется путем создания объекта Camera и установки его в качестве свойства камеры SceneView. Объект Camera будет определять свойства камеры, которые будут использоваться в SceneView, такие как положение, ориентация, проекция и т. д.

  • Знакомство с объектом «Камера»
    Чтобы использовать объект «Камера», вам необходимо сначала импортировать модуль «Камера».
    import Camera from "@arcgis/core/Camera.js";
  • Создайте экземпляр камеры.
    Создайте экземпляр камеры с помощью нового метода Camera().
  var camera = new Camera({
    
    
    position: {
    
     // 相机位置
      x: -123.12,
      y: 40.57,
      z: 2000 // 高度
    },
    tilt: 60, // 相机俯仰角
    heading: 0 // 相机偏航角
  });
  • Установите для свойства камеры экземпляра SceneView указанный выше экземпляр камеры.
  view = new SceneView({
    
    
    center: [-118.80500, 34.02700],
    zoom: 4,
    container: "viewDiv",
    map: map,
    camera: camera // 设置相机
  });

Запустите браузер и вы увидите, что перспектива карты отобразилась в соответствии с параметрами, заданными камерой.
Вставьте сюда описание изображения

Общие свойства камеры

  1. position: положение камеры можно выразить с помощью xкоординат yи z. Например: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
  });

Общие методы камеры

  1. clone(): Создать копию камеры. Например:var clonedCamera = camera.clone();
  2. fromJSON(): В соответствии с входящим объектом JSON извлеките из него значения атрибутов и используйте эти значения атрибутов для создания нового объекта камеры. Это упрощает восстановление сохраненных свойств камеры для объектов 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, содержащий информацию о камере, а затем преобразуем его в объект Camera с помощью метода fromJSON(). Это быстро восстанавливает сохраненную информацию о камере в действенные объекты.

Следует отметить, что метод fromJSON() можно использовать только для инициализации объекта Camera из объекта JSON, созданного продуктами ArcGIS. Этот метод может вызвать ошибку, если переданный объект JSON не соответствует структуре свойств камеры. Убедитесь, что переданный объект JSON соответствует ожидаемой структуре свойства камеры.

Используя метод fromJSON(), вы можете легко передать состояние камеры из одного приложения в другое или сохранить свойства камеры в постоянном хранилище для использования в будущем.

Хорошо, давайте остановимся на этом разделе. Для получения дополнительной информации друзья могут перейти на официальный сайт ArcGIS, чтобы просмотреть и изучить.

おすすめ

転載: blog.csdn.net/w137160164/article/details/132265919