Cesium基础-(Entity)-(point)

news2024/11/29 8:38:00

**

里边包含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.coloradmin.cn/o/2227281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宠物空气净化器有哪些功能呢?优品宠物空气净化器使用体验分享

前段时间&#xff0c;我朋友家生二胎了&#xff0c;为了家里的宝宝&#xff0c;准备入手一台空气净化器。跑来问我&#xff0c;让我推荐一款能净化空气的空气净化器。让他描述描述需求&#xff0c;才知道&#xff0c;他家除了新添了二胎外&#xff0c;最近还养了一只猫&#xf…

学习私服并配置到项目中

下载地址 一、安装 1.将下载好的压缩包进行解压 2.进人bin目录下cmd&#xff0c;执行 nexus.exe /run nexus3.访问nexus界面 在浏览器中输入&#xff1a;http://localhost:8081 4.登录 Username为admin Password根据提示到安装包中去找 二、本地仓库与私服连接 1.创建…

安信金业:18k和24k黄金的区别

黄金&#xff0c;作为永恒的贵金属&#xff0c;在人们心中拥有着独特的地位。而18K金和24K金&#xff0c;作为两种常见的黄金饰品&#xff0c;却常常让消费者感到困惑。今天&#xff0c;我们就来深入探讨18K金和24K金之间的区别&#xff0c;帮助你更好地理解它们各自的特性和价…

基于Qt的多线程并行和循序运行实验Demo

致谢&#xff08;Acknowledgement&#xff09;&#xff1a; 感谢Youtube博主Qt With Ketan与KDAB精心录制的Qt多线程处理应用教程&#xff0c;感谢Bilibili博主爱编程的大丙对Qt多线程与线程池内容深入浅出的讲解。 一、计算机线程相关概念 线程概念[1]&#xff1a; 在计算机科…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-27

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-27 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-27目录1. Large Language Model-based Augmentation for Imbalanced Node Classification on Text-Attributed Graphs摘要研究背…

ESD防静电监控系统提高3C电子厂的稳定生产

在当今信息技术迅速发展的时代&#xff0c;3C电子产品的生产需求日益增加。然而&#xff0c;随着生产规模的扩大和技术的不断进步&#xff0c;生产过程中面临的挑战也日益凸显。静电放电作为影响电子产品质量与可靠性的一个重要因素&#xff0c;受到越来越多厂商的重视。ESD防静…

matlab线性度计算程序

matlab线性度计算程序 环境 matlab2023a ads2020 原理 其中f(v)是曲线&#xff0c;fmax是f(v)的最大值&#xff0c;fmin是f(v)的最小值&#xff0c;vmax为fmax对应v值&#xff0c;vmin为fmin对应v值。 L∆fmax/(fmax-fmin) (1) ∆fmaxmax⁡[f(v)-[fmin-K*(v-vmin)]] (2) K(…

BUUCTF之web篇

第一题 [极客大挑战 2019]EasySQL 打开靶机后可以看到这是一个登陆的页面 我们可以尝试两种方式登录 弱口令爆破&#xff08;burpsuite&#xff09; 通过SQL注入里的万能密码来跳过账户和密码验证的过程 这里就需要万能密码aor true # 在这里单引号的作用是结束用户名或者密码…

Vue笔记-element ui中关于table的前端分页

对于 Element UI 表格的前端分页&#xff0c;可以在组件中使用 JavaScript 来实现数据的分页显示&#xff0c;而不必从后端获取已分页的数据。以下是一个简单的示例&#xff0c;演示如何在前端进行 Element UI 表格的分页&#xff1a; <template><div><el-tabl…

Tenda路由器 敏感信息泄露

0x01 产品描述&#xff1a; ‌ Tenda路由器‌是由深圳市吉祥腾达科技有限公司&#xff08;Tenda&#xff09;生产的一系列网络通信产品。Tenda路由器以其高性能、高性价比和广泛的应用场景而闻名&#xff0c;适合家庭、办公室和各种网络环境。0x02 漏洞描述&#xff1a…

