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

Cesium使用primitive添加点线面(贴地)

 // 创建一个图元集合const primitives = viewer.scene.primitives.add(new Cesium.PrimitiveCollection());

1、点上图

 // 定义点的位置(中国不同城市的经纬度)const points = [{ lon: 116.4074, lat: 39.9042, name: "北京" },{ lon: 121.4737, lat: 31.2304, name: "上海" },{ lon: 113.2644, lat: 23.1291, name: "广州" },{ lon: 104.0658, lat: 30.5728, name: "成都" },{ lon: 114.0579, lat: 22.5431, name: "深圳" }];// 创建点集合实例const pointCollection = new Cesium.PointPrimitiveCollection();// 为每个点创建PointPrimitive并添加到集合中points.forEach(point => {pointCollection.add({position: Cesium.Cartesian3.fromDegrees(point.lon, point.lat),pixelSize: 10,color: Cesium.Color.RED,outlineColor: Cesium.Color.WHITE,outlineWidth: 2,label: new Cesium.LabelStyle({text: point.name,font: '14px Inter, sans-serif',fillColor: Cesium.Color.WHITE,backgroundColor: Cesium.Color.BLACK.withAlpha(0.7),backgroundPadding: new Cesium.Cartesian2(5, 5),showBackground: true,verticalOrigin: Cesium.VerticalOrigin.BOTTOM,pixelOffset: new Cesium.Cartesian2(0, -15)})});});// 将点集合添加到图元集合中primitives.add(pointCollection);
  1. 线上图
// 定义一条连接中国几个城市的线(北京-上海-广州-成都-北京)
const linePositions = Cesium.Cartesian3.fromDegreesArray([116.4074, 39.9042,  // 北京121.4737, 31.2304,  // 上海113.2644, 23.1291,  // 广州104.0658, 30.5728,  // 成都116.4074, 39.9042   // 回到北京形成闭环
]);// 创建线实例
const line = new Cesium.Primitive({geometryInstances: new Cesium.GeometryInstance({geometry: new Cesium.PolylineGeometry({positions: linePositions,width: 5,vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT}),attributes: {color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.BLUE)}}),appearance: new Cesium.PerInstanceColorAppearance({flat: true,renderState: {lineWidth: Math.min(5, viewer.scene.maximumAliasedLineWidth)}})
});// 将线添加到图元集合中
primitives.add(line);
  1. 面上图
// 定义一个多边形(以中国部分边界为例)
const polygonPositions = Cesium.Cartesian3.fromDegreesArray([116.4074, 39.9042,  // 北京附近121.4737, 31.2304,  // 上海附近113.2644, 23.1291,  // 广州附近104.0658, 30.5728,  // 成都附近106.5049, 29.5331,  // 重庆附近114.3055, 30.5928,  // 武汉附近116.4074, 39.9042   // 回到北京形成闭环
]);// 创建多边形实例
const polygon = new Cesium.Primitive({geometryInstances: new Cesium.GeometryInstance({geometry: new Cesium.PolygonGeometry({polygonHierarchy: new Cesium.PolygonHierarchy(polygonPositions),vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT}),attributes: {color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.GREEN.withAlpha(0.5))}}),appearance: new Cesium.PerInstanceColorAppearance({translucent: true,flat: true})
});// 将多边形添加到图元集合中
primitives.add(polygon);
  1. 贴地展示方式一
    点贴地显示:为点图元设置了heightReference属性
    线贴地显示:为线图元设置了heightReference属性
    在这里插入图片描述
heightReference: clampToGround ? Cesium.HeightReference.CLAMP_TO_GROUND : Cesium.HeightReference.NONE

面贴地显示:为面图元设置了classificationType属性
在这里插入图片描述

classificationType: Cesium.ClassificationType.TERRAIN
  1. 贴地展示方式一

贴地线:

// 创建贴地线段几何实例
const positions = Cesium.Cartesian3.fromDegreesArray([116.4074, 39.9042,  // 北京121.4737, 31.2304,  // 上海113.2644, 23.1291,  // 广州104.0658, 30.5728,  // 成都116.4074, 39.9042   // 回到北京形成闭环
]);const geometry = new Cesium.GroundPolylineGeometry({positions : positions
});

贴地多边形:

const instance = new Cesium.GeometryInstance({id: "PolygonGeometry",geometry: new Cesium.PolygonGeometry({polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray([116.4074, 39.9042,  // 北京121.4737, 31.2304,  // 上海113.2644, 23.1291,  // 广州104.0658, 30.5728,  // 成都116.4074, 39.9042   // 回到北京形成闭环]))}),
});const primitive = new Cesium.GroundPrimitive({geometryInstances: instance,  //可以是实例数组appearance: new Cesium.MaterialAppearance({material: Cesium.Material.fromType('Color', {color: Cesium.Color.BLUE}),
})

在这里插入图片描述

http://www.lqws.cn/news/78607.html

相关文章:

  • Linux中的mysql备份与恢复
  • 查找和最小的K对数字
  • 软件开发项目管理工具选型及禅道开源版安装
  • 使用 MCP 将代理连接到 Elasticsearch 并对索引进行查询
  • UE5 创建2D角色帧动画学习笔记
  • HealthBench医疗AI评估基准:技术路径与核心价值深度分析(下)
  • 湖北理元理律所:企业债务重组中的“法律缓冲带”设计
  • 设计模式——备忘录设计模式(行为型)
  • 可视化大屏通用模板Axure原型设计案例
  • 谷粒商城-分布式微服务项目-高级篇[三]
  • DeepSeek 赋能车路协同:智能交通的破局与重构
  • Figma 与 Cursor 深度集成的完整解决方案
  • Windows不关防火墙,安全开放端口方法
  • 鸿蒙进阶——Mindspore Lite AI框架源码解读之模型加载详解(二)
  • Java设计模式之观察者模式详解
  • SystemVerilog—new函数的使用和误区
  • 【环境搭建】Java、Python、Nodejs等开发环境搭建
  • Fisher准则例题——给定类内散度矩阵和类样本均值
  • 2506js,活扩控件
  • 企业如何零基础建设网站?
  • 通俗理解“高内聚,低耦合”
  • 解锁 AI 大语言模型的“知识宝藏”:知识库的奥秘与优化之道
  • 项目管理进阶:56页大型IT项目管理实践经验分享【附全文阅读】
  • 学习STC51单片机25(芯片为STC89C52RCRC)
  • ESP32之Linux编译环境搭建流程
  • C++中实现随机数(超详细!​​​​​)
  • web架构2------(nginx多站点配置,include配置文件,日志,basic认证,ssl认证)
  • Spring MVC
  • MATLAB 安装与使用详细教程
  • 网络地址转换