import * as Cesium from 'cesium'; import data2 from '@/assets/images/home/homeRight/data2.png'; import data1 from '@/assets/images/home/homeRight/data1.png'; import { win } from 'codemirror/src/util/dom'; export const getAggregation = () => { // 1️⃣ 创建数据源 const dataSource = new Cesium.CustomDataSource('clusteredData'); // 2️⃣ 启用聚合 dataSource.clustering.enabled = true; dataSource.clustering.pixelRange = 50; // 多少像素范围内的点进行聚合 dataSource.clustering.minimumClusterSize = 3; // 至少 3 个点才聚合 // 3️⃣ 监听聚合事件 dataSource.clustering.clusterEvent.addEventListener((clusteredEntities, cluster) => { if (clusteredEntities.length > 1) { // 这是聚合点 cluster.label.show = true; cluster.label.text = clusteredEntities.length.toString(); // 显示聚合点数量 cluster.billboard.show = true; cluster.billboard.image = data2; // 自定义聚合图标 cluster.billboard.scale = 1.5; } else { // 这是单个点 cluster.label.show = false; cluster.billboard.show = false; } }); // 4️⃣ 添加点数据 for (let i = 0; i < 20; i++) { dataSource.entities.add({ position: Cesium.Cartesian3.fromDegrees( 115.89 + Math.random() * 0.1, 28.68 + Math.random() * 0.1 ), billboard: { image: data1, width: 24, height: 24, }, }); } const viewer = window.$viewer; // 5️⃣ 加载数据源 viewer.dataSources.add(dataSource); viewer.screenSpaceEventHandler.setInputAction(movement => { const pickedObject = viewer.scene.pick(movement.position); if (pickedObject && pickedObject.id) { console.log('点击聚合点,包含以下数据:', pickedObject.id); } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); };