当前位置: 首页 > article >正文

Cesium基础-(Entity)-(point)

**

里边包含Vue、React框架代码

**

1、point 点

效果:
在这里插入图片描述
在这里插入图片描述

Cesium中点(Point)的详细解读如下:

  1. Entity API简介
    Cesium提供了Entity API,它是一个高级别的数据驱动的API,用于管理一组相关性的可视化对象。Entity API使用一致性设计的、高级别的对象来管理这些对象,其底层使用Primitive API。

  2. 点的创建
    在Cesium中,点是通过Entity对象的point属性来创建的。可以通过viewer.entities.add方法添加一个新的Entity对象,其中包含点的属性。

  3. 点的属性

    • position:点的位置,可以使用Cesium.Cartesian3.fromDegrees(经度, 纬度, 高度)来指定。
    • pixelSize:点的大小,单位为像素。
    • color:点的颜色,可以使用Cesium.Color.fromCssColorString('#颜色代码')来指定。
    • outlineColor:点的轮廓线颜色。
    • outlineWidth:点的轮廓线宽度,单位为像素。
    • distanceDisplayCondition:点在该视角距离内可见,其他距离不可见。
    • show:是否显示点。
  4. 点的样式化
    点的样式可以通过PointGraphics对象来定义,包括大小、颜色、轮廓等属性。

  5. 点的高程参考

    • heightReference:高程参考面,可以设置为Cesium.HeightReference.NONE(无参考面,点的高程值是绝对值)或者Cesium.HeightReference.CLAMP_TO_GROUND(点贴地)。
  6. 点的缩放和透明度

    • scaleByDistance:点的大小随视角的距离缩放,使用Cesium.NearFarScalar(近处距离, 近处缩放倍数, 远处距离, 远处缩放倍数)来定义。
    • translucencyByDistance:点的透明度随视角的距离变化,同样使用Cesium.NearFarScalar来定义。
  7. 点的显示和隐藏

    • disableDepthTestDistance:小于该数值后关闭深度检测。
  8. 点的事件处理
    可以为点添加点击事件,通过ScreenSpaceEventHandler来实现。

  9. 点的删除
    可以通过viewer.entities.removeAll()删除所有点,或者通过viewer.entities.remove(getByIdBoxs)删除指定ID的点。

以上是Cesium中点的详细解读,包括点的创建、属性设置、样式化、事件处理和删除等。通过这些属性和方法,可以在Cesium中实现丰富的点状地理实体的可视化效果。

代码:

addPoints(viewer) {
            // 主要城市的地理位置数据
            const cities = [
                { name: '北京', position: Cesium.Cartesian3.fromDegrees(116.4074, 39.9085) },
                { name: '上海', position: Cesium.Cartesian3.fromDegrees(121.4737, 31.2304) },
                { name: '广州', position: Cesium.Cartesian3.fromDegrees(113.2644, 23.1291) },
                // 更多城市...
            ];

            cities.forEach(city => {
                let entity = viewer.entities.add({
                    position: city.position,
                    point: {
                        color: Cesium.Color.RED, // 颜色
                        pixelSize: 10, // 像素大小
                        outlineColor: Cesium.Color.YELLOWGREEN, // 边框颜色
                        outlineWidth: 2, // 边框大小
                        heightReference: Cesium.HeightReference.CLAMP_TO_GROUND
                    },
                });

                viewer.trackedEntity = entity; // 追踪最后一个添加的城市
            });
        }

要在Vue代码环境下运行上述代码,你需要确保几个条件已经满足:

  1. Cesium库的引入:确保你的项目中已经引入了Cesium库。可以通过npm安装或者直接在HTML中通过<script>标签引入。

  2. Vue组件结构:你需要一个Vue组件来承载Cesium Viewer。

  3. Cesium Viewer的初始化:在Vue组件中初始化Cesium Viewer。

1、下面是如何将上述代码集成到Vue项目中的步骤:

步骤 1: 安装Cesium

如果你还没有安装Cesium,可以通过npm来安装:

npm install cesium
步骤 2: 创建Vue组件

创建一个新的Vue组件,比如CesiumMap.vue,并在其中初始化Cesium Viewer。

<template>
  <div ref="cesiumContainer" style="width: 100%; height: 100vh;"></div>
</template>

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

export default {
  name: 'CesiumMap',
  data() {
    return {
      viewer: null,
    };
  },
  mounted() {
    this.initCesium();
  },
  methods: {
    initCesium() {
      // 初始化Cesium Viewer
      this.viewer = new Cesium.Viewer(this.$refs.cesiumContainer, {
        imageryProvider: new Cesium.IonImageryProvider({ assetId: 1 }),
      });

      // 添加点
      this.addPoints();
    },
    addPoints() {
      const cities = [
        { name: '北京', position: Cesium.Cartesian3.fromDegrees(116.4074, 39.9085) },
        { name: '上海', position: Cesium.Cartesian3.fromDegrees(121.4737, 31.2304) },
        { name: '广州', position: Cesium.Cartesian3.fromDegrees(113.2644, 23.1291) },
        // 更多城市...
      ];

      cities.forEach((city) => {
        let entity = this.viewer.entities.add({
          position: city.position,
          point: {
            color: Cesium.Color.RED,
            pixelSize: 10,
            outlineColor: Cesium.Color.YELLOWGREEN,
            outlineWidth: 2,
            heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
          },
        });

        if (cities.indexOf(city) === cities.length - 1) {
          this.viewer.trackedEntity = entity;
        }
      });
    },
  },
};
</script>
步骤 3: 在父组件中使用