助力AI智能化时代:全国产化飞腾FT2000+/64+昇腾310B服务器主板

在信息技术快速发展的今天&#xff0c;服务器作为数据处理和存储的核心设备&#xff0c;肩负着越来越重要的使命。全国产化的服务器主板&#xff0c;采用飞腾FT2000/64核处理器&#xff0c;搭配华为昇腾310的AI芯片&#xff0c;提供卓越的性能与可靠性。 核心配置&#xff0c;强…

SpringMVC学习(3)

目录 一、控制器Controller 二、RESTful风格 2.1 实际应用 三、结果跳转方式 3.1 ModelAndView 3.2 SpringMVC 3.2.1 无需视图解析器 3.2.2 需要视图解析器 3.3 ServletAPI 四、数据处理 4.1 处理提交数据 4.1.1 提交的域名称和处理方法的参数名一致 4.1.2 提交的…

淘宝商品评价API的获取与应用

随着电子商务的飞速发展&#xff0c;商品评价成为消费者做出购买决策的重要依据之一。对于电商平台而言&#xff0c;如何有效地管理和利用这些评价数据&#xff0c;提升用户体验和销售额&#xff0c;成为一个重要课题。淘宝作为国内最大的电商平台之一&#xff0c;其商品评价AP…

背包九讲——分组背包问题

目录 分组背包问题 问题定义 解题算法 问题解法 朴素解法&#xff1a; 一维优化解法 变式题型 背包问题第六讲——分组背包问题 背包问题是一类经典的组合优化问题&#xff0c;通常涉及在限定容量的背包中选择物品&#xff0c;以最大化某种价值或利益。问题的一般描述是…

模型 五遍沟通法(企业管理)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。确保信息准确&#xff0c;促进共识。 1 五遍沟通法的应用 1.1 五遍沟通模型案例&#xff1a;新员工入职培训 一家日本科技公司新招聘了一批员工&#xff0c;人力资源部门需要确保新员工对公司的文化…

学习笔记——路由——IP组播-PIM-DM(密集模式)前言概述

7、PIM-DM(密集模式) (1)前言 PIM-DM(PIM Dense Mode)使用“推(Push)模式”转发组播报文&#xff0c;一般应用于组播组成员规模相对较小、相对密集的网络。 在实现过程中&#xff0c;它会假设网络中的组成员分布非常稠密&#xff0c;每个网段都可能存在组成员。当有活跃的组…

Oracle自动处理表空间不足脚本

关注过我的朋友们应该知道我分享过一些常用的监控脚本&#xff0c;其中最常用的就是监控表空间使用率的脚本&#xff0c;具体可以参考如下链接​&#xff1b; oracle常用监控脚本&#xff08;纯干货&#xff0c;没有EMCC,ZABBIX也不怕&#xff09;_oracle 监控及日常处理脚本-…

Jenkins+maven+git(gogs)自动化构建打包+部署(项目实战)

安装Jenkins所需插件 Maven IntegrationPublish Over SSHGit 系统管理>插件管理>Available plugins。在此安装所需要的插件 全部安装完成 配置Jenkins 系统管理>全局配置 JDK配置 这个jdk的目录是Jenkins容器里面的jdk目录&#xff0c;docker安装一般都是这…

提升网站流量和自然排名的SEO基本知识与策略分析

内容概要 在当今数字化时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;成为加强网站可见度和提升流量的重要工具。SEO的基础知识包括理解搜索引擎的工作原理&#xff0c;以及如何通过优化网站内容和结构来提高自然排名。白帽SEO和黑帽SEO代表了两种截然不同的策略&a…

uniapp开发小程序【简单的实现点击下拉选择性别功能】

一、展示效果 二、代码 <template><view><view class="form_box"><view class="item"