在你的父组件中引入并使用CesiumMap组件。

<template>
  <div>
    <CesiumMap />
  </div>
</template>

<script>
import CesiumMap from './CesiumMap.vue';

export default {
  components: {
    CesiumMap,
  },
};
</script>
步骤 4: 确保样式和资源加载

确保Cesium的样式文件widgets.css被正确加载,这通常在index.html或者通过npm安装时自动处理。

步骤 5: 运行你的Vue应用

确保你的Vue应用能够正确运行,并且Cesium Viewer和点的添加功能能够正常工作。

这样,你就可以在Vue环境中运行上述代码,实现在Cesium地图上添加点的功能。

2、要在React环境中运行上述代码,你需要遵循以下步骤:

步骤 1: 创建React项目

如果你还没有创建一个React项目,可以使用Create React App来快速开始:

npx create-react-app cesium-react-app
cd cesium-react-app
步骤 2: 安装Cesium

通过npm安装Cesium:

npm install cesium
步骤 3: 创建Cesium组件

创建一个新的React组件,比如CesiumMap.js,并在其中初始化Cesium Viewer。

import React, { useRef, useEffect, useState } from 'react';
import Cesium from 'cesium/Cesium';
import 'cesium/Widgets/widgets.css';

const CesiumMap = () => {
  const cesiumContainerRef = useRef(null);
  const [viewer, setViewer] = useState(null);

  useEffect(() => {
    // 初始化Cesium Viewer
    const viewerInstance = new Cesium.Viewer(cesiumContainerRef.current, {
      imageryProvider: new Cesium.IonImageryProvider({ assetId: 1 }),
    });
    setViewer(viewerInstance);

    return () => {
      // 清理资源,销毁viewer实例
      viewerInstance.destroy();
    };
  }, []);

  useEffect(() => {
    if (viewer) {
      addPoints(viewer);
    }
  }, [viewer]);

  const addPoints = (viewer) => {
    const cities = [
      { name: '北京', position: Cesium.Cartesian3.fromDegrees(116.4074, 39.9085) },
      { name: '上海', position: Cesium.Cartesian3.fromDegrees(121.4737, 31.2304) },
      { name: '广州', position: Cesium.Cartesian3.fromDegrees(113.2644, 23.1291) },
      // 更多城市...
    ];

    cities.forEach((city) => {
      let entity = viewer.entities.add({
        position: city.position,
        point: {
          color: Cesium.Color.RED, // 颜色
          pixelSize: 10, // 像素大小
          outlineColor: Cesium.Color.YELLOWGREEN, // 边框颜色
          outlineWidth: 2, // 边框大小
          heightReference: Cesium.HeightReference.CLAMP_TO_GROUND
        },
      });

      if (cities.length - 1 === cities.indexOf(city)) {
        viewer.trackedEntity = entity; // 追踪最后一个添加的城市
      }
    });
  };

  return (
    <div ref={cesiumContainerRef} style={{ width: '100%', height: '100vh' }} />
  );
};

export default CesiumMap;
步骤 4: 在App组件中使用CesiumMap组件

在你的App.js中引入并使用CesiumMap组件。

import React from 'react';
import CesiumMap from './CesiumMap';

function App() {
  return (
    <div className="App">
      <CesiumMap />
    </div>
  );
}

export default App;
步骤 5: 确保样式和资源加载

确保Cesium的样式文件widgets.css被正确加载,这通常在index.html或者通过npm安装时自动处理。

步骤 6: 运行你的React应用

确保你的React应用能够正确运行,并且Cesium Viewer和点的添加功能能够正常工作。

npm start
注意事项
  1. 清理资源:在useEffect的返回函数中,我们调用了viewerInstance.destroy()来清理资源,这是为了防止内存泄漏。

  2. CORS问题:如果你从不同的源加载数据,可能会遇到跨源资源共享(CORS)问题。确保服务器配置了正确的CORS策略。

  3. Cesium版本:确保你使用的Cesium版本与代码兼容。不同版本的Cesium可能有不同的API。

通过以上步骤,你就可以在React环境中运行上述代码,实现在Cesium地图上添加点的功能。


http://www.kler.cn/a/369607.html

相关文章:

  • 5.3.2 软件设计原则
  • C语言练习(31)
  • ubuntu20.04.6下运行VLC-Qt例子simple-player
  • 上位机知识篇---GitGitHub
  • Leetcode:350
  • 冲刺蓝桥杯之速通vector!!!!!
  • (STM32笔记)十二、DMA的基础知识与用法
  • OBOO鸥柏丨液晶拼接大屏KVM分布式输入输出节点控制系统技术
  • C/C++每日一练:实现冒泡排序
  • Spring Boot 3项目创建与示例(Web+JPA)
  • 厨艺爱好者的在线聚集地:Spring Boot实现
  • 2022 icpc南京(I,G,A,D,M,B)
  • GATK Funcotator 详解
  • [论文阅读]Large Language Model guided Protocol Fuzzing
  • MinIO服务部署指南
  • 线程的理解及基本操作
  • 如何使用 Vite 创建一个项目(Vue 或者 React)
  • Linux常用命令 yum 命令介绍
  • Eslint检查报错-关闭vue项目中的eslint
  • 代码工艺:SQL 优化的细节
  • C++初阶教程——C++入门
  • Go第三方框架--gorm框架(二)
  • 优选算法专题一 ——双指针算法
  • 智能AI监测系统燃气安全改造方案的背景及应用价值
  • 图片处理datasets示例(COCO)
  • 建筑行业知识管理:构建高效文档管理系统,提升项目协作与管控能力