leiting-bim 2.1.133 → 2.1.136

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/leiting-bim.es.js +1 -1
  2. package/leiting-bim.umd.js +10 -10
  3. package/leitingbim.css +1 -1
  4. package/package.json +1 -1
  5. package/plugins/cesium-core/dist/cesium-core.mjs +1505 -1315
  6. package/plugins/cesium-core/dist/cesium-core.mjs.map +1 -1
  7. package/plugins/cesium-core/dist/cesium-core.umd.js +25 -25
  8. package/plugins/cesium-core/dist/cesium-core.umd.js.map +1 -1
  9. package/plugins/cesium-core/dist/components/HtmlOverlayLabelPool.d.ts +36 -0
  10. package/plugins/cesium-core/dist/components/draw/handlers/LineDrawer.d.ts +1 -0
  11. package/plugins/cesium-core/dist/components/draw/handlers/PolygonDrawer.d.ts +1 -0
  12. package/plugins/cesium-core/package.json +1 -1
  13. package/plugins/cesium-vue/dist/HtmlOverlayLabelPool-CbiNlyAM.js +510 -0
  14. package/plugins/cesium-vue/dist/HtmlOverlayLabelPool-CbiNlyAM.js.map +1 -0
  15. package/plugins/cesium-vue/dist/cesium-vue/src/components/marker-bubble/index.d.ts +87 -1
  16. package/plugins/cesium-vue/dist/cesium-vue/src/components/marker-manage/index.d.ts +12 -0
  17. package/plugins/cesium-vue/dist/cesium-vue/src/index.d.ts +3 -2
  18. package/plugins/cesium-vue/dist/components/marker-bubble.js +200 -73
  19. package/plugins/cesium-vue/dist/components/marker-bubble.js.map +1 -1
  20. package/plugins/cesium-vue/dist/components/marker-manage.js +536 -511
  21. package/plugins/cesium-vue/dist/components/marker-manage.js.map +1 -1
  22. package/plugins/cesium-vue/dist/components/measurement.js +1 -1
  23. package/plugins/cesium-vue/dist/index.js +39 -37
  24. package/plugins/cesium-vue/dist/index.js.map +1 -1
  25. package/plugins/cesium-vue/package.json +1 -1
  26. package/plugins/theme-chalk/dist/theme-chalk.css +33 -0
  27. package/plugins/theme-chalk/package.json +1 -1
  28. package/plugins/utils/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"marker-manage.js","sources":["../../src/components/marker-manage/src/type/markerManage.ts","../../../cesium-core/src/components/BufferedHierarchicalAggregator.ts","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isSymbol.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayMap.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseToString.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/identity.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_apply.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_shortOut.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/constant.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSetToString.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setToString.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_overRest.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseRest.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isIterateeCall.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createAssigner.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isKey.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/memoize.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_memoizeCapped.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stringToPath.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toString.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_castPath.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_toKey.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGet.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isFlattenable.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFlatten.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/flatten.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_flatRest.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isPlainObject.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSlice.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createBaseFor.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFor.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assignMergeValue.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArrayLikeObject.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_safeGet.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toPlainObject.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMergeDeep.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMerge.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/last.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_parent.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/merge.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseUnset.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_customOmitClone.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/omit.js","../../../cesium-core/src/components/Material/help/dynamicImgMaterial.ts","../../../cesium-core/src/components/Material/help/PolylineFlowMaterialProperty.ts","../../../cesium-core/src/components/Material/MaterialManager.ts","../../../cesium-core/src/components/entity/EntityLayer.ts","../../src/components/marker-manage/src/core/MarkerManagerCore.ts","../../src/components/marker-manage/src/utils/themeTool.ts","../../src/components/marker-manage/src/core/MarkerManage.ts","../../src/components/marker-manage/src/components/MarkerManage.vue","../../src/components/marker-manage/index.ts"],"sourcesContent":["import { ExtractPropTypes, PropType } from 'vue';\r\nimport type {\r\n AggregatorOptions,\r\n ListenerItem,\r\n MarkerEventKey,\r\n} from '../../../../../../cesium-core/src';\r\n\r\nexport const markerManageProps = {\r\n id: { type: String, default: 'marker' },\r\n Cesium: { type: Object as PropType<any> },\r\n viewer: { type: Object as PropType<any> },\r\n aggregatorOptions: { type: Object as PropType<AggregatorOptions> },\r\n tagListeningOptions: {\r\n type: Array as PropType<\r\n Array<{\r\n key: MarkerEventKey;\r\n ListenerItem: ListenerItem;\r\n overwrite?: boolean;\r\n }>\r\n >,\r\n },\r\n themeConfig: { type: Object as PropType<any> }, // Optional override\r\n} as const;\r\n\r\nexport type MarkerManageProps = ExtractPropTypes<typeof markerManageProps>;\r\nexport interface MarkerManageOptions {\r\n Cesium: any;\r\n viewer: any;\r\n aggregatorOptions: AggregatorOptions;\r\n tagListeningOptions?: Array<{\r\n key: MarkerEventKey;\r\n ListenerItem: ListenerItem;\r\n overwrite?: boolean;\r\n }>;\r\n [key: string]: any; // Allow extra properties like MaterialManager\r\n}\r\n\r\nexport interface MarkerManageMethods {\r\n init: (options: MarkerManageOptions) => any;\r\n set: (list: any) => void;\r\n add: (data: any) => void;\r\n update: (data: any[], immediately?: boolean) => void;\r\n getById: (id: string) => any;\r\n getOptions: () => Promise<any>;\r\n delete: (data: string[] | string) => void;\r\n setMarkerAggregationEnabled: (enabled: boolean, count?: number) => void;\r\n setDebugCurrentGridsEnabled: (enabled: boolean) => void;\r\n initThemes: (data: any) => void; // Added initThemes to methods\r\n}\r\n\r\nexport interface ThemeInterface {\r\n data: {\r\n theme: string;\r\n lineType?: string;\r\n polygonType?: string;\r\n wallType?: string;\r\n [key: string]: any;\r\n };\r\n options?: any;\r\n img?: string;\r\n material?: any;\r\n comType?: number;\r\n [key: string]: any;\r\n}\r\nexport type RegisterFn = (instance: MarkerManageMethods) => void;\r\nexport type UseCesiumReturnType = [RegisterFn, MarkerManageMethods];\r\n\r\nexport enum ReportListenerKey {\r\n 左建选中模型 = 'MODEL_LEFT_CLICK',\r\n 标记左键点击 = 'TAG_LEFT_CLICK',\r\n 标记移入 = 'TAG_MOUSEENTER',\r\n 标记移出 = 'TAG_MOUSELEAVE',\r\n 模型位置保存 = 'SAVE_REGION',\r\n 模型加载完成 = 'MODEL_READY',\r\n}\r\n","import { HtmlOverlayLabelPool } from './HtmlOverlayLabelPool';\r\n\r\ninterface PointData {\r\n id: string;\r\n lon: number;\r\n lat: number;\r\n height: number;\r\n name: string;\r\n data: {\r\n [key: string]: any;\r\n };\r\n // 预计算后的地图层级区间(用于提高 _update 性能)\r\n __minLevel?: number;\r\n __maxLevel?: number;\r\n [key: string]: any;\r\n}\r\n\r\n\r\ninterface GridCell {\r\n allPoints: PointData[];\r\n groups: Map<string, PointData[]>;\r\n skipPoints: PointData[];\r\n}\r\n\r\ninterface AggregatorOptions {\r\n labelPool: HtmlOverlayLabelPool;\r\n threshold?: number;\r\n displayLimit?: number;\r\n maxLevel?: number;\r\n debugCurrentGrids?: boolean;\r\n clusterTheme?: string;\r\n pointTheme?: string;\r\n centralPointMode?: string;\r\n minGlobalPointCount?: number;\r\n groupByTheme?: boolean;\r\n // terrain 开启时,用于“向下矫正”格网层级的补偿值,例如 2 表示整体提升 2 级\r\n terrainLevelOffset?: number;\r\n}\r\n\r\n\r\ninterface GridLevel {\r\n level: number;\r\n size: number;\r\n minViewWidth: number;\r\n}\r\n\r\nexport { PointData, GridLevel, AggregatorOptions };\r\n\r\nexport class BufferedHierarchicalAggregator {\r\n private Cesium: any;\r\n private viewer: any;\r\n labelPool: HtmlOverlayLabelPool;\r\n private threshold: number;\r\n private displayLimit: number;\r\n private maxLevel: number;\r\n private debugCurrentGrids: boolean;\r\n private levels: GridLevel[];\r\n private points: PointData[] = [];\r\n private gridLayers: Map<number, Map<string, GridCell>> = new Map();\r\n private debugGrids: any[] = [];\r\n private _updateFn: () => void;\r\n private clusterTheme: string;\r\n private pointTheme: string;\r\n private centralPointMode: string;\r\n private minGlobalPointCount: number;\r\n private groupByTheme: boolean;\r\n private tilingScheme: any;\r\n private terrainLevelOffset: number;\r\n private debugTileCoordLayer: any | null = null;\r\n\r\n private levelIndexByTileLevel: Map<number, number> = new Map();\r\n\r\n private _lastTileProvider: any = null;\r\n private _updateTimer: number | null = null;\r\n private _updateDelay: number = 100;\r\n private _tilesRetryCount: number = 0;\r\n private _tilesRetryMax: number = 100;\r\n private _cameraDirty: boolean = false;\r\n private _tileLoadListener: ((pending: number) => void) | null = null;\r\n private _cameraChangedHandler: (() => void) | null = null;\r\n // 默认显示的地图层级区间(兼容旧数据)\r\n private defaultMinLevel: number = 0;\r\n private defaultMaxLevel: number = 28;\r\n // 单次从视图层级向下细分到聚合层级时,最多细分的层级数\r\n private maxRefineLevels: number = 2;\r\n\r\n constructor(Cesium: any, viewer: any, options: AggregatorOptions) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n\r\n this.labelPool = options.labelPool;\r\n this.threshold = options.threshold ?? 10;\r\n this.displayLimit = options.displayLimit ?? 100;\r\n this.maxLevel = options.maxLevel ?? 5;\r\n this.debugCurrentGrids = options.debugCurrentGrids ?? false;\r\n\r\n this.clusterTheme = options.clusterTheme ?? 'cluster-label';\r\n this.pointTheme = options.pointTheme ?? 'point-label';\r\n this.centralPointMode = options.centralPointMode ?? 'central';\r\n this.minGlobalPointCount = options.minGlobalPointCount ?? 0;\r\n this.groupByTheme = options.groupByTheme ?? false;\r\n this.terrainLevelOffset = options.terrainLevelOffset ?? 2;\r\n\r\n const globe = this.viewer.scene && this.viewer.scene.globe;\r\n const surface = globe && (globe as any)._surface;\r\n const provider = surface && (surface as any)._tileProvider;\r\n const tilingScheme =\r\n provider?.tilingScheme || new this.Cesium.GeographicTilingScheme();\r\n this._lastTileProvider = provider;\r\n this.tilingScheme = tilingScheme;\r\n this.levels = this._createLevels();\r\n this._buildLevels();\r\n\r\n this._updateFn = this._update.bind(this);\r\n\r\n // 如果一开始就开启了 debug,初始化时也同步创建坐标网格图层\r\n if (this.debugCurrentGrids) {\r\n this._ensureDebugImageryLayer();\r\n }\r\n\r\n if (globe) {\r\n\r\n this._tileLoadListener = (pending: number) => {\r\n if (pending === 0 && this._cameraDirty) {\r\n this._cameraDirty = false;\r\n this._scheduleUpdate();\r\n }\r\n };\r\n (globe as any).tileLoadProgressEvent.addEventListener(this._tileLoadListener);\r\n }\r\n\r\n this._cameraChangedHandler = () => {\r\n // const currentScene = this.viewer.scene;\r\n // const currentGlobe = currentScene && currentScene.globe;\r\n // if (!currentGlobe) {\r\n this._update();\r\n // return;\r\n // }\r\n\r\n // this._cameraDirty = true;\r\n\r\n // if ((currentGlobe as any).tilesLoaded) {\r\n // this._cameraDirty = false;\r\n // this._update();\r\n // }\r\n };\r\n\r\n this.viewer.camera.changed.addEventListener(this._cameraChangedHandler);\r\n }\r\n\r\n public setGroupByTheme(groupByTheme: boolean, rebuild: boolean = true, update: boolean = true) {\r\n if (this.groupByTheme === groupByTheme) {\r\n if (update) this._update();\r\n return;\r\n }\r\n this.groupByTheme = groupByTheme;\r\n if (rebuild) {\r\n this._buildLevels();\r\n }\r\n if (update) {\r\n this._update();\r\n }\r\n }\r\n\r\n public setMinGlobalPointCount(count: number, update: boolean = true) {\r\n this.minGlobalPointCount = count;\r\n if (update) {\r\n this._update();\r\n }\r\n }\r\n\r\n public setThreshold(threshold: number, update: boolean = true) {\r\n this.threshold = threshold;\r\n if (update) {\r\n this._update();\r\n }\r\n }\r\n\r\n public setDebugCurrentGrids(debug: boolean, update: boolean = true) {\r\n this.debugCurrentGrids = debug;\r\n\r\n if (debug) {\r\n this._ensureDebugImageryLayer();\r\n } else {\r\n this._clearDebugGrids();\r\n this._removeDebugImageryLayer();\r\n }\r\n\r\n if (update) {\r\n this._update();\r\n }\r\n }\r\n\r\n\r\n private _syncTilingSchemeAndLevels() {\r\n const globe = this.viewer.scene && this.viewer.scene.globe;\r\n const surface = globe && (globe as any)._surface;\r\n const provider = surface && (surface as any)._tileProvider;\r\n const tilingScheme =\r\n provider?.tilingScheme || new this.Cesium.GeographicTilingScheme();\r\n const providerChanged = provider !== this._lastTileProvider;\r\n const schemeChanged = this.tilingScheme !== tilingScheme;\r\n if (!providerChanged && !schemeChanged && this.levels && this.levels.length > 0) {\r\n return;\r\n }\r\n this._lastTileProvider = provider;\r\n this.tilingScheme = tilingScheme;\r\n this.levels = this._createLevels();\r\n this._buildLevels();\r\n\r\n // 如果当前处于 debug 模式,需要让 TileCoordinatesImageryProvider\r\n // 使用最新的 tilingScheme,保证与聚合格网完全对齐\r\n if (this.debugCurrentGrids) {\r\n this._removeDebugImageryLayer();\r\n this._ensureDebugImageryLayer();\r\n }\r\n }\r\n\r\n\r\n private _createLevels(): GridLevel[] {\r\n const levels: GridLevel[] = [];\r\n this.levelIndexByTileLevel = new Map();\r\n\r\n const minLevel = 0;\r\n const maxLevel = this.maxLevel;\r\n\r\n let index = 0;\r\n for (let tileLevel = minLevel; tileLevel <= maxLevel; tileLevel++, index++) {\r\n const size = 360 / Math.pow(2, tileLevel);\r\n levels.push({\r\n level: tileLevel,\r\n size,\r\n minViewWidth: size * 4,\r\n });\r\n this.levelIndexByTileLevel.set(tileLevel, index);\r\n }\r\n return levels;\r\n }\r\n\r\n public addPoints(points: PointData[]) {\r\n this.points = points;\r\n this._buildLevels();\r\n }\r\n\r\n public appendPoints(newPoints: PointData[], isUpdate: boolean = true) {\r\n for (const pt of newPoints) {\r\n this._preparePointLevelRange(pt);\r\n this.points.push(pt);\r\n }\r\n for (const pt of newPoints) {\r\n this._addPointToGrid(pt);\r\n }\r\n if (isUpdate) {\r\n this._scheduleUpdate();\r\n }\r\n }\r\n\r\n\r\n private _scheduleUpdate() {\r\n if (this._updateTimer !== null) {\r\n clearTimeout(this._updateTimer);\r\n }\r\n this._updateTimer = window.setTimeout(() => {\r\n this._update();\r\n this._cameraDirty=true\r\n this._updateTimer = null;\r\n }, this._updateDelay);\r\n }\r\n\r\n public updatePoint(newData: Partial<PointData>) {\r\n const idx = this.points.findIndex((p: PointData) => p.id === newData.id);\r\n if (idx === -1) return;\r\n\r\n const oldPt = this.points[idx];\r\n\r\n for (const level of this.levels) {\r\n const tileLevel = level.level;\r\n const grid = this.gridLayers.get(tileLevel);\r\n if (!grid) continue;\r\n\r\n const carto = this.Cesium.Cartographic.fromDegrees(oldPt.lon, oldPt.lat);\r\n const tileXY = this.tilingScheme.positionToTileXY(\r\n carto,\r\n tileLevel,\r\n new this.Cesium.Cartesian2(),\r\n );\r\n if (!tileXY) continue;\r\n const key = `${tileXY.x}_${tileXY.y}`;\r\n const cell = grid.get(key);\r\n if (cell) {\r\n // 1. remove from allPoints\r\n const iAll = cell.allPoints.findIndex((p: PointData) => p.id === newData.id);\r\n if (iAll !== -1) cell.allPoints.splice(iAll, 1);\r\n\r\n // 2. remove from skipPoints or groups\r\n if (oldPt.data?.billboard?.[0]?.skipAggregation) {\r\n const iSkip = cell.skipPoints.findIndex((p: PointData) => p.id === newData.id);\r\n if (iSkip !== -1) cell.skipPoints.splice(iSkip, 1);\r\n } else {\r\n const theme = this.groupByTheme ? oldPt.data?.theme : this.clusterTheme;\r\n const group = cell.groups.get(theme);\r\n if (group) {\r\n const iGroup = group.findIndex((p: PointData) => p.id === newData.id);\r\n if (iGroup !== -1) group.splice(iGroup, 1);\r\n if (group.length === 0) cell.groups.delete(theme);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 替换数据\r\n const updated = { ...oldPt, ...newData };\r\n this.points[idx] = updated;\r\n\r\n // 加入新 grid\r\n this._addPointToGrid(updated);\r\n this._update();\r\n }\r\n\r\n public removePointsById(ids: string[]) {\r\n const idSet = new Set(ids);\r\n this.points = this.points.filter((p: PointData) => !idSet.has(p.id));\r\n\r\n for (const level of this.levels) {\r\n const grid = this.gridLayers.get(level.level);\r\n if (!grid) continue;\r\n for (const [key, cell] of grid.entries()) {\r\n // Filter allPoints\r\n cell.allPoints = cell.allPoints.filter((p: PointData) => !idSet.has(p.id));\r\n\r\n // Filter skipPoints\r\n cell.skipPoints = cell.skipPoints.filter((p: PointData) => !idSet.has(p.id));\r\n\r\n // Filter groups\r\n for (const [groupKey, groupPoints] of cell.groups.entries()) {\r\n const filteredGroup = groupPoints.filter((p: PointData) => !idSet.has(p.id));\r\n if (filteredGroup.length === 0) {\r\n cell.groups.delete(groupKey);\r\n } else {\r\n cell.groups.set(groupKey, filteredGroup);\r\n }\r\n }\r\n\r\n // Cleanup empty cell if needed (optional)\r\n if (cell.allPoints.length === 0) {\r\n grid.delete(key);\r\n }\r\n }\r\n }\r\n this._update();\r\n }\r\n\r\n private _buildLevels() {\r\n this.gridLayers.clear();\r\n for (const level of this.levels) {\r\n this.gridLayers.set(level.level, new Map<string, GridCell>());\r\n }\r\n for (const pt of this.points) {\r\n this._addPointToGrid(pt);\r\n }\r\n }\r\n\r\n private _addPointToGrid(pt: PointData) {\r\n for (const level of this.levels) {\r\n const tileLevel = level.level;\r\n const grid = this.gridLayers.get(tileLevel);\r\n if (!grid) continue;\r\n\r\n const carto = this.Cesium.Cartographic.fromDegrees(pt.lon, pt.lat);\r\n const tileXY = this.tilingScheme.positionToTileXY(\r\n carto,\r\n tileLevel,\r\n new this.Cesium.Cartesian2(),\r\n );\r\n if (!tileXY) continue;\r\n const key = `${tileXY.x}_${tileXY.y}`;\r\n\r\n let cell = grid.get(key);\r\n if (!cell) {\r\n cell = {\r\n allPoints: [],\r\n groups: new Map(),\r\n skipPoints: [],\r\n };\r\n grid.set(key, cell);\r\n }\r\n\r\n cell.allPoints.push(pt);\r\n\r\n if (pt.data?.billboard?.[0]?.skipAggregation) {\r\n cell.skipPoints.push(pt);\r\n } else {\r\n const theme = this.groupByTheme ? pt.data?.billboard?.[0]?.theme : this.clusterTheme;\r\n if (!cell.groups.has(theme)) {\r\n cell.groups.set(theme, []);\r\n }\r\n cell.groups.get(theme)!.push(pt);\r\n }\r\n }\r\n }\r\n\r\n // 在添加/更新点时预计算并缓存地图层级区间\r\n private _preparePointLevelRange(p: PointData) {\r\n const data: any = p.data || {};\r\n let min: number | null | undefined = data.minLevel;\r\n let max: number | null | undefined = data.maxLevel;\r\n\r\n // 兼容可能的 levelRange 结构\r\n const range: any = data.levelRange;\r\n if (Array.isArray(range)) {\r\n if (range.length > 0 && (min === undefined || min === null)) min = range[0];\r\n if (range.length > 1 && (max === undefined || max === null)) max = range[1];\r\n } else if (range && typeof range === 'object') {\r\n if ((min === undefined || min === null) && typeof range.min === 'number') min = range.min;\r\n if ((max === undefined || max === null) && typeof range.max === 'number') max = range.max;\r\n }\r\n\r\n const effectiveMin =\r\n min === undefined || min === null ? this.defaultMinLevel : Number(min) || this.defaultMinLevel;\r\n const effectiveMax =\r\n max === undefined || max === null ? this.defaultMaxLevel : Number(max) || this.defaultMaxLevel;\r\n\r\n p.__minLevel = effectiveMin;\r\n p.__maxLevel = effectiveMax;\r\n }\r\n\r\n private _isVisibleAtLevel(p: PointData, currentLevel: number | null): boolean {\r\n if (currentLevel == null) return true;\r\n // 兜底:如果还没有预计算,按需补一次,避免旧调用路径漏掉\r\n if (p.__minLevel === undefined || p.__maxLevel === undefined) {\r\n this._preparePointLevelRange(p);\r\n }\r\n const min = p.__minLevel ?? this.defaultMinLevel;\r\n const max = p.__maxLevel ?? this.defaultMaxLevel;\r\n return currentLevel >= min && currentLevel <= max;\r\n }\r\n\r\n\r\n private _update() {\r\n if (!this.labelPool) return;\r\n this._syncTilingSchemeAndLevels();\r\n this.labelPool.reset();\r\n\r\n if (this.debugCurrentGrids) this._clearDebugGrids();\r\n\r\n const effectiveThreshold =\r\n this.points.length < this.minGlobalPointCount ? Infinity : this.threshold;\r\n\r\n let labelCount = 0;\r\n\r\n const processCell = (\r\n levelIdx: number,\r\n lonIdx: number,\r\n latIdx: number,\r\n viewTileLevel: number | null,\r\n ) => {\r\n labelCount = this._processCell(\r\n levelIdx,\r\n lonIdx,\r\n latIdx,\r\n viewTileLevel,\r\n effectiveThreshold,\r\n labelCount,\r\n );\r\n };\r\n\r\n try {\r\n const tiles = this._getSurfaceTiles();\r\n if (!tiles || tiles.length === 0) {\r\n this._handleNoSurfaceTiles(labelCount);\r\n return;\r\n }\r\n this._tilesRetryCount = 0;\r\n this._processTiles(tiles, processCell);\r\n } catch (e) {\r\n this.labelPool.cleanup();\r\n return;\r\n }\r\n this.labelPool.cleanup();\r\n }\r\n\r\n private _getSurfaceTiles(): any[] | undefined {\r\n const globe = this.viewer.scene && this.viewer.scene.globe;\r\n const surface = globe && (globe as any)._surface;\r\n if (!surface) return undefined;\r\n return (\r\n (surface as any)._tilesToRender || (surface as any)._tilesToRenderByTextureCount\r\n );\r\n }\r\n\r\n private _handleNoSurfaceTiles(labelCount: number) {\r\n for (const p of this.points) {\r\n if (labelCount >= this.displayLimit) break;\r\n if (p.data?.show === false) continue;\r\n this.labelPool.add(p.data, {\r\n id: `point-${p.id}`,\r\n lon: p.lon,\r\n lat: p.lat,\r\n height: p.height,\r\n theme: p.data?.billboard?.[0]?.theme || this.pointTheme,\r\n style: (p as any).style,\r\n });\r\n labelCount++;\r\n }\r\n this.labelPool.cleanup();\r\n if (this.points.length > 0 && this._tilesRetryCount < this._tilesRetryMax) {\r\n this._tilesRetryCount++;\r\n this._scheduleUpdate();\r\n }\r\n }\r\n\r\n private _resolveLevelIndex(tileLevel: number): number | undefined {\r\n let levelIdx = this.levelIndexByTileLevel.get(tileLevel);\r\n if (levelIdx !== undefined) return levelIdx;\r\n if (this.levels.length === 0) return undefined;\r\n\r\n const minDefinedLevel = this.levels[0].level;\r\n const maxDefinedLevel = this.levels[this.levels.length - 1].level;\r\n if (tileLevel > maxDefinedLevel) {\r\n return this.levels.length - 1;\r\n }\r\n if (tileLevel < minDefinedLevel) {\r\n return 0;\r\n }\r\n\r\n let nearestIndex = 0;\r\n let minDiff = Infinity;\r\n for (let i = 0; i < this.levels.length; i++) {\r\n const diff = Math.abs(this.levels[i].level - tileLevel);\r\n if (diff < minDiff) {\r\n minDiff = diff;\r\n nearestIndex = i;\r\n }\r\n }\r\n return nearestIndex;\r\n }\r\n\r\n private _isTerrainEnabled(): boolean {\r\n // 根据 TerrainManage 的实现,如果使用的是 EllipsoidTerrainProvider,\r\n // 认为「未开启地形」,否则视为开启了地形。\r\n const viewerTerrain = (this.viewer as any).terrainProvider;\r\n const scene = this.viewer.scene;\r\n const globe = scene && scene.globe;\r\n const globeTerrain = globe && (globe as any).terrainProvider;\r\n const terrainProvider = viewerTerrain || globeTerrain;\r\n\r\n if (!terrainProvider) return false;\r\n return !(terrainProvider instanceof this.Cesium.EllipsoidTerrainProvider);\r\n }\r\n\r\n\r\n private _getGridRefLevel(tileLevel: number): number {\r\n let level = tileLevel;\r\n if (this._isTerrainEnabled()) {\r\n level += this.terrainLevelOffset;\r\n }\r\n if (this.levels.length > 0) {\r\n const maxDefinedLevel = this.levels[this.levels.length - 1].level;\r\n if (level > maxDefinedLevel) level = maxDefinedLevel;\r\n }\r\n return level;\r\n }\r\n\r\n private _processTiles(\r\n tiles: any[],\r\n processCell: (\r\n levelIdx: number,\r\n lonIdx: number,\r\n latIdx: number,\r\n viewTileLevel: number | null,\r\n ) => void,\r\n ) {\r\n const visited = new Set<string>();\r\n\r\n // 预先计算当前相机视口对应的椭球矩形,用于在向下细分时过滤视口外的子格网\r\n const scene = this.viewer.scene;\r\n const globe = scene && scene.globe;\r\n const ellipsoid = globe && globe.ellipsoid;\r\n const viewRectangle =\r\n ellipsoid && scene.camera.computeViewRectangle(ellipsoid);\r\n\r\n const isCellInView = (x: number, y: number, level: number): boolean => {\r\n if (!viewRectangle) return true;\r\n const cellRect = this.tilingScheme.tileXYToRectangle(x, y, level);\r\n if (!cellRect) return false;\r\n // 简单的经纬度矩形相交判断(不考虑跨日期变更线的极端情况)\r\n if (cellRect.east <= viewRectangle.west) return false;\r\n if (cellRect.west >= viewRectangle.east) return false;\r\n if (cellRect.north <= viewRectangle.south) return false;\r\n if (cellRect.south >= viewRectangle.north) return false;\r\n return true;\r\n };\r\n\r\n for (const t of tiles) {\r\n const rect = t.rectangle;\r\n const tileLevel = t._level ?? t.level;\r\n if (!rect || typeof tileLevel !== 'number') continue;\r\n\r\n // gridRefLevel 为“用于选择聚合格网层级”的参考层级:\r\n // - 未开地形时 == tileLevel\r\n // - 开启地形时在 tileLevel 基础上整体提升 terrainLevelOffset 级,\r\n // 并且不超过预设的最大格网层级\r\n const gridRefLevel = this._getGridRefLevel(tileLevel);\r\n\r\n const levelIdx = this._resolveLevelIndex(gridRefLevel);\r\n if (levelIdx === undefined) continue;\r\n const targetTileLevel = this.levels[levelIdx].level;\r\n\r\n\r\n const tileX = (t as any)._x ?? (t as any).x;\r\n const tileY = (t as any)._y ?? (t as any).y;\r\n\r\n if (typeof tileX === 'number' && typeof tileY === 'number') {\r\n const levelDelta = tileLevel - targetTileLevel;\r\n\r\n // 注意:levelDelta 仅表示两个层级之间的“差值”,用于将当前渲染 tile\r\n // 映射到聚合格网层级;与是否开启地形无关,不能作为 terrain 特判条件。\r\n if (levelDelta >= 0) {\r\n // 视图层级比聚合层级细或相等:把多个视图 tile 合并到父格网\r\n const factor = 1 << levelDelta;\r\n const parentX = Math.floor(tileX / factor);\r\n const parentY = Math.floor(tileY / factor);\r\n const key = `${targetTileLevel}_${parentX}_${parentY}`;\r\n if (visited.has(key)) continue;\r\n visited.add(key);\r\n processCell(levelIdx, parentX, parentY, tileLevel);\r\n } else {\r\n // 视图层级比聚合层级粗:按照四叉树向下细分若干层;\r\n // 这里对向下细分的层级数做一个上限(this.maxRefineLevels),\r\n // 避免 level 差过大时一次性生成过多子格网。\r\n const refineLevels = Math.min(-levelDelta, this.maxRefineLevels);\r\n const factor = 1 << refineLevels; // 每个方向细分倍数\r\n const startX = tileX * factor;\r\n const startY = tileY * factor;\r\n\r\n for (let dx = 0; dx < factor; dx++) {\r\n for (let dy = 0; dy < factor; dy++) {\r\n const childX = startX + dx;\r\n const childY = startY + dy;\r\n // 只处理与当前视口有交集的子格网\r\n if (!isCellInView(childX, childY, targetTileLevel)) continue;\r\n const key = `${targetTileLevel}_${childX}_${childY}`;\r\n if (visited.has(key)) continue;\r\n visited.add(key);\r\n processCell(levelIdx, childX, childY, tileLevel);\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n continue;\r\n }\r\n\r\n const level = this.levels[levelIdx];\r\n const size = level.size;\r\n const tileWestDeg = this.Cesium.Math.toDegrees(rect.west);\r\n const tileEastDeg = this.Cesium.Math.toDegrees(rect.east);\r\n const tileSouthDeg = this.Cesium.Math.toDegrees(rect.south);\r\n const tileNorthDeg = this.Cesium.Math.toDegrees(rect.north);\r\n\r\n const westIdx = Math.floor((tileWestDeg - -180) / size);\r\n const eastIdx = Math.floor((tileEastDeg - -180) / size);\r\n const southIdx = Math.floor((tileSouthDeg - -90) / size);\r\n const northIdx = Math.floor((tileNorthDeg - -90) / size);\r\n\r\n for (let lonIdx = westIdx; lonIdx <= eastIdx; lonIdx++) {\r\n for (let latIdx = southIdx; latIdx <= northIdx; latIdx++) {\r\n // 只处理与当前视口有交集的格网\r\n if (!isCellInView(lonIdx, latIdx, targetTileLevel)) continue;\r\n const key = `${targetTileLevel}_${lonIdx}_${latIdx}`;\r\n if (visited.has(key)) continue;\r\n visited.add(key);\r\n processCell(levelIdx, lonIdx, latIdx, tileLevel);\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n private _processCell(\r\n levelIdx: number,\r\n lonIdx: number,\r\n latIdx: number,\r\n viewTileLevel: number | null,\r\n effectiveThreshold: number,\r\n labelCount: number,\r\n ): number {\r\n if (labelCount >= this.displayLimit) return labelCount;\r\n if (levelIdx < 0) return labelCount;\r\n // 当超过最大层级时,强制使用最大层级\r\n if (levelIdx >= this.levels.length) {\r\n levelIdx = this.levels.length - 1;\r\n }\r\n\r\n const context = this._getCellContext(levelIdx, lonIdx, latIdx, viewTileLevel);\r\n if (!context) return labelCount;\r\n\r\n labelCount = this._processCellSkipPoints(context, labelCount);\r\n if (labelCount >= this.displayLimit) {\r\n this._debugDrawCell(context);\r\n return labelCount;\r\n }\r\n\r\n labelCount = this._processCellGroups(context, effectiveThreshold, labelCount);\r\n this._debugDrawCell(context);\r\n\r\n return labelCount;\r\n }\r\n\r\n private _getCellContext(\r\n levelIdx: number,\r\n lonIdx: number,\r\n latIdx: number,\r\n viewTileLevel: number | null,\r\n ) {\r\n const level = this.levels[levelIdx];\r\n const tileLevel = level.level;\r\n const grid = this.gridLayers.get(tileLevel);\r\n if (!grid) return null;\r\n\r\n const key = `${lonIdx}_${latIdx}`;\r\n const cell = grid.get(key);\r\n if (!cell) return null;\r\n\r\n const rect = this.tilingScheme.tileXYToRectangle(lonIdx, latIdx, tileLevel);\r\n const west = this.Cesium.Math.toDegrees(rect.west);\r\n const south = this.Cesium.Math.toDegrees(rect.south);\r\n const east = this.Cesium.Math.toDegrees(rect.east);\r\n const north = this.Cesium.Math.toDegrees(rect.north);\r\n const centerLon = (west + east) / 2;\r\n const centerLat = (south + north) / 2;\r\n\r\n return {\r\n levelIdx,\r\n tileLevel,\r\n lonIdx,\r\n latIdx,\r\n key,\r\n cell,\r\n rect,\r\n west,\r\n south,\r\n east,\r\n north,\r\n centerLon,\r\n centerLat,\r\n viewTileLevel,\r\n };\r\n }\r\n\r\n private _processCellSkipPoints(context: any, labelCount: number): number {\r\n const { cell, viewTileLevel } = context;\r\n const currentLevel = viewTileLevel;\r\n\r\n for (const p of cell.skipPoints) {\r\n if (p.data?.show === false) continue;\r\n if (labelCount >= this.displayLimit) break;\r\n if (!this._isVisibleAtLevel(p, currentLevel)) continue;\r\n this.labelPool.add(p.data, {\r\n id: `point-${p.id}`,\r\n lon: p.lon,\r\n lat: p.lat,\r\n height: p.height,\r\n theme: p.data?.billboard?.[0]?.theme || this.pointTheme,\r\n style: p.style,\r\n });\r\n labelCount++;\r\n }\r\n\r\n return labelCount;\r\n }\r\n\r\n private _processCellGroups(\r\n context: any,\r\n effectiveThreshold: number,\r\n labelCount: number,\r\n ): number {\r\n const {\r\n levelIdx,\r\n lonIdx,\r\n latIdx,\r\n cell,\r\n centerLon,\r\n centerLat,\r\n viewTileLevel,\r\n } = context;\r\n const currentLevel = viewTileLevel;\r\n\r\n for (const [groupKey, rawGroupPoints] of cell.groups) {\r\n const groupPoints = rawGroupPoints.filter((p: PointData) => p.data?.show !== false);\r\n if (groupPoints.length === 0) continue;\r\n\r\n let clusterLon = centerLon;\r\n let clusterLat = centerLat;\r\n let clusterHeight = groupPoints[0]?.height || 0;\r\n if (this.centralPointMode == 'firstPoint') {\r\n clusterLon = groupPoints[0]?.lon || 0;\r\n clusterLat = groupPoints[0]?.lat || 0;\r\n clusterHeight = groupPoints[0]?.height || 0;\r\n }\r\n\r\n const isLastLevel = levelIdx === this.levels.length - 1;\r\n\r\n if (isLastLevel || groupPoints.length < effectiveThreshold) {\r\n for (const p of groupPoints) {\r\n if (labelCount >= this.displayLimit) break;\r\n if (!this._isVisibleAtLevel(p, currentLevel)) continue;\r\n this.labelPool.add(p.data, {\r\n id: `point-${p.id}`,\r\n lon: p.lon,\r\n lat: p.lat,\r\n height: p.height,\r\n theme: p.data?.billboard?.[0]?.theme || this.pointTheme,\r\n style: p.style,\r\n });\r\n labelCount++;\r\n }\r\n } else {\r\n if (labelCount >= this.displayLimit) {\r\n return labelCount;\r\n }\r\n\r\n const visiblePoints =\r\n currentLevel == null\r\n ? groupPoints\r\n : groupPoints.filter((p: PointData) => this._isVisibleAtLevel(p, currentLevel));\r\n\r\n if (!visiblePoints.length) return labelCount;\r\n\r\n const customClusterTheme = visiblePoints[0]?.data?.billboard?.[0]?.theme;\r\n const finalTheme = customClusterTheme || this.clusterTheme;\r\n const clusterId = this.groupByTheme\r\n ? `cluster-${levelIdx}-${lonIdx}-${latIdx}-${groupKey}`\r\n : `cluster-${levelIdx}-${lonIdx}-${latIdx}`;\r\n this.labelPool.add(\r\n {\r\n id: clusterId,\r\n billboard: visiblePoints[0]?.data?.billboard || [],\r\n count: visiblePoints.length,\r\n gridKey: `${lonIdx}_${latIdx}`,\r\n points: visiblePoints,\r\n aggregationGroup: groupKey,\r\n },\r\n {\r\n id: clusterId,\r\n lon: clusterLon,\r\n lat: clusterLat,\r\n height: clusterHeight,\r\n theme: finalTheme,\r\n },\r\n );\r\n labelCount++;\r\n }\r\n }\r\n\r\n return labelCount;\r\n }\r\n\r\n private _debugDrawCell(context: any) {\r\n if (!this.debugCurrentGrids) return;\r\n const { levelIdx, west, south, east, north, lonIdx, latIdx } = context;\r\n const tileLevelForDebug = this.levels[levelIdx].level;\r\n this._drawDebugGrid(\r\n west,\r\n south,\r\n east,\r\n north,\r\n `L:${tileLevelForDebug} X:${lonIdx} Y:${latIdx}`,\r\n );\r\n }\r\n\r\n refresh() {\r\n this._update();\r\n }\r\n\r\n private _drawDebugGrid(\r\n west: number,\r\n south: number,\r\n east: number,\r\n north: number,\r\n text: string,\r\n ) {\r\n const rect = this.Cesium.Rectangle.fromDegrees(west, south, east, north);\r\n const positions = this.Cesium.Cartesian3.fromDegreesArray([\r\n west,\r\n south,\r\n east,\r\n south,\r\n east,\r\n north,\r\n west,\r\n north,\r\n west,\r\n south,\r\n ]);\r\n const entity = this.viewer.entities.add({\r\n rectangle: {\r\n coordinates: rect,\r\n material: this.Cesium.Color.YELLOW.withAlpha(0.2),\r\n outline: true,\r\n outlineColor: this.Cesium.Color.RED,\r\n // 贴地绘制调试网格\r\n heightReference: this.Cesium.HeightReference.CLAMP_TO_GROUND,\r\n classificationType: this.Cesium.ClassificationType.TERRAIN,\r\n },\r\n // 额外一圈贴地边框线,避免依赖 rectangle.outline\r\n polyline: {\r\n positions,\r\n width: 2,\r\n material: this.Cesium.Color.RED,\r\n clampToGround: true,\r\n },\r\n label: {\r\n text,\r\n font: '14px sans-serif',\r\n fillColor: this.Cesium.Color.BLACK,\r\n outlineColor: this.Cesium.Color.WHITE,\r\n outlineWidth: 2,\r\n style: this.Cesium.LabelStyle.FILL_AND_OUTLINE,\r\n verticalOrigin: this.Cesium.VerticalOrigin.CENTER,\r\n horizontalOrigin: this.Cesium.HorizontalOrigin.CENTER,\r\n },\r\n });\r\n this.debugGrids.push(entity);\r\n }\r\n\r\n private _clearDebugGrids() {\r\n for (const e of this.debugGrids) {\r\n this.viewer.entities.remove(e);\r\n }\r\n this.debugGrids = [];\r\n }\r\n\r\n private _ensureDebugImageryLayer() {\r\n if (this.debugTileCoordLayer) return;\r\n if (!this.viewer || !this.viewer.imageryLayers) return;\r\n\r\n const options: any = {\r\n tilingScheme: this.tilingScheme,\r\n };\r\n\r\n this.debugTileCoordLayer = this.viewer.imageryLayers.addImageryProvider(\r\n new this.Cesium.TileCoordinatesImageryProvider(options),\r\n );\r\n }\r\n\r\n private _removeDebugImageryLayer() {\r\n if (!this.debugTileCoordLayer || !this.viewer || !this.viewer.imageryLayers) return;\r\n try {\r\n this.viewer.imageryLayers.remove(this.debugTileCoordLayer, false);\r\n } catch (e) {\r\n // ignore\r\n }\r\n this.debugTileCoordLayer = null;\r\n }\r\n\r\n public destroy() {\r\n\r\n if (this._cameraChangedHandler) {\r\n this.viewer.camera.changed.removeEventListener(this._cameraChangedHandler);\r\n this._cameraChangedHandler = null;\r\n }\r\n const scene = this.viewer.scene;\r\n const globe = scene && scene.globe;\r\n if (globe && this._tileLoadListener) {\r\n (globe as any).tileLoadProgressEvent.removeEventListener(this._tileLoadListener);\r\n this._tileLoadListener = null;\r\n }\r\n if (this._updateTimer !== null) {\r\n clearTimeout(this._updateTimer);\r\n this._updateTimer = null;\r\n }\r\n this.labelPool.reset();\r\n this._clearDebugGrids();\r\n this._removeDebugImageryLayer();\r\n }\r\n}\r\n\r\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import baseGet from './_baseGet.js';\nimport baseSlice from './_baseSlice.js';\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nexport default parent;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","import castPath from './_castPath.js';\nimport last from './last.js';\nimport parent from './_parent.js';\nimport toKey from './_toKey.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n\n // Prevent prototype pollution:\n // https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n // https://github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh\n var index = -1,\n length = path.length;\n\n if (!length) {\n return true;\n }\n\n while (++index < length) {\n var key = toKey(path[index]);\n\n // Always block \"__proto__\" anywhere in the path if it's not expected\n if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n return false;\n }\n\n // Block constructor/prototype as non-terminal traversal keys to prevent\n // escaping the object graph into built-in constructors and prototypes.\n if ((key === 'constructor' || key === 'prototype') && index < length - 1) {\n return false;\n }\n }\n\n var obj = parent(object, path);\n return obj == null || delete obj[toKey(last(path))];\n}\n\nexport default baseUnset;\n","import isPlainObject from './isPlainObject.js';\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n}\n\nexport default customOmitClone;\n","import arrayMap from './_arrayMap.js';\nimport baseClone from './_baseClone.js';\nimport baseUnset from './_baseUnset.js';\nimport castPath from './_castPath.js';\nimport copyObject from './_copyObject.js';\nimport customOmitClone from './_customOmitClone.js';\nimport flatRest from './_flatRest.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n});\n\nexport default omit;\n","interface DynamicImgMaterialOptions {\r\n color?: any; // 通常是 Cesium.Color | Cesium.Property\r\n duration?: number;\r\n image: string;\r\n count: number;\r\n freely?: 'vertical' | 'horizontal';\r\n direction: string; // 例如 '+' 或 '-',传给 GLSL\r\n isCustomColor?: boolean;\r\n materialType?: string;\r\n}\r\n\r\n/**\r\n * 注册动态图片材质并返回 TrailLineMaterialProperty 实例\r\n */\r\nexport function getDynamicImgMaterial(Cesium: any, options: DynamicImgMaterialOptions): any {\r\n const MaterialType =\r\n options.materialType || 'DynamicImgMaterial' + Date.now() + Math.floor(Math.random() * 1000);\r\n\r\n // 构造材质属性的构造函数 —— 保留 function + prototype 形式\r\n function TrailLineMaterialProperty(this: any, opts: DynamicImgMaterialOptions) {\r\n this._definitionChanged = new Cesium.Event();\r\n this._color = opts.color;\r\n this._colorSubscription = undefined;\r\n this.color = opts.color;\r\n this.duration = opts.duration;\r\n this._time = Date.now();\r\n }\r\n\r\n Object.defineProperties(TrailLineMaterialProperty.prototype, {\r\n isConstant: {\r\n get(): boolean {\r\n return false;\r\n },\r\n },\r\n definitionChanged: {\r\n get(): any {\r\n return this._definitionChanged;\r\n },\r\n },\r\n color: Cesium.createPropertyDescriptor('color'),\r\n });\r\n\r\n TrailLineMaterialProperty.prototype.getType = function (): string {\r\n return MaterialType;\r\n };\r\n\r\n TrailLineMaterialProperty.prototype.getValue = function (time: any, result?: any): any {\r\n if (!Cesium.defined(result)) {\r\n result = {};\r\n }\r\n result.color = Cesium.Property.getValueOrClonedDefault(\r\n this._color,\r\n time,\r\n Cesium.Color.WHITE,\r\n result.color,\r\n );\r\n result.image = options.image;\r\n // if (this.duration) {\r\n // result.time = ((Date.now() - this._time) % this.duration) / this.duration;\r\n // }\r\n return result;\r\n };\r\n\r\n TrailLineMaterialProperty.prototype.equals = function (other: any): boolean {\r\n return (\r\n this === other ||\r\n (other instanceof TrailLineMaterialProperty &&\r\n Cesium.Property.equals(this._color, (other as any)._color))\r\n );\r\n };\r\n\r\n // 着色器源码生成\r\n const _getWallShader = function (opts: {\r\n count: number;\r\n freely: string;\r\n direction: string;\r\n duration: number;\r\n isCustomColor?: boolean;\r\n }): string {\r\n let material = `\r\n czm_material czm_getMaterial(czm_materialInput materialInput)\r\n {\r\n czm_material material = czm_getDefaultMaterial(materialInput);\r\n vec2 st = materialInput.st;\r\n float time = fract(mod(float(czm_frameNumber * 33.0) , float(${opts.duration})) / float(${opts.duration}));\r\n ${\r\n opts.freely === 'vertical'\r\n ? `vec4 colorImage = texture(image, vec2(fract(float(${opts.count}) *st.t ${opts.direction} time), fract(st.s)));`\r\n : `vec4 colorImage = texture(image, vec2(fract(float(${opts.count}) *st.s ${opts.direction} time), fract(st.t)));`\r\n }\r\n ${opts.isCustomColor ? 'material.diffuse = color.rgb;' : 'material.diffuse = colorImage.rgb;'}\r\n material.alpha = colorImage.a;\\n\\\r\n return material;\\n\\\r\n }`;\r\n return material;\r\n };\r\n\r\n Cesium.Material._materialCache.addMaterial(MaterialType, {\r\n fabric: {\r\n type: MaterialType,\r\n uniforms: {\r\n color: options.color,\r\n image: options.image,\r\n time: 1000,\r\n },\r\n source: _getWallShader({\r\n count: options.count,\r\n freely: options.freely || '',\r\n direction: options.direction,\r\n duration: options.duration || 100,\r\n isCustomColor: options.isCustomColor,\r\n }),\r\n },\r\n translucent(): boolean {\r\n return true;\r\n },\r\n });\r\n\r\n return new (TrailLineMaterialProperty as any)(options);\r\n}\r\n\r\nexport function getWallMaterial(Cesium: any, options: any) {\r\n const MaterialType =\r\n options.MaterialType || 'wallType' + new Date().getTime() + parseInt(Math.random() * 1000 + '');\r\n function TrailLineMaterialProperty(this: any, options: any) {\r\n // 默认参数设置\r\n this._definitionChanged = new Cesium.Event();\r\n this._color = undefined;\r\n this._colorSubscription = undefined;\r\n this.color = options.color;\r\n this.duration = options.duration;\r\n this._time = new Date().getTime();\r\n }\r\n Object.defineProperties(TrailLineMaterialProperty.prototype, {\r\n isConstant: {\r\n get: function () {\r\n return false;\r\n },\r\n },\r\n definitionChanged: {\r\n get: function (this: any) {\r\n return this._definitionChanged;\r\n },\r\n },\r\n color: Cesium.createPropertyDescriptor('color'),\r\n });\r\n TrailLineMaterialProperty.prototype.getType = function () {\r\n return MaterialType;\r\n };\r\n TrailLineMaterialProperty.prototype.getValue = function (this: any, time: any, result: any) {\r\n if (!Cesium.defined(result)) {\r\n result = {};\r\n }\r\n // result.color =this._color || Cesium.Color.WHITE;\r\n result.image = options.image;\r\n if (this.duration) {\r\n result.time = ((new Date().getTime() - this._time) % this.duration) / this.duration;\r\n }\r\n return result;\r\n };\r\n TrailLineMaterialProperty.prototype.equals = function (this: any, other: any) {\r\n return (\r\n this === other ||\r\n (other instanceof TrailLineMaterialProperty &&\r\n Cesium.Property.equals(this._color, (other as any)._color))\r\n );\r\n };\r\n\r\n const _getWallShader = function (options: any) {\r\n let materail =\r\n 'czm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\r\n {\\n\\\r\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\r\n vec2 st = materialInput.st;\\n\\\r\n \\n ';\r\n if (options.freely == 'vertical') {\r\n //(由下到上)\r\n\r\n materail +=\r\n 'vec4 colorImage = texture(image, vec2(fract(float(' +\r\n options.count +\r\n ')*st.t ' +\r\n options.direction +\r\n ' time), fract(st.s)));\\n ';\r\n } else {\r\n //(逆时针)\r\n\r\n materail +=\r\n 'vec4 colorImage = texture(image, vec2(fract(float(' +\r\n options.count +\r\n ')*st.s ' +\r\n options.direction +\r\n ' time), fract(st.t)));\\n ';\r\n }\r\n //泛光\r\n materail +=\r\n 'vec4 fragColor;\\n\\\r\n fragColor.rgb = (color.rgb) / 1.0;\\n\\\r\n fragColor = czm_gammaCorrect(fragColor);\\n ';\r\n\r\n materail +=\r\n ' material.diffuse = color.rgb;\\n\\\r\n material.alpha = colorImage.a * color.a;\\n\\\r\n material.emission = fragColor.rgb;\\n\\\r\n \\n\\\r\n return material;\\n\\\r\n }\\n\\\r\n ';\r\n return materail;\r\n };\r\n\r\n Cesium.Material._materialCache.addMaterial(MaterialType, {\r\n fabric: {\r\n type: MaterialType,\r\n uniforms: {\r\n color: options.color || new Cesium.Color(1.0, 1.0, 1.0, 1.0),\r\n image: options.image,\r\n time: 0,\r\n },\r\n source: _getWallShader({\r\n count: options.count,\r\n freely: options.freely,\r\n direction: options.direction,\r\n }),\r\n },\r\n translucent: function () {\r\n return true;\r\n },\r\n });\r\n return new (TrailLineMaterialProperty as any)(options);\r\n}\r\n","interface PolylineFlowMaterialOptions {\r\n color?: any; // 一般是 Cesium.Color | Cesium.Property\r\n duration?: number; // 流动持续时间\r\n materialType?: string;\r\n}\r\n\r\n/**\r\n * 注册 polyline 流动材质并返回对应的 MaterialProperty\r\n */\r\nexport function getPolylineFlowMaterialProperty(\r\n Cesium: any,\r\n options: PolylineFlowMaterialOptions,\r\n): any {\r\n const Color = Cesium.Color;\r\n const defineProperties = Object.defineProperties;\r\n const Event = Cesium.Event;\r\n const createPropertyDescriptor = Cesium.createPropertyDescriptor;\r\n const Property = Cesium.Property;\r\n const defaultValue = <T>(value: T | undefined, defaultVal: T): T =>\r\n value === undefined ? defaultVal : value;\r\n const DEFAULT_EMPTY_OBJECT: any = {};\r\n \r\n let _materialType =\r\n options.materialType || 'PolylineFlow' + Date.now() + Math.floor(Math.random() * 1000);\r\n\r\n // 构造函数保持 function + prototype 形式\r\n function PolylineFlowMaterialProperty(this: any, opts: PolylineFlowMaterialOptions) {\r\n opts = defaultValue(opts, DEFAULT_EMPTY_OBJECT);\r\n this._definitionChanged = new Event();\r\n this._color = undefined;\r\n this._colorSubscription = undefined;\r\n this.color = opts.color || Color.fromBytes(0, 255, 255, 255);\r\n this._duration = undefined;\r\n this._durationSubscription = undefined;\r\n this.duration = defaultValue(opts.duration, 45);\r\n }\r\n\r\n defineProperties(PolylineFlowMaterialProperty.prototype, {\r\n isConstant: {\r\n get(): boolean {\r\n return false;\r\n },\r\n },\r\n definitionChanged: {\r\n get(): any {\r\n return this._definitionChanged;\r\n },\r\n },\r\n });\r\n\r\n PolylineFlowMaterialProperty.prototype.getType = function (_time: any): string {\r\n return _materialType;\r\n };\r\n\r\n PolylineFlowMaterialProperty.prototype.getValue = function (time: any, result?: any): any {\r\n if (!result) {\r\n result = {};\r\n }\r\n result.color = Property.getValueOrClonedDefault(\r\n this._color,\r\n time,\r\n Cesium.Color.WHITE,\r\n result.color,\r\n );\r\n result.duration = this._duration;\r\n return result;\r\n };\r\n\r\n PolylineFlowMaterialProperty.prototype.equals = function (other?: any): boolean {\r\n return (\r\n this === other ||\r\n (other instanceof PolylineFlowMaterialProperty &&\r\n Property.equals(this._color, (other as any)._color))\r\n );\r\n };\r\n\r\n defineProperties(PolylineFlowMaterialProperty.prototype, {\r\n color: createPropertyDescriptor('color'),\r\n duration: createPropertyDescriptor('duration'),\r\n });\r\n\r\n // 挂到 Cesium 方便外部直接使用\r\n Cesium.PolylineFlowMaterialProperty = PolylineFlowMaterialProperty;\r\n\r\n Cesium.Material._materialCache.addMaterial(_materialType, {\r\n fabric: {\r\n type: _materialType,\r\n uniforms: {\r\n color: new Color(1.0, 1.0, 1.0, 1),\r\n duration: 45,\r\n },\r\n source: (function () {\r\n return `uniform vec4 color;\r\n uniform float duration;\r\n czm_material czm_getMaterial(czm_materialInput materialInput){\r\n czm_material material = czm_getDefaultMaterial(materialInput);\r\n vec2 st = materialInput.st;\r\n float t = fract(czm_frameNumber / duration);\r\n t *= 1.03;\r\n float alpha = smoothstep(t - 0.03, t, st.s) * step(-t, -st.s);\r\n alpha += 0.2;\r\n vec4 fragColor;\r\n fragColor.rgb = color.rgb;\r\n fragColor = czm_gammaCorrect(fragColor);\r\n material.diffuse = fragColor.rgb;\r\n material.alpha = alpha;\r\n material.emission = fragColor.rgb;\r\n return material;\r\n }`;\r\n })(),\r\n },\r\n translucent(): boolean {\r\n return true;\r\n },\r\n });\r\n\r\n return new (PolylineFlowMaterialProperty as any)(options);\r\n}\r\n","interface RegisterOptions {\r\n themeKey: string;\r\n material: any;\r\n force?: boolean; // 可选,默认 false\r\n category?: string; // 可选,默认 'default'\r\n}\r\n\r\nexport class MaterialManager {\r\n private categoryMap: Map<string, Map<string, any>> = new Map();\r\n\r\n private CategoryGet = {} as { [key: string]: Function };\r\n constructor() {}\r\n\r\n registerCategoryGet(category: string, fn: Function): void {\r\n if (!category) return console.warn('分类不能为空');\r\n this.CategoryGet[category] = fn;\r\n }\r\n /**\r\n * 注册材质\r\n */\r\n register(options: RegisterOptions): void {\r\n const { themeKey, material, force = false, category = 'default' } = options;\r\n\r\n if (!this.categoryMap.has(category)) {\r\n this.categoryMap.set(category, new Map());\r\n }\r\n const materialMap = this.categoryMap.get(category)!;\r\n\r\n if (materialMap.has(themeKey)) {\r\n if (!force) {\r\n console.warn(\r\n `[MaterialManager] 已存在 themeKey '${themeKey}' 在分类 '${category}',如需覆盖请设置 force = true`,\r\n );\r\n return;\r\n } else {\r\n console.info(`[MaterialManager] themeKey '${themeKey}' 在分类 '${category}' 已被覆盖`);\r\n }\r\n }\r\n materialMap.set(themeKey, material);\r\n }\r\n\r\n /**\r\n * 获取材质\r\n */\r\n get({\r\n themeKey,\r\n category,\r\n options,\r\n }: {\r\n themeKey: string;\r\n category?: string;\r\n options?: any;\r\n }): any | undefined {\r\n category = category || 'default';\r\n if (this.CategoryGet[category]) {\r\n return this.CategoryGet[category]({\r\n themeKey,\r\n materialMap: this.categoryMap,\r\n options: options || {},\r\n });\r\n }\r\n return this.categoryMap.get(category)?.get(themeKey);\r\n }\r\n\r\n /**\r\n * 是否存在\r\n */\r\n has(themeKey: string, category: string = 'default'): boolean {\r\n return this.categoryMap.get(category)?.has(themeKey) ?? false;\r\n }\r\n\r\n /**\r\n * 移除材质\r\n */\r\n remove(themeKey: string, category: string = 'default'): void {\r\n const materialMap = this.categoryMap.get(category);\r\n if (!materialMap) return;\r\n\r\n const material = materialMap.get(themeKey);\r\n if (material?.destroy) {\r\n material.destroy();\r\n }\r\n materialMap.delete(themeKey);\r\n\r\n if (materialMap.size === 0) {\r\n this.categoryMap.delete(category);\r\n }\r\n }\r\n\r\n /**\r\n * 获取某分类下的所有 keys\r\n */\r\n keys(category: string = 'default'): string[] {\r\n return [...(this.categoryMap.get(category)?.keys() || [])];\r\n }\r\n\r\n /**\r\n * 清空某个分类\r\n */\r\n clearCategory(category: string = 'default'): void {\r\n const materialMap = this.categoryMap.get(category);\r\n if (!materialMap) return;\r\n\r\n for (const material of materialMap.values()) {\r\n material?.destroy?.();\r\n }\r\n materialMap.clear();\r\n this.categoryMap.delete(category);\r\n }\r\n\r\n /**\r\n * 清空所有\r\n */\r\n clearAll(): void {\r\n for (const materialMap of this.categoryMap.values()) {\r\n for (const material of materialMap.values()) {\r\n material?.destroy?.();\r\n }\r\n }\r\n this.categoryMap.clear();\r\n }\r\n\r\n /**\r\n * 获取所有分类\r\n */\r\n categories(): string[] {\r\n return [...this.categoryMap.keys()];\r\n }\r\n}\r\n","import { BufferedHierarchicalAggregator } from '../BufferedHierarchicalAggregator';\r\nimport { HtmlOverlayLabelPool } from '../HtmlOverlayLabelPool';\r\nimport { MarkerEventKey } from '../MarkerEvent';\r\nimport { MaterialManager } from '../Material/MaterialManager';\r\n\r\ninterface EntityGroupOptions {\r\n id: string;\r\n entities?: any[]; // 默认值为空数组\r\n primitives?: any[]; // 默认值为空数组\r\n dataItem?: any; // 默认值为空对象\r\n aggregator?: BufferedHierarchicalAggregator;\r\n cardPool: HtmlOverlayLabelPool;\r\n}\r\n\r\nexport class EntityGroup {\r\n id: string;\r\n entities: any[] = [];\r\n primitives: any[] = [];\r\n dataItem: any = {};\r\n aggregator?: BufferedHierarchicalAggregator;\r\n cardPool: HtmlOverlayLabelPool;\r\n\r\n constructor(options: EntityGroupOptions) {\r\n // 从 options 中解构参数并设置默认值\r\n const { id, entities = [], primitives = [], dataItem = {}, aggregator, cardPool } = options;\r\n\r\n this.id = id;\r\n this.entities = entities;\r\n this.primitives = primitives;\r\n this.dataItem = dataItem;\r\n this.aggregator = aggregator;\r\n this.cardPool = cardPool;\r\n }\r\n\r\n // 改造 setVisible 方法,支持 Entity 和 Primitive 的可见性控制\r\n setVisible(visible: boolean) {\r\n // 控制 Cesium 原生实体\r\n this.entities.forEach((entity) => {\r\n if (entity) {\r\n entity.show = visible;\r\n }\r\n });\r\n\r\n // 控制 Cesium 原生 Primitive\r\n this.primitives.forEach((primitive) => {\r\n if (primitive) {\r\n primitive.show = visible;\r\n }\r\n });\r\n\r\n // 控制 billboard 聚合点(通过 aggregator)\r\n if (this.aggregator && Array.isArray(this.dataItem.billboard)) {\r\n const updated = this.dataItem.billboard.map((bill: any, index: number) => {\r\n const id = this.dataItem.id;\r\n return {\r\n id,\r\n data: {\r\n ...this.dataItem,\r\n show: visible && (bill.data?.show ?? true),\r\n },\r\n };\r\n });\r\n updated.forEach((p: any) => {\r\n this.aggregator?.updatePoint(p);\r\n });\r\n }\r\n\r\n // 控制 HTML 标签池\r\n if (this.cardPool && this.dataItem.card) {\r\n visible\r\n ? this.cardPool.showByIds([this.dataItem.id])\r\n : this.cardPool.hideByIds([this.dataItem.id]);\r\n }\r\n }\r\n\r\n // 改造 removeAll 方法,支持 Entity 和 Primitive 的移除\r\n removeAll(viewer: any, immediately = true) {\r\n // 移除 Entity\r\n this.entities.forEach((entity) => {\r\n if (entity) viewer.entities.remove(entity);\r\n });\r\n this.entities = [];\r\n\r\n // 移除 Primitive\r\n this.primitives.forEach((primitive) => {\r\n if (primitive) viewer.scene.primitives.remove(primitive);\r\n });\r\n this.primitives = [];\r\n\r\n // 移除 billboard 聚合点\r\n if (immediately && this.aggregator && Array.isArray(this.dataItem.billboard)) {\r\n this.aggregator.removePointsById([this.dataItem.id]);\r\n }\r\n\r\n // 移除 HTML 标签池中的卡片\r\n if (immediately && this.cardPool && this.dataItem.card) {\r\n this.cardPool.removeByIds([this.dataItem.id]);\r\n }\r\n\r\n return this.dataItem.id;\r\n }\r\n}\r\n\r\nexport class EntityLayer {\r\n id: string;\r\n groupMap: Map<string, EntityGroup> = new Map();\r\n Cesium: any;\r\n viewer: any;\r\n materialManager: MaterialManager;\r\n aggregator: BufferedHierarchicalAggregator;\r\n cardPool: HtmlOverlayLabelPool;\r\n constructor(\r\n id: string,\r\n Cesium: any,\r\n viewer: any,\r\n materialManager: MaterialManager,\r\n aggregator: BufferedHierarchicalAggregator,\r\n cardPool: HtmlOverlayLabelPool,\r\n ) {\r\n this.id = id;\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n this.materialManager = materialManager;\r\n this.aggregator = aggregator;\r\n this.cardPool = cardPool;\r\n\r\n this.aggregator.labelPool.eventBus.addListener(MarkerEventKey.Click, {\r\n name: 'BufferedHierarchicalAggregator_maker_click',\r\n fn: (info, e) => {\r\n this.cardPool.showByIds([info.data.id]);\r\n },\r\n });\r\n\r\n const handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);\r\n\r\n handler.setInputAction(() => {\r\n this.cardPool.hideFilter((data) => {\r\n if (data.initShow) return false;\r\n return true;\r\n });\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n }\r\n\r\n /** ====== 下面是抽出的创建函数 ====== */\r\n private createPolyline(line: any, show: boolean) {\r\n if (!line.positions || line.positions.length < 1) return null;\r\n const material = this.materialManager.get({\r\n themeKey: line.theme,\r\n category: 'polyline',\r\n options: line,\r\n });\r\n const positions = Array.isArray(line.positions[0]) ? line.positions.flat() : line.positions;\r\n let opt = {\r\n ...line,\r\n };\r\n if (material) opt.material = material;\r\n return this.viewer.entities.add({\r\n polyline: {\r\n ...opt,\r\n positions: this.Cesium.Cartesian3.fromDegreesArrayHeights(positions),\r\n },\r\n show: (line.show ?? true) && show,\r\n });\r\n }\r\n\r\n private createWall(wall: any, show: boolean) {\r\n if (!wall.positions || wall.positions.length < 1) return null;\r\n const material = this.materialManager.get({\r\n themeKey: wall.theme,\r\n category: 'wall',\r\n options: wall,\r\n });\r\n\r\n const minHeights =\r\n wall.positions.length === wall.minimumHeights?.length\r\n ? wall.minimumHeights.map((n: any) => n - Number(wall.minHeight || 0))\r\n : wall.positions.map((n: any) => (n[2] || 0) - Number(wall.minHeight || 0));\r\n\r\n const maxHeights =\r\n wall.positions.length === wall.maximumHeights?.length\r\n ? wall.maximumHeights.map((n: any) => n + Number(wall.maxHeight || 0))\r\n : wall.positions.map((n: any) => (n[2] || 0) + Number(wall.maxHeight || 0));\r\n\r\n const pos = wall.positions.map((p: any) =>\r\n this.Cesium.Cartesian3.fromDegrees(p[0], p[1], p[2] || 0),\r\n );\r\n let opt = {\r\n ...wall,\r\n };\r\n if (material) opt.material = material;\r\n return this.viewer.entities.add({\r\n wall: {\r\n ...opt,\r\n positions: pos,\r\n minimumHeights: minHeights,\r\n maximumHeights: maxHeights,\r\n },\r\n show: (wall.show ?? true) && show,\r\n });\r\n }\r\n\r\n private createPolygon(poly: any, show: boolean) {\r\n // 确保多边形数据有效\r\n if (!poly.hierarchy || poly.hierarchy.length < 1) return null;\r\n\r\n // 获取材质\r\n const material = this.materialManager.get({\r\n themeKey: poly.theme,\r\n category: 'polygon',\r\n options: poly,\r\n });\r\n\r\n // 处理外环(外环是第一个元素)\r\n const outerRing = Array.isArray(poly.hierarchy[0]) ? poly.hierarchy.flat() : poly.hierarchy;\r\n const outerCartesian = this.Cesium.Cartesian3.fromDegreesArrayHeights(outerRing);\r\n\r\n // 处理孔数据(如果有孔数据)\r\n const holes =\r\n poly.holes?.map((hole: any) => {\r\n let _hole = Array.isArray(hole[0]) ? poly.hierarchy.flat() : poly.hole;\r\n return this.Cesium.Cartesian3.fromDegreesArrayHeights(_hole.flat());\r\n }) || [];\r\n\r\n // 使用 PolygonHierarchy 来构建多边形\r\n const polygonHierarchy = new this.Cesium.PolygonHierarchy(outerCartesian, holes);\r\n let opt = {\r\n ...poly,\r\n };\r\n if (material) opt.material = material;\r\n // 创建并返回实体\r\n return this.viewer.entities.add({\r\n polygon: {\r\n ...opt,\r\n hierarchy: polygonHierarchy, // 使用构建好的 PolygonHierarchy\r\n },\r\n show: (poly.show ?? true) && show,\r\n });\r\n }\r\n\r\n private createBillboardPoints(dataItem: any) {\r\n if (!dataItem.billboard?.length || !this.aggregator) return [];\r\n return dataItem.billboard.map((bill: any) => {\r\n const [lon, lat, height = 0] = bill.position || [0, 0, 0];\r\n return {\r\n id: dataItem.id,\r\n lon,\r\n lat,\r\n height,\r\n name: bill.options?.text || '',\r\n data: dataItem,\r\n style: { zIndex: dataItem.zIndex || '1' },\r\n };\r\n });\r\n }\r\n\r\n private createCard(dataItem: any) {\r\n if (!dataItem.card?.data?.length) return;\r\n this.cardPool.add(dataItem.card, {\r\n id: dataItem.id,\r\n lon: dataItem.card.position[0],\r\n lat: dataItem.card.position[1],\r\n height: dataItem.card.position[3] || 0,\r\n theme: dataItem.card.theme,\r\n show: dataItem.show ? (dataItem.card.initShow ?? false) : false,\r\n notCreateElement: true,\r\n style: { width: '0', height: '0', zIndex: dataItem?.card?.zIndex || '110' },\r\n });\r\n }\r\n\r\n /** ====== 主入口:仅保留循环,内部调用独立函数 ====== */\r\n addGroup(dataItem: any, isAppendPoints = true) {\r\n const groupId = dataItem.id || `${Date.now()}`;\r\n this.removeGroup(groupId);\r\n const entities: any[] = [];\r\n const show = dataItem.show !== false;\r\n\r\n (dataItem.polyline || []).forEach((l: any) => {\r\n const e = this.createPolyline(l, show);\r\n if (e) entities.push(e);\r\n });\r\n\r\n (dataItem.wall || []).forEach((w: any) => {\r\n const e = this.createWall(w, show);\r\n if (e) entities.push(e);\r\n });\r\n\r\n (dataItem.polygon || []).forEach((p: any) => {\r\n const e = this.createPolygon(p, show);\r\n if (e) entities.push(e);\r\n });\r\n\r\n const pointList = this.createBillboardPoints(dataItem);\r\n if (pointList.length && isAppendPoints) this.aggregator.appendPoints(pointList, false);\r\n\r\n this.createCard(dataItem);\r\n\r\n const group = new EntityGroup({\r\n id: groupId,\r\n entities,\r\n primitives: [],\r\n dataItem,\r\n aggregator: this.aggregator,\r\n cardPool: this.cardPool,\r\n });\r\n this.groupMap.set(groupId, group);\r\n return pointList;\r\n }\r\n\r\n async addGroups(dataItemList: any) {\r\n let dataLists = dataItemList.map((dataItem: any) => {\r\n return this.addGroup(dataItem, false);\r\n });\r\n\r\n // 拉平二维数组\r\n const allPoints = dataLists.flat();\r\n if (allPoints.length > 0 && this.aggregator) {\r\n this.aggregator.appendPoints(allPoints, false);\r\n }\r\n }\r\n\r\n removeGroup(groupId: string) {\r\n const group = this.groupMap.get(groupId);\r\n if (group) {\r\n group.removeAll(this.viewer);\r\n this.groupMap.delete(groupId);\r\n }\r\n }\r\n removeGroups(groupIds: string[]) {\r\n let ids = [];\r\n for (const groupId of groupIds) {\r\n const group = this.groupMap.get(groupId);\r\n if (group) {\r\n let id = group.removeAll(this.viewer, false);\r\n this.groupMap.delete(groupId);\r\n ids.push(id);\r\n }\r\n }\r\n this.aggregator.removePointsById(ids);\r\n this.cardPool.removeByIds(ids);\r\n }\r\n updateGroup(dataItem: any) {\r\n const group = this.groupMap.get(dataItem.id);\r\n if (group) {\r\n group.removeAll(this.viewer);\r\n this.groupMap.delete(dataItem.id);\r\n }\r\n this.addGroup(dataItem);\r\n }\r\n\r\n async updateGroups(dataItemList: Array<any>) {\r\n this.aggregator.removePointsById(dataItemList.map((n: any) => n.id));\r\n this.cardPool.removeByIds(dataItemList.map((n: any) => n.id));\r\n let dataLists = dataItemList.map((dataItem: any) => {\r\n const group = this.groupMap.get(dataItem.id);\r\n if (group) {\r\n group.removeAll(this.viewer, false);\r\n this.groupMap.delete(dataItem.id);\r\n }\r\n return this.addGroup(dataItem, false);\r\n });\r\n\r\n // 拉平二维数组\r\n const allPoints = dataLists.flat();\r\n if (allPoints.length > 0 && this.aggregator) {\r\n this.aggregator.appendPoints(allPoints, false);\r\n }\r\n }\r\n\r\n setGroupVisible(groupId: string, visible: boolean) {\r\n this.groupMap.get(groupId)?.setVisible(visible);\r\n }\r\n\r\n clearAllGroups() {\r\n this.groupMap.forEach((group) => group.removeAll(this.viewer));\r\n this.groupMap.clear();\r\n }\r\n}\r\n\r\nexport class EntityLayerManager {\r\n Cesium: any;\r\n viewer: any;\r\n layerMap: Map<string, EntityLayer> = new Map();\r\n materialManager: MaterialManager;\r\n aggregator: BufferedHierarchicalAggregator;\r\n cardPool: HtmlOverlayLabelPool;\r\n constructor(\r\n Cesium: any,\r\n viewer: any,\r\n materialManager: MaterialManager,\r\n aggregator: BufferedHierarchicalAggregator,\r\n cardPool: HtmlOverlayLabelPool,\r\n ) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n this.materialManager = materialManager;\r\n this.aggregator = aggregator;\r\n this.cardPool = cardPool;\r\n }\r\n\r\n addLayer(layerId: string) {\r\n if (!this.layerMap.has(layerId)) {\r\n this.layerMap.set(\r\n layerId,\r\n new EntityLayer(\r\n layerId,\r\n this.Cesium,\r\n this.viewer,\r\n this.materialManager,\r\n this.aggregator,\r\n this.cardPool,\r\n ),\r\n );\r\n }\r\n }\r\n\r\n removeLayer(layerId: string) {\r\n const layer = this.layerMap.get(layerId);\r\n if (layer) {\r\n layer.clearAllGroups();\r\n this.layerMap.delete(layerId);\r\n }\r\n }\r\n\r\n getLayer(layerId: string): EntityLayer | undefined {\r\n return this.layerMap.get(layerId);\r\n }\r\n\r\n async addGroupsToLayer(layerId: string, dataList: any[]) {\r\n const layer = this.layerMap.get(layerId);\r\n if (!layer) return;\r\n // dataList.forEach((data) => layer.addGroup(data));\r\n layer.addGroups(dataList);\r\n this.aggregator.refresh();\r\n }\r\n updateGroupToLayer(layerId: string, dataList: any[]) {\r\n const layer = this.layerMap.get(layerId);\r\n if (!layer) return;\r\n\r\n layer.updateGroups(dataList);\r\n this.aggregator.refresh();\r\n }\r\n\r\n setGroupVisible(layerId: string, groupId: string, visible: boolean) {\r\n this.layerMap.get(layerId)?.setGroupVisible(groupId, visible);\r\n }\r\n\r\n removeGroup(layerId: string, groupId: string) {\r\n this.layerMap.get(layerId)?.removeGroup(groupId);\r\n }\r\n removeGroups(layerId: string, groupIds: string[]) {\r\n this.layerMap.get(layerId)?.removeGroups(groupIds);\r\n }\r\n}\r\n","import {\r\n BufferedHierarchicalAggregator,\r\n EntityLayerManager,\r\n HtmlOverlayLabelPool,\r\n MarkerEventBus,\r\n MaterialManager,\r\n} from '../../../../../../cesium-core/src';\r\nimport { isArray, merge } from 'lodash-es';\r\nimport { MarkerManageOptions } from '../type/markerManage';\r\n\r\nexport class MarkerManagerCore {\r\n labelId: string;\r\n cardId: string;\r\n opt: MarkerManageOptions;\r\n entityList = new Map();\r\n MaterialManager: MaterialManager;\r\n instance: any;\r\n\r\n constructor(opt: MarkerManageOptions & { labelId: string; cardId: string; MaterialManager?: MaterialManager; eventBus?: any; cardEventBus?: any }) {\r\n this.labelId = opt.labelId;\r\n this.cardId = opt.cardId;\r\n this.opt = opt;\r\n this.MaterialManager = opt.MaterialManager || new MaterialManager();\r\n this.instance = this.initCore(opt, opt.eventBus, opt.cardEventBus);\r\n }\r\n\r\n //初始化标记管理\r\n initCore(options: MarkerManageOptions, eventBus?: any, cardEventBus?: any) {\r\n let { Cesium, viewer, aggregatorOptions } = options;\r\n \r\n if (!eventBus) eventBus = new MarkerEventBus();\r\n if (!cardEventBus) cardEventBus = new MarkerEventBus();\r\n\r\n const labelPool = new HtmlOverlayLabelPool(Cesium, viewer, this.labelId, eventBus); //标记\r\n const cardPool = new HtmlOverlayLabelPool(Cesium, viewer, this.cardId, cardEventBus, false); //卡片\r\n const aggregator = new BufferedHierarchicalAggregator(Cesium, viewer, {\r\n //聚合\r\n threshold: aggregatorOptions?.threshold || 16,\r\n displayLimit: aggregatorOptions?.displayLimit || 300,\r\n maxLevel: aggregatorOptions?.maxLevel || 20,\r\n debugCurrentGrids: aggregatorOptions?.debugCurrentGrids || false,\r\n groupByTheme: aggregatorOptions?.groupByTheme ?? true,\r\n //clusterTheme: aggregatorOptions?.clusterTheme || 'Tag1007', // 这里可以改成你自定义的默认聚合点主题k\r\n pointTheme: aggregatorOptions?.pointTheme || 'Tag1001', // 普通点的默认主题\r\n centralPointMode: aggregatorOptions?.centralPointMode || 'firstPoint', // 普通点的默认主题\r\n ...aggregatorOptions,\r\n labelPool: labelPool,\r\n\r\n });\r\n const materialManager = this.MaterialManager;\r\n const entityLayerManager = new EntityLayerManager( //实体图层管理\r\n Cesium,\r\n viewer,\r\n materialManager,\r\n aggregator,\r\n cardPool,\r\n );\r\n return { materialManager, entityLayerManager, cardPool, labelPool, aggregator, eventBus, cardEventBus };\r\n }\r\n\r\n //添加标记\r\n set(list: any) {\r\n this.entityList.clear();\r\n list.forEach((item: any) => {\r\n this.entityList.set(item.id, item);\r\n });\r\n this.instance.entityLayerManager.removeLayer('Layer_default');\r\n this.instance.entityLayerManager.addLayer('Layer_default');\r\n this.instance.entityLayerManager.addGroupsToLayer(\r\n 'Layer_default',\r\n Array.from(this.entityList.values()),\r\n );\r\n }\r\n\r\n //添加\r\n add(data: any) {\r\n let dataList = [] as Array<any>;\r\n if (isArray(data)) {\r\n dataList = data;\r\n } else {\r\n dataList.push(data);\r\n }\r\n dataList.forEach((item: any) => {\r\n this.entityList.set(item.id, item);\r\n });\r\n if (!this.instance.entityLayerManager.getLayer('Layer_default')) {\r\n this.instance.entityLayerManager.addLayer('Layer_default');\r\n }\r\n this.instance.entityLayerManager.addGroupsToLayer('Layer_default', dataList);\r\n }\r\n\r\n //更新标记\r\n update(data: any[], immediately = true) {\r\n let dataList = [] as Array<any>;\r\n if (isArray(data)) {\r\n dataList = data;\r\n } else {\r\n dataList.push(data);\r\n }\r\n\r\n const mergedList = dataList.map((options) => {\r\n const act = this.entityList.get(options.id);\r\n if (!act) return;\r\n let merged = merge({}, act, options);\r\n this.entityList.set(options.id, merged);\r\n return merged;\r\n }).filter(Boolean);\r\n\r\n if (immediately) {\r\n this.instance.entityLayerManager.updateGroupToLayer('Layer_default', mergedList);\r\n }\r\n }\r\n\r\n //获取标记\r\n getById(id: string) {\r\n return this.entityList.get(id);\r\n }\r\n \r\n getOptions() {\r\n return new Promise((resolve) => {\r\n resolve({\r\n entityList: Array.from(this.entityList.values()),\r\n });\r\n });\r\n }\r\n \r\n //删除标记\r\n delete(data: string[] | string) {\r\n let deleteList = [] as Array<String>;\r\n if (isArray(data)) {\r\n deleteList = data as Array<String>;\r\n } else {\r\n deleteList.push(data as String);\r\n }\r\n deleteList.forEach((id) => {\r\n this.entityList.delete(id);\r\n });\r\n this.instance.entityLayerManager.removeGroups('Layer_default', deleteList);\r\n }\r\n\r\n setMarkerAggregationEnabled(enabled: boolean, count?: number) {\r\n this.instance.aggregator.setThreshold(enabled ? count || 2 : 9999999);\r\n }\r\n \r\n setDebugCurrentGridsEnabled(enabled: boolean) {\r\n this.instance.aggregator.setDebugCurrentGrids(enabled || false);\r\n }\r\n}\r\n","import {\r\n getDynamicImgMaterial,\r\n getWallMaterial,\r\n getPolylineFlowMaterialProperty,\r\n} from '../../../../../../cesium-core/src';\r\n\r\nexport function createLineTheme({\r\n Cesium,\r\n options,\r\n MaterialManager,\r\n}: {\r\n Cesium: any;\r\n options: any;\r\n MaterialManager: any;\r\n}) {\r\n if (!options.data?.theme) return;\r\n // if (['2', '3', '4'].includes(options.data?.lineType)) return;\r\n if (options.data?.lineType == '1') {\r\n let material = getPolylineFlowMaterialProperty(Cesium, {\r\n color: new Cesium.Color.fromCssColorString(options?.options?.color || '#ffffff'),\r\n duration: 100,\r\n });\r\n //把材质逐步从引擎中迁移出来\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'polyline',\r\n });\r\n } else if (options.data?.lineType == '2') {\r\n let material = new Cesium.PolylineArrowMaterialProperty(\r\n Cesium.Color.fromCssColorString(options?.options?.color || 'red'),\r\n );\r\n //把材质逐步从引擎中迁移出来\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'polyline',\r\n });\r\n } else if (options.data?.lineType == '3') {\r\n let material = new Cesium.PolylineOutlineMaterialProperty({\r\n color: Cesium.Color.fromCssColorString(options?.options?.color || 'red'),\r\n outlineWidth: 0,\r\n });\r\n //把材质逐步从引擎中迁移出来\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'polyline',\r\n });\r\n } else if (options.data?.lineType == '4') {\r\n let material = new Cesium.PolylineDashMaterialProperty({\r\n color: Cesium.Color.fromCssColorString(options?.options?.color || 'red'),\r\n dashLength: Number(options?.options?.dashLength || 30), //短划线长度\r\n });\r\n //把材质逐步从引擎中迁移出来\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'polyline',\r\n });\r\n } else if (options.data?.lineType == '5') {\r\n let material = getDynamicImgMaterial(Cesium, {\r\n image: options.img,\r\n color: new Cesium.Color.fromCssColorString(options?.options?.color || '#ffffff'),\r\n duration: 5000,\r\n // freely: 'vertical',\r\n direction: '-',\r\n count: 1,\r\n isCustomColor:true,\r\n });\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'polyline',\r\n });\r\n }\r\n}\r\n\r\nexport function createPolygonTheme({\r\n Cesium,\r\n options,\r\n MaterialManager,\r\n}: {\r\n Cesium: any;\r\n options: any;\r\n MaterialManager: any;\r\n}) {\r\n if (!options.data?.theme) return;\r\n if (options.data?.polygonType == 'colorMode') {\r\n let material = new Cesium.Color.fromCssColorString(options?.options?.color || '#ffffff');\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'polygon',\r\n });\r\n } else if (options.data?.polygonType == 'img') {\r\n let material = new Cesium.ImageMaterialProperty({\r\n image: options.img,\r\n });\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'polygon',\r\n });\r\n } else if (options.data?.polygonType == 'DynamicImgMaterial') {\r\n let material = getWallMaterial(Cesium, {\r\n image: options.img,\r\n color: new Cesium.Color.fromCssColorString(options?.options?.color),\r\n duration: 5000,\r\n freely: options.data?.freely || 'vertical',\r\n direction: '+',\r\n count: 1,\r\n });\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'polygon',\r\n });\r\n }\r\n}\r\nexport function createWallTheme({\r\n Cesium,\r\n options,\r\n MaterialManager,\r\n}: {\r\n Cesium: any;\r\n options: any;\r\n MaterialManager: any;\r\n}) {\r\n if (!options.data?.theme) return;\r\n if (options.data?.wallType == 'img') {\r\n let material = new Cesium.ImageMaterialProperty({\r\n image: options.img,\r\n });\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'wall',\r\n });\r\n } else if (options.data?.wallType == 'DynamicImgMaterial') {\r\n let material = getWallMaterial(Cesium, {\r\n image: options.img,\r\n color: new Cesium.Color.fromCssColorString(options?.options?.color),\r\n duration: 5000,\r\n freely: options.data?.freely || 'vertical',\r\n direction: '+',\r\n count: 1,\r\n });\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'wall',\r\n });\r\n }\r\n}\r\n","import { h, markRaw, render } from 'vue';\r\nimport {\r\n HtmlOverlayLabelPool,\r\n MarkerEventBus,\r\n MarkerEventKey,\r\n MaterialManager,\r\n} from '../../../../../../cesium-core/src';\r\nimport CxCardCarousel from '../../../card-carousel';\r\nimport CxMarkerBubble from '../../../marker-bubble';\r\nimport CxMarkerDefault from '../../../marker-default';\r\nimport CxMarkerHtml from '../../../marker-html';\r\nimport CxMarkerText from '../../../marker-text';\r\nimport { MarkerManagerCore } from './MarkerManagerCore';\r\nimport type { MarkerManageOptions } from '../type/markerManage';\r\nimport { omit } from 'lodash-es';\r\nimport { ReportListenerKey } from '../type/markerManage';\r\nimport { isFunction } from 'lodash-es';\r\nimport { createLineTheme, createPolygonTheme, createWallTheme } from '../utils/themeTool';\r\n\r\ninterface MarkerManageOptionsExtend extends Partial<MarkerManageOptions> {\r\n labelId?: string;\r\n cardId?: string;\r\n tagThemeConfig?: any[];\r\n lineThemeConfig?: any[];\r\n cardThemeConfig?: any[];\r\n runListener?: Function;\r\n MaterialManager?: MaterialManager;\r\n Cesium: any;\r\n viewer: any;\r\n}\r\n\r\nexport class MarkerManage extends MarkerManagerCore {\r\n constructor(opt: MarkerManageOptionsExtend) {\r\n const {\r\n labelId = 'report-marker',\r\n cardId = 'report-marker',\r\n tagThemeConfig = [],\r\n lineThemeConfig = [],\r\n cardThemeConfig = [],\r\n runListener = () => { },\r\n MaterialManager: materialManager = new MaterialManager(),\r\n aggregatorOptions,\r\n } = opt;\r\n\r\n // Merge default themes with provided ones\r\n const finalTagThemeConfig = [...tagThemeConfig];\r\n const finalLineThemeConfig = [...lineThemeConfig];\r\n const finalCardThemeConfig = [...cardThemeConfig];\r\n\r\n // Merge default aggregator options\r\n const finalAggregatorOptions = {\r\n clusterTheme: 'Tag1007',\r\n pointTheme: 'Tag1001',\r\n centralPointMode: 'firstPoint',\r\n debugCurrentGrids: false,\r\n ...(aggregatorOptions || {}),\r\n };\r\n\r\n const options = {\r\n ...opt,\r\n labelId,\r\n cardId,\r\n MaterialManager: materialManager,\r\n aggregatorOptions: finalAggregatorOptions,\r\n eventBus: new MarkerEventBus(),\r\n };\r\n\r\n super(options as any);\r\n\r\n // Ensure opt has all extended props\r\n this.opt = { ...this.opt, ...options } as any;\r\n\r\n // Initialize listeners\r\n this.initTagListener(this.instance.eventBus, this.opt as any);\r\n\r\n // Load themes\r\n this.loadTabThemeConfig(finalTagThemeConfig);\r\n this.loadLineThemeConfig(finalLineThemeConfig);\r\n this.loadCardThemeConfig(finalCardThemeConfig);\r\n this.initDefaultLineMaterials();\r\n this.initDefaultTagTheme();\r\n }\r\n\r\n initDefaultTagTheme() {\r\n this.setTagTheme({\r\n comType: 4,\r\n data: {\r\n theme: 'default',\r\n options: {\r\n textStyle: {\r\n width: 'max-content',\r\n backgroundColor: 'rgba(0, 0, 0, 0.7)',\r\n borderRadius: '5px',\r\n padding: '4px 8px',\r\n },\r\n },\r\n },\r\n });\r\n }\r\n\r\n initDefaultLineMaterials() {\r\n const Cesium = (this.opt as any).Cesium;\r\n if (!Cesium) return;\r\n\r\n const defaultMaterials = {\r\n themeBeUnderConstructionRailway: {\r\n material: new Cesium.PolylineDashMaterialProperty({\r\n color: Cesium.Color.fromCssColorString('white'),\r\n gapColor: Cesium.Color.fromCssColorString('black'),\r\n dashLength: 50.0,\r\n dashPattern: parseInt('1111111111111110', 2),\r\n }),\r\n },\r\n themeRailway: {\r\n material: new Cesium.PolylineDashMaterialProperty({\r\n color: Cesium.Color.BLACK,\r\n gapColor: Cesium.Color.WHITE,\r\n dashLength: 48, //短划线长度\r\n }),\r\n },\r\n themeNewRailway: {\r\n material: new Cesium.PolylineOutlineMaterialProperty({\r\n color: Cesium.Color.RED,\r\n outlineWidth: 0,\r\n outlineColor: Cesium.Color.BLACK,\r\n }),\r\n },\r\n themePlanningRailway: {\r\n material: new Cesium.PolylineOutlineMaterialProperty({\r\n color: Cesium.Color.fromCssColorString('rgb(162, 83, 188)'),\r\n outlineWidth: 0,\r\n outlineColor: Cesium.Color.BLACK,\r\n }),\r\n },\r\n themePlanLine: {\r\n material: new Cesium.PolylineOutlineMaterialProperty({\r\n color: Cesium.Color.fromCssColorString('rgb(5,11,233)'),\r\n outlineWidth: 0,\r\n outlineColor: Cesium.Color.BLACK,\r\n }),\r\n },\r\n themeExpressway: {\r\n material: new Cesium.PolylineOutlineMaterialProperty({\r\n color: Cesium.Color.fromCssColorString('rgb(255,255, 0)'),\r\n outlineWidth: 6,\r\n outlineColor: Cesium.Color.fromCssColorString('rgb(102, 176 ,8)'),\r\n }),\r\n },\r\n themeNationalHighway: {\r\n material: new Cesium.PolylineOutlineMaterialProperty({\r\n color: Cesium.Color.fromCssColorString('rgb(160 ,119, 0)'),\r\n outlineWidth: 6,\r\n outlineColor: Cesium.Color.fromCssColorString('rgb(68 ,33, 24)'),\r\n }),\r\n },\r\n themeProvincialRoad: {\r\n material: new Cesium.PolylineOutlineMaterialProperty({\r\n color: Cesium.Color.fromCssColorString('rgb(160 ,119, 0)'),\r\n outlineWidth: 6,\r\n outlineColor: Cesium.Color.fromCssColorString('rgb(68 ,33, 24)'),\r\n }),\r\n },\r\n themeCityBoundary: {\r\n material: new Cesium.PolylineDashMaterialProperty({\r\n color: Cesium.Color.fromCssColorString('rgb(162, 83, 188)'),\r\n gapColor: Cesium.Color.fromCssColorString('0000'),\r\n dashLength: 50.0,\r\n dashPattern: parseInt('1111111111100100', 2),\r\n }),\r\n },\r\n themeProvincialBoundaries: {\r\n material: new Cesium.PolylineDashMaterialProperty({\r\n // color: Cesium.Color.fromCssColorString('rgb(162, 83, 188)'),\r\n color: Cesium.Color.fromCssColorString('rgb(162, 83, 188)'),\r\n gapColor: Cesium.Color.fromCssColorString('0000'),\r\n dashLength: 50.0,\r\n dashPattern: parseInt('1111111100100100', 2),\r\n }),\r\n },\r\n };\r\n\r\n Object.entries(defaultMaterials).forEach(([key, value]: [string, any]) => {\r\n if (this.MaterialManager.has(key, 'polyline')) return;\r\n this.MaterialManager.register({\r\n themeKey: key,\r\n material: value.material,\r\n category: 'polyline',\r\n });\r\n });\r\n }\r\n\r\n // Initialize dynamic themes from data\r\n public initThemes(data: any) {\r\n if (!data) return;\r\n\r\n if (data.tag) {\r\n this.loadTabThemeConfig(data.tag);\r\n }\r\n if (data.card) {\r\n this.loadCardThemeConfig(data.card);\r\n }\r\n\r\n const Cesium = (this.opt as any).Cesium;\r\n const materialManager = this.instance.materialManager || (this.opt as any).MaterialManager;\r\n\r\n if (data.line?.length > 0) {\r\n for (let item of data.line) {\r\n createLineTheme({\r\n options: item,\r\n Cesium: Cesium,\r\n MaterialManager: materialManager,\r\n });\r\n }\r\n }\r\n if (data.polygon?.length > 0) {\r\n for (let item of data.polygon) {\r\n createPolygonTheme({\r\n options: item,\r\n Cesium: Cesium,\r\n MaterialManager: materialManager,\r\n });\r\n }\r\n }\r\n if (data.wall?.length > 0) {\r\n for (let item of data.wall) {\r\n createWallTheme({\r\n options: item,\r\n Cesium: Cesium,\r\n MaterialManager: materialManager,\r\n });\r\n }\r\n }\r\n }\r\n\r\n extractOnEvents(props: any) {\r\n const events: { [key: string]: Function } = {};\r\n for (const key in props) {\r\n if (key.startsWith('on') && typeof props[key] === 'function') {\r\n events[key] = props[key]; // 直接保留\r\n }\r\n }\r\n return events;\r\n }\r\n\r\n //注册标记主题\r\n loadTabThemeConfig(themeList: any[]) {\r\n themeList.forEach((item) => {\r\n this.setTagTheme(item);\r\n });\r\n }\r\n\r\n //注册默认的线配置\r\n loadLineThemeConfig(themeList: any[]) {\r\n // let { Cesium } = this.opt;\r\n themeList.forEach((item) => {\r\n if (this.MaterialManager.has(item.data.theme, 'polyline')) return;\r\n if (item.material) {\r\n this.MaterialManager.register({\r\n themeKey: item.data.theme,\r\n material: item.material,\r\n category: 'polyline',\r\n });\r\n }\r\n });\r\n }\r\n\r\n loadCardThemeConfig(themeList: any[]) {\r\n let labelPool = this.instance.cardPool;\r\n themeList.forEach((item) => {\r\n labelPool.registerTheme(item.data.theme, {\r\n createElement(container: any, label: any) {\r\n let data = label.data.data;\r\n let vNode: any;\r\n\r\n if (item.comType == 1) {\r\n vNode = h(markRaw(CxCardCarousel), {\r\n data: data || {},\r\n imgSrc: item.data.img,\r\n styleConfig: {\r\n paddingTop: '50px',\r\n paddingRight: '18px',\r\n paddingBottom: '10px',\r\n paddingLeft: '95px',\r\n backgroundColor: 'rgba(0,0,0,0)',\r\n borderRadius: 0,\r\n width: '682px',\r\n height: '445px',\r\n },\r\n titleConfig: {\r\n show: true,\r\n width: '600px',\r\n height: '50px',\r\n left: '79px',\r\n top: '0px',\r\n },\r\n bgClass: [item.data.theme],\r\n });\r\n } else if (item.comType == 3) {\r\n vNode = h(markRaw(CxCardCarousel), {\r\n data: data || {},\r\n imgSrc: item.data.img,\r\n styleConfig: {\r\n paddingTop: '55px',\r\n paddingRight: '12px',\r\n paddingBottom: '17px',\r\n paddingLeft: '83px',\r\n backgroundColor: 'rgba(0,0,0,0)',\r\n borderRadius: 0,\r\n width: '365px',\r\n height: '353px',\r\n },\r\n titleConfig: {\r\n show: true,\r\n width: '285px',\r\n height: '50px',\r\n left: '79px',\r\n top: '0px',\r\n },\r\n bgClass: [item.data.theme],\r\n // titleConfig: themeOptions.options.titleConfig,\r\n // pageInfoConfig: themeOptions.options.pageInfoConfig,\r\n });\r\n }\r\n\r\n render(vNode, container);\r\n return () => {\r\n return render(null, container);\r\n };\r\n },\r\n options: {\r\n offset: item.data.pixelOffset,\r\n ...(item.data || {}),\r\n },\r\n });\r\n });\r\n }\r\n\r\n //注册主题\r\n setTagTheme(options: any) {\r\n let { labelPool } = this.instance;\r\n labelPool.registerTheme(options.data.theme, {\r\n createElement(container: any, label: any) {\r\n let info = label.data?.billboard?.[0];\r\n const newObj = omit(info, ['position', 'options']);\r\n let vNode: any;\r\n let props = {\r\n ...newObj,\r\n text: info?.options?.text,\r\n isFullLink: options?.isFullLink ?? false,\r\n img: options?.data?.options?.img,\r\n textStyle: options?.data?.options?.textStyle,\r\n imgStyle: options?.data?.options?.imgStyle,\r\n };\r\n if (label.data?.gridKey) {\r\n vNode = h(markRaw(CxMarkerDefault), {\r\n text: label.data?.count,\r\n isFullLink: options.isFullLink ?? false,\r\n img: options?.data.options.img,\r\n imgStyle: options?.data.options?.imgStyle,\r\n textStyle: {\r\n display: 'block !important',\r\n 'font-size': `12px !important`,\r\n minWidth: '20px',\r\n maxWidth: 'max-content',\r\n position: 'absolute',\r\n left: '63%',\r\n top: '-8px',\r\n background: '#f00',\r\n 'border-radius': '50%',\r\n height: '20px',\r\n 'line-height': '20px',\r\n 'text-align': 'center',\r\n color: 'white',\r\n },\r\n });\r\n } else if (options.comType == 4) {\r\n vNode = h(markRaw(CxMarkerHtml), props);\r\n } else if (options.comType == 5) {\r\n const billboardOptions = info?.options || {};\r\n const themeOptions = options?.data?.options || {};\r\n const pixelOffset = info?.pixelOffset || options?.data?.pixelOffset || { x: 0, y: 0 };\r\n const otherOffset =\r\n billboardOptions.otherOffset ?? themeOptions.otherOffset ?? { x: 0, y: -0 };\r\n const isCanDraggable =\r\n billboardOptions.isCanDraggable ??\r\n themeOptions.isCanDraggable ??\r\n options?.isCanDraggable ??\r\n false;\r\n\r\n vNode = h(markRaw(CxMarkerBubble), {\r\n ...props,\r\n pixelOffset,\r\n textStyle: billboardOptions.textStyle || themeOptions.textStyle,\r\n lineStyle: billboardOptions.lineStyle || themeOptions.lineStyle,\r\n otherOffset,\r\n isCanDraggable,\r\n onCanDraggable: billboardOptions.onCanDraggable || options?.onCanDraggable,\r\n onSetOtherOffset: (offset: { x: number; y: number }) => {\r\n if (label.data?.billboard?.[0]?.options) {\r\n label.data.billboard[0].options.otherOffset = offset;\r\n }\r\n billboardOptions.onSetOtherOffset?.(offset);\r\n options?.onSetOtherOffset?.(label.data, offset);\r\n },\r\n });\r\n } else if (options.comType == 6 || options.comType == 7) {\r\n vNode = h(markRaw(CxMarkerText), {\r\n text: props.text,\r\n textStyle: props.textStyle,\r\n });\r\n } else {\r\n vNode = h(markRaw(CxMarkerDefault), props);\r\n }\r\n\r\n render(vNode, container);\r\n return () => {\r\n return render(null, container);\r\n };\r\n },\r\n options: {\r\n offset: options.comType == 5 ? {} : options?.data?.pixelOffset || {},\r\n },\r\n });\r\n }\r\n\r\n //标记监听事件\r\n private initTagListener(eventBus: MarkerEventBus, options: MarkerManageOptionsExtend) {\r\n let { viewer, tagListeningOptions } = options;\r\n // const eventBus = new MarkerEventBus(); // Already created in core\r\n eventBus.addListener(MarkerEventKey.Click, {\r\n name: 'marker:click',\r\n fn: (info: any) => {\r\n options.runListener?.(ReportListenerKey.标记左键点击, info.data);\r\n if (isFunction(info.data?.onClick)) {\r\n info.data?.onClick(info.data);\r\n }\r\n if (info.data?.cameraPoint && info.data?.billboard[0]?.isFlyToCameraPoint) {\r\n viewer?.camera?.flyTo({\r\n duration: 1,\r\n ...info.data?.cameraPoint,\r\n });\r\n }\r\n },\r\n });\r\n eventBus.addListener(MarkerEventKey.MouseEnter, {\r\n name: 'marker:mouseenter',\r\n fn: (info: any) => {\r\n let Cesium = (this.opt as any).Cesium;\r\n let offset = { x: 0, y: 0 };\r\n try {\r\n if (info.data?.billboard?.[0]?.position?.length > 2) {\r\n let p = info.data?.billboard[0]?.position;\r\n let position = Cesium.Cartesian3.fromDegrees(p[0], p[1], p[3] || 0);\r\n let f = this.instance.labelPool.toWindowCoordinates(position);\r\n offset.x = f.x;\r\n offset.y = f.y;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n options.runListener?.(ReportListenerKey.标记移入, info.data, offset);\r\n },\r\n });\r\n eventBus.addListener(MarkerEventKey.MouseLeave, {\r\n name: 'marker:mouseleave',\r\n fn: (info: any) => {\r\n let Cesium = (this.opt as any).Cesium;\r\n let offset = { x: 0, y: 0 };\r\n try {\r\n if (info.data?.billboard?.[0]?.position?.length > 2) {\r\n let p = info.data?.billboard[0]?.position;\r\n let position = Cesium.Cartesian3.fromDegrees(p[0], p[1], p[3] || 0);\r\n let f = this.instance.labelPool.toWindowCoordinates(position);\r\n offset.x = f.x;\r\n offset.y = f.y;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n options.runListener?.(ReportListenerKey.标记移出, info.data, offset);\r\n },\r\n });\r\n tagListeningOptions?.forEach((item) => {\r\n eventBus.addListener(item.key, item.ListenerItem, item.overwrite);\r\n });\r\n // return eventBus;\r\n }\r\n\r\n // 兼容旧模式的材质注册\r\n setMaterial(options: any) {\r\n const { type, material, materialKey, cover } = options;\r\n // 统一转为小写,例如 Polyline -> polyline\r\n const category = type ? type.toLowerCase() : 'default';\r\n\r\n this.MaterialManager.register({\r\n themeKey: materialKey,\r\n // 兼容传入的是 { material: ... } 结构或者直接是材质对象\r\n material: material?.material || material,\r\n force: cover,\r\n category: category,\r\n });\r\n }\r\n}\r\n","<script lang=\"ts\" setup>\r\n import { onMounted, onUnmounted, watch, inject, unref, Ref } from 'vue';\r\n import { markerManageProps, MarkerManageOptions } from '../type/markerManage';\r\n import { MarkerManage } from '../core/MarkerManage';\r\n\r\n const props = defineProps(markerManageProps);\r\n const emits = defineEmits(['register', 'load', 'marker-event']);\r\n const leitingMethods = inject('leitingMethods') as Ref<any>;\r\n let markerManager: MarkerManage | null = null;\r\n\r\n const init = (options: Partial<MarkerManageOptions> = {}) => {\r\n if (markerManager) return markerManager;\r\n\r\n const finalOptions = {\r\n ...props,\r\n ...options,\r\n Cesium: options.Cesium || props.Cesium,\r\n viewer: options.viewer || props.viewer,\r\n runListener: (key: string, data: any, ...args: any[]) => {\r\n emits('marker-event', { key, data, args });\r\n },\r\n };\r\n\r\n if (!finalOptions.Cesium || !finalOptions.viewer) {\r\n // console.warn('MarkerManage: Cesium or viewer not provided yet');\r\n return null;\r\n }\r\n\r\n markerManager = new MarkerManage(finalOptions as any);\r\n if (options.methods) {\r\n options.methods.setTagTheme = markerManager.setTagTheme.bind(markerManager);\r\n options.methods.setMaterial = markerManager.setMaterial.bind(markerManager);\r\n options.methods.setEntityList = markerManager.set.bind(markerManager);\r\n options.methods.addComItem = markerManager.add.bind(markerManager);\r\n options.methods.deleteComItem = markerManager.delete.bind(markerManager);\r\n options.methods.updateComItem = markerManager.update.bind(markerManager);\r\n options.methods.getEntityByID = markerManager.getById.bind(markerManager);\r\n options.methods.getOptions = markerManager.getOptions.bind(markerManager);\r\n }\r\n emits('load', markerManager);\r\n\r\n return markerManager;\r\n };\r\n\r\n const methods = {\r\n init,\r\n set: (list: any) => markerManager?.set(list),\r\n add: (data: any) => markerManager?.add(data),\r\n update: (data: any[], immediately?: boolean) => markerManager?.update(data, immediately),\r\n getById: (id: string) => markerManager?.getById(id),\r\n getOptions: () => markerManager?.getOptions(),\r\n delete: (data: string[] | string) => markerManager?.delete(data),\r\n setMarkerAggregationEnabled: (enabled: boolean, count?: number) =>\r\n markerManager?.setMarkerAggregationEnabled(enabled, count),\r\n setDebugCurrentGridsEnabled: (enabled: boolean) =>\r\n markerManager?.setDebugCurrentGridsEnabled(enabled),\r\n initThemes: (data: any) => markerManager?.initThemes(data),\r\n setTagTheme: (data: any) => markerManager?.setTagTheme(data),\r\n setMaterial: (data: any) => markerManager?.setMaterial(data),\r\n };\r\n\r\n defineExpose(methods);\r\n emits('register', methods);\r\n function load() {\r\n if (markerManager) return markerManager;\r\n const methods = unref(leitingMethods) as any;\r\n const Cesium = methods?.getCesium?.();\r\n const viewer = methods?.getViewer?.();\r\n if (Cesium && viewer) {\r\n init({ Cesium, viewer, methods });\r\n } else if (props.Cesium && props.viewer) {\r\n init({ methods });\r\n }\r\n }\r\n\r\n onMounted(() => {\r\n load();\r\n });\r\n\r\n watch(\r\n () => [props.Cesium, props.viewer],\r\n ([newCesium, newViewer]) => {\r\n if (newCesium && newViewer && !markerManager) {\r\n load();\r\n }\r\n },\r\n );\r\n watch(\r\n () => leitingMethods?.value,\r\n (nv, ov) => {\r\n /* ... */\r\n load();\r\n },\r\n { deep: false },\r\n );\r\n onUnmounted(() => {\r\n // markerManager?.destroy();\r\n // Assuming destroy exists or cleanup is handled\r\n });\r\n\r\n // Watch for props changes if needed, but usually init is once.\r\n</script>\r\n\r\n<template>\r\n <slot></slot>\r\n</template>\r\n","import { withInstall } from '../../../../utils/with-install';\r\nimport _MarkerManage from './src/components/MarkerManage.vue';\r\nexport * from './src/type/markerManage';\r\nexport * from './src/core/MarkerManagerCore';\r\nexport * from './src/core/MarkerManage';\r\n\r\nconst CxMarkerManage = withInstall(_MarkerManage);\r\nexport { CxMarkerManage };\r\nexport default CxMarkerManage;\r\n"],"names":["markerManageProps","ReportListenerKey","BufferedHierarchicalAggregator","Cesium","viewer","options","globe","surface","provider","tilingScheme","pending","groupByTheme","rebuild","update","count","threshold","debug","providerChanged","schemeChanged","levels","minLevel","maxLevel","index","tileLevel","size","points","newPoints","isUpdate","pt","newData","idx","p","oldPt","level","grid","carto","tileXY","key","cell","iAll","iSkip","theme","group","iGroup","updated","ids","idSet","groupKey","groupPoints","filteredGroup","data","min","max","range","effectiveMin","effectiveMax","currentLevel","effectiveThreshold","labelCount","processCell","levelIdx","lonIdx","latIdx","viewTileLevel","tiles","minDefinedLevel","maxDefinedLevel","nearestIndex","minDiff","i","diff","viewerTerrain","scene","globeTerrain","terrainProvider","visited","ellipsoid","viewRectangle","isCellInView","x","y","cellRect","t","rect","gridRefLevel","targetTileLevel","tileX","tileY","levelDelta","factor","parentX","parentY","startX","startY","dx","dy","childX","childY","tileWestDeg","tileEastDeg","tileSouthDeg","tileNorthDeg","westIdx","eastIdx","southIdx","northIdx","context","west","south","east","north","centerLon","centerLat","rawGroupPoints","clusterLon","clusterLat","clusterHeight","visiblePoints","finalTheme","clusterId","tileLevelForDebug","text","positions","entity","symbolTag","isSymbol","value","isObjectLike","baseGetTag","arrayMap","array","iteratee","length","result","symbolProto","Symbol","symbolToString","baseToString","isArray","identity","apply","func","thisArg","args","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","lastCalled","stamp","remaining","constant","baseSetToString","defineProperty","string","setToString","nativeMax","overRest","start","transform","otherArgs","baseRest","isIterateeCall","object","isObject","type","isArrayLike","isIndex","eq","createAssigner","assigner","sources","customizer","guard","source","reIsDeepProp","reIsPlainProp","isKey","FUNC_ERROR_TEXT","memoize","resolver","memoized","cache","MapCache","MAX_MEMOIZE_SIZE","memoizeCapped","rePropName","reEscapeChar","stringToPath","match","number","quote","subString","toString","castPath","toKey","baseGet","path","spreadableSymbol","isFlattenable","isArguments","baseFlatten","depth","predicate","isStrict","arrayPush","flatten","flatRest","objectTag","funcProto","objectProto","funcToString","hasOwnProperty","objectCtorString","isPlainObject","proto","getPrototype","Ctor","baseSlice","end","createBaseFor","fromRight","keysFunc","iterable","props","baseFor","assignMergeValue","baseAssignValue","isArrayLikeObject","safeGet","toPlainObject","copyObject","keysIn","baseMergeDeep","srcIndex","mergeFunc","stack","objValue","srcValue","stacked","newValue","isCommon","isArr","isBuff","isBuffer","isTyped","isTypedArray","copyArray","cloneBuffer","cloneTypedArray","isFunction","initCloneObject","baseMerge","Stack","last","parent","merge","baseUnset","obj","customOmitClone","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","omit","paths","isDeep","getAllKeysIn","baseClone","getDynamicImgMaterial","MaterialType","TrailLineMaterialProperty","opts","time","other","_getWallShader","getWallMaterial","materail","getPolylineFlowMaterialProperty","Color","defineProperties","Event","createPropertyDescriptor","Property","defaultValue","defaultVal","DEFAULT_EMPTY_OBJECT","_materialType","PolylineFlowMaterialProperty","_time","MaterialManager","category","fn","themeKey","material","force","materialMap","EntityGroup","id","entities","primitives","dataItem","aggregator","cardPool","visible","primitive","bill","immediately","EntityLayer","materialManager","MarkerEventKey","info","e","line","show","opt","wall","minHeights","n","maxHeights","pos","poly","outerRing","outerCartesian","holes","hole","_hole","polygonHierarchy","lon","lat","height","isAppendPoints","groupId","l","w","pointList","dataItemList","allPoints","groupIds","EntityLayerManager","layerId","layer","dataList","MarkerManagerCore","eventBus","cardEventBus","aggregatorOptions","MarkerEventBus","labelPool","HtmlOverlayLabelPool","entityLayerManager","list","item","mergedList","act","merged","resolve","deleteList","enabled","createLineTheme","createPolygonTheme","createWallTheme","MarkerManage","labelId","cardId","tagThemeConfig","lineThemeConfig","cardThemeConfig","runListener","finalTagThemeConfig","finalLineThemeConfig","finalCardThemeConfig","finalAggregatorOptions","defaultMaterials","events","themeList","container","label","vNode","h","markRaw","CxCardCarousel","render","newObj","CxMarkerDefault","CxMarkerHtml","billboardOptions","themeOptions","pixelOffset","otherOffset","isCanDraggable","CxMarkerBubble","offset","CxMarkerText","tagListeningOptions","position","f","materialKey","cover","__props","emits","__emit","leitingMethods","inject","markerManager","init","finalOptions","methods","__expose","load","unref","onMounted","watch","newCesium","newViewer","nv","ov","onUnmounted","_renderSlot","_ctx","CxMarkerManage","withInstall","_MarkerManage"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42]}
1
+ {"version":3,"file":"marker-manage.js","sources":["../../src/components/marker-manage/src/type/markerManage.ts","../../../cesium-core/src/components/BufferedHierarchicalAggregator.ts","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isSymbol.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayMap.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseToString.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/identity.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_apply.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_shortOut.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/constant.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSetToString.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setToString.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_overRest.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseRest.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isIterateeCall.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createAssigner.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isKey.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/memoize.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_memoizeCapped.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stringToPath.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toString.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_castPath.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_toKey.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGet.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isFlattenable.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFlatten.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/flatten.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_flatRest.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isPlainObject.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSlice.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createBaseFor.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFor.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assignMergeValue.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArrayLikeObject.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_safeGet.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toPlainObject.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMergeDeep.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMerge.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/last.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_parent.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/merge.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseUnset.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_customOmitClone.js","../../../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/omit.js","../../../cesium-core/src/components/Material/help/dynamicImgMaterial.ts","../../../cesium-core/src/components/Material/help/PolylineFlowMaterialProperty.ts","../../../cesium-core/src/components/Material/MaterialManager.ts","../../../cesium-core/src/components/entity/EntityLayer.ts","../../src/components/marker-manage/src/core/MarkerManagerCore.ts","../../src/components/marker-manage/src/utils/themeTool.ts","../../src/components/marker-manage/src/core/MarkerManage.ts","../../src/components/marker-manage/src/components/MarkerManage.vue","../../src/components/marker-manage/index.ts"],"sourcesContent":["import { ExtractPropTypes, PropType } from 'vue';\nimport type {\n AggregatorOptions,\n ListenerItem,\n MarkerEventKey,\n} from '../../../../../../cesium-core/src';\n\r\nexport const markerManageProps = {\r\n id: { type: String, default: 'marker' },\r\n Cesium: { type: Object as PropType<any> },\r\n viewer: { type: Object as PropType<any> },\r\n aggregatorOptions: { type: Object as PropType<AggregatorOptions> },\r\n tagListeningOptions: {\r\n type: Array as PropType<\r\n Array<{\r\n key: MarkerEventKey;\r\n ListenerItem: ListenerItem;\r\n overwrite?: boolean;\r\n }>\r\n >,\r\n },\r\n themeConfig: { type: Object as PropType<any> }, // Optional override\r\n} as const;\r\n\r\nexport type MarkerManageProps = ExtractPropTypes<typeof markerManageProps>;\r\nexport interface MarkerManageOptions {\n Cesium: any;\r\n viewer: any;\r\n aggregatorOptions: AggregatorOptions;\r\n tagListeningOptions?: Array<{\r\n key: MarkerEventKey;\r\n ListenerItem: ListenerItem;\r\n overwrite?: boolean;\r\n }>;\r\n [key: string]: any; // Allow extra properties like MaterialManager\n}\n\nexport interface LabelOcclusionOptions {\n enabled?: boolean;\n distanceEpsilon?: number;\n throttleMs?: number;\n}\n\nexport interface MarkerManageMethods {\n init: (options: MarkerManageOptions) => any;\r\n set: (list: any) => void;\r\n add: (data: any) => void;\r\n update: (data: any[], immediately?: boolean) => void;\r\n getById: (id: string) => any;\r\n getOptions: () => Promise<any>;\r\n delete: (data: string[] | string) => void;\n setMarkerAggregationEnabled: (enabled: boolean, count?: number) => void;\n setDebugCurrentGridsEnabled: (enabled: boolean) => void;\n setLabelOcclusionEnabled: (enabled: boolean) => void;\n setLabelOcclusionDistanceEpsilon: (distanceEpsilon: number) => void;\n setLabelOcclusionOptions: (options: LabelOcclusionOptions) => void;\n getLabelOcclusionOptions: () => {\n enabled: boolean;\n throttleMs: number;\n distanceEpsilon: number;\n } | null;\n initThemes: (data: any) => void; // Added initThemes to methods\n}\n\r\nexport interface ThemeInterface {\r\n data: {\r\n theme: string;\r\n lineType?: string;\r\n polygonType?: string;\r\n wallType?: string;\r\n [key: string]: any;\r\n };\r\n options?: any;\r\n img?: string;\r\n material?: any;\r\n comType?: number;\r\n [key: string]: any;\r\n}\r\nexport type RegisterFn = (instance: MarkerManageMethods) => void;\r\nexport type UseCesiumReturnType = [RegisterFn, MarkerManageMethods];\r\n\r\nexport enum ReportListenerKey {\r\n 左建选中模型 = 'MODEL_LEFT_CLICK',\r\n 标记左键点击 = 'TAG_LEFT_CLICK',\r\n 标记移入 = 'TAG_MOUSEENTER',\r\n 标记移出 = 'TAG_MOUSELEAVE',\r\n 模型位置保存 = 'SAVE_REGION',\r\n 模型加载完成 = 'MODEL_READY',\r\n}\r\n","import { HtmlOverlayLabelPool } from './HtmlOverlayLabelPool';\r\n\r\ninterface PointData {\r\n id: string;\r\n lon: number;\r\n lat: number;\r\n height: number;\r\n name: string;\r\n data: {\r\n [key: string]: any;\r\n };\r\n // 预计算后的地图层级区间(用于提高 _update 性能)\r\n __minLevel?: number;\r\n __maxLevel?: number;\r\n [key: string]: any;\r\n}\r\n\r\n\r\ninterface GridCell {\r\n allPoints: PointData[];\r\n groups: Map<string, PointData[]>;\r\n skipPoints: PointData[];\r\n}\r\n\r\ninterface AggregatorOptions {\r\n labelPool: HtmlOverlayLabelPool;\r\n threshold?: number;\r\n displayLimit?: number;\r\n maxLevel?: number;\r\n debugCurrentGrids?: boolean;\r\n clusterTheme?: string;\r\n pointTheme?: string;\r\n centralPointMode?: string;\r\n minGlobalPointCount?: number;\r\n groupByTheme?: boolean;\r\n // terrain 开启时,用于“向下矫正”格网层级的补偿值,例如 2 表示整体提升 2 级\r\n terrainLevelOffset?: number;\r\n}\r\n\r\n\r\ninterface GridLevel {\r\n level: number;\r\n size: number;\r\n minViewWidth: number;\r\n}\r\n\r\nexport { PointData, GridLevel, AggregatorOptions };\r\n\r\nexport class BufferedHierarchicalAggregator {\r\n private Cesium: any;\r\n private viewer: any;\r\n labelPool: HtmlOverlayLabelPool;\r\n private threshold: number;\r\n private displayLimit: number;\r\n private maxLevel: number;\r\n private debugCurrentGrids: boolean;\r\n private levels: GridLevel[];\r\n private points: PointData[] = [];\r\n private gridLayers: Map<number, Map<string, GridCell>> = new Map();\r\n private debugGrids: any[] = [];\r\n private _updateFn: () => void;\r\n private clusterTheme: string;\r\n private pointTheme: string;\r\n private centralPointMode: string;\r\n private minGlobalPointCount: number;\r\n private groupByTheme: boolean;\r\n private tilingScheme: any;\r\n private terrainLevelOffset: number;\r\n private debugTileCoordLayer: any | null = null;\r\n\r\n private levelIndexByTileLevel: Map<number, number> = new Map();\r\n\r\n private _lastTileProvider: any = null;\r\n private _updateTimer: number | null = null;\r\n private _updateDelay: number = 100;\r\n private _tilesRetryCount: number = 0;\r\n private _tilesRetryMax: number = 100;\r\n private _cameraDirty: boolean = false;\r\n private _tileLoadListener: ((pending: number) => void) | null = null;\r\n private _cameraChangedHandler: (() => void) | null = null;\r\n // 默认显示的地图层级区间(兼容旧数据)\r\n private defaultMinLevel: number = 0;\r\n private defaultMaxLevel: number = 28;\r\n // 单次从视图层级向下细分到聚合层级时,最多细分的层级数\r\n private maxRefineLevels: number = 2;\r\n\r\n constructor(Cesium: any, viewer: any, options: AggregatorOptions) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n\r\n this.labelPool = options.labelPool;\r\n this.threshold = options.threshold ?? 10;\r\n this.displayLimit = options.displayLimit ?? 100;\r\n this.maxLevel = options.maxLevel ?? 5;\r\n this.debugCurrentGrids = options.debugCurrentGrids ?? false;\r\n\r\n this.clusterTheme = options.clusterTheme ?? 'cluster-label';\r\n this.pointTheme = options.pointTheme ?? 'point-label';\r\n this.centralPointMode = options.centralPointMode ?? 'central';\r\n this.minGlobalPointCount = options.minGlobalPointCount ?? 0;\r\n this.groupByTheme = options.groupByTheme ?? false;\r\n this.terrainLevelOffset = options.terrainLevelOffset ?? 2;\r\n\r\n const globe = this.viewer.scene && this.viewer.scene.globe;\r\n const surface = globe && (globe as any)._surface;\r\n const provider = surface && (surface as any)._tileProvider;\r\n const tilingScheme =\r\n provider?.tilingScheme || new this.Cesium.GeographicTilingScheme();\r\n this._lastTileProvider = provider;\r\n this.tilingScheme = tilingScheme;\r\n this.levels = this._createLevels();\r\n this._buildLevels();\r\n\r\n this._updateFn = this._update.bind(this);\r\n\r\n // 如果一开始就开启了 debug,初始化时也同步创建坐标网格图层\r\n if (this.debugCurrentGrids) {\r\n this._ensureDebugImageryLayer();\r\n }\r\n\r\n if (globe) {\r\n\r\n this._tileLoadListener = (pending: number) => {\r\n if (pending === 0 && this._cameraDirty) {\r\n this._cameraDirty = false;\r\n this._scheduleUpdate();\r\n }\r\n };\r\n (globe as any).tileLoadProgressEvent.addEventListener(this._tileLoadListener);\r\n }\r\n\r\n this._cameraChangedHandler = () => {\r\n // const currentScene = this.viewer.scene;\r\n // const currentGlobe = currentScene && currentScene.globe;\r\n // if (!currentGlobe) {\r\n this._update();\r\n // return;\r\n // }\r\n\r\n // this._cameraDirty = true;\r\n\r\n // if ((currentGlobe as any).tilesLoaded) {\r\n // this._cameraDirty = false;\r\n // this._update();\r\n // }\r\n };\r\n\r\n this.viewer.camera.changed.addEventListener(this._cameraChangedHandler);\r\n }\r\n\r\n public setGroupByTheme(groupByTheme: boolean, rebuild: boolean = true, update: boolean = true) {\r\n if (this.groupByTheme === groupByTheme) {\r\n if (update) this._update();\r\n return;\r\n }\r\n this.groupByTheme = groupByTheme;\r\n if (rebuild) {\r\n this._buildLevels();\r\n }\r\n if (update) {\r\n this._update();\r\n }\r\n }\r\n\r\n public setMinGlobalPointCount(count: number, update: boolean = true) {\r\n this.minGlobalPointCount = count;\r\n if (update) {\r\n this._update();\r\n }\r\n }\r\n\r\n public setThreshold(threshold: number, update: boolean = true) {\r\n this.threshold = threshold;\r\n if (update) {\r\n this._update();\r\n }\r\n }\r\n\r\n public setDebugCurrentGrids(debug: boolean, update: boolean = true) {\r\n this.debugCurrentGrids = debug;\r\n\r\n if (debug) {\r\n this._ensureDebugImageryLayer();\r\n } else {\r\n this._clearDebugGrids();\r\n this._removeDebugImageryLayer();\r\n }\r\n\r\n if (update) {\r\n this._update();\r\n }\r\n }\r\n\r\n private _syncTilingSchemeAndLevels() {\r\n const globe = this.viewer.scene && this.viewer.scene.globe;\r\n const surface = globe && (globe as any)._surface;\r\n const provider = surface && (surface as any)._tileProvider;\r\n const tilingScheme =\r\n provider?.tilingScheme || new this.Cesium.GeographicTilingScheme();\r\n const providerChanged = provider !== this._lastTileProvider;\r\n const schemeChanged = this.tilingScheme !== tilingScheme;\r\n if (!providerChanged && !schemeChanged && this.levels && this.levels.length > 0) {\r\n return;\r\n }\r\n this._lastTileProvider = provider;\r\n this.tilingScheme = tilingScheme;\r\n this.levels = this._createLevels();\r\n this._buildLevels();\r\n\r\n // 如果当前处于 debug 模式,需要让 TileCoordinatesImageryProvider\r\n // 使用最新的 tilingScheme,保证与聚合格网完全对齐\r\n if (this.debugCurrentGrids) {\r\n this._removeDebugImageryLayer();\r\n this._ensureDebugImageryLayer();\r\n }\r\n }\r\n\r\n\r\n private _createLevels(): GridLevel[] {\r\n const levels: GridLevel[] = [];\r\n this.levelIndexByTileLevel = new Map();\r\n\r\n const minLevel = 0;\r\n const maxLevel = this.maxLevel;\r\n\r\n let index = 0;\r\n for (let tileLevel = minLevel; tileLevel <= maxLevel; tileLevel++, index++) {\r\n const size = 360 / Math.pow(2, tileLevel);\r\n levels.push({\r\n level: tileLevel,\r\n size,\r\n minViewWidth: size * 4,\r\n });\r\n this.levelIndexByTileLevel.set(tileLevel, index);\r\n }\r\n return levels;\r\n }\r\n\r\n public addPoints(points: PointData[]) {\r\n this.points = points;\r\n this._buildLevels();\r\n }\r\n\r\n public appendPoints(newPoints: PointData[], isUpdate: boolean = true) {\r\n for (const pt of newPoints) {\r\n this._preparePointLevelRange(pt);\r\n this.points.push(pt);\r\n }\r\n for (const pt of newPoints) {\r\n this._addPointToGrid(pt);\r\n }\r\n if (isUpdate) {\r\n this._scheduleUpdate();\r\n }\r\n }\r\n\r\n\r\n private _scheduleUpdate() {\r\n if (this._updateTimer !== null) {\r\n clearTimeout(this._updateTimer);\r\n }\r\n this._updateTimer = window.setTimeout(() => {\r\n this._update();\r\n this._cameraDirty=true\r\n this._updateTimer = null;\r\n }, this._updateDelay);\r\n }\r\n\r\n public updatePoint(newData: Partial<PointData>) {\r\n const idx = this.points.findIndex((p: PointData) => p.id === newData.id);\r\n if (idx === -1) return;\r\n\r\n const oldPt = this.points[idx];\r\n\r\n for (const level of this.levels) {\r\n const tileLevel = level.level;\r\n const grid = this.gridLayers.get(tileLevel);\r\n if (!grid) continue;\r\n\r\n const carto = this.Cesium.Cartographic.fromDegrees(oldPt.lon, oldPt.lat);\r\n const tileXY = this.tilingScheme.positionToTileXY(\r\n carto,\r\n tileLevel,\r\n new this.Cesium.Cartesian2(),\r\n );\r\n if (!tileXY) continue;\r\n const key = `${tileXY.x}_${tileXY.y}`;\r\n const cell = grid.get(key);\r\n if (cell) {\r\n // 1. remove from allPoints\r\n const iAll = cell.allPoints.findIndex((p: PointData) => p.id === newData.id);\r\n if (iAll !== -1) cell.allPoints.splice(iAll, 1);\r\n\r\n // 2. remove from skipPoints or groups\r\n if (oldPt.data?.billboard?.[0]?.skipAggregation) {\r\n const iSkip = cell.skipPoints.findIndex((p: PointData) => p.id === newData.id);\r\n if (iSkip !== -1) cell.skipPoints.splice(iSkip, 1);\r\n } else {\r\n const theme = this.groupByTheme ? oldPt.data?.theme : this.clusterTheme;\r\n const group = cell.groups.get(theme);\r\n if (group) {\r\n const iGroup = group.findIndex((p: PointData) => p.id === newData.id);\r\n if (iGroup !== -1) group.splice(iGroup, 1);\r\n if (group.length === 0) cell.groups.delete(theme);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 替换数据\r\n const updated = { ...oldPt, ...newData };\r\n this.points[idx] = updated;\r\n\r\n // 加入新 grid\r\n this._addPointToGrid(updated);\r\n this._update();\r\n }\r\n\r\n public removePointsById(ids: string[]) {\r\n const idSet = new Set(ids);\r\n this.points = this.points.filter((p: PointData) => !idSet.has(p.id));\r\n\r\n for (const level of this.levels) {\r\n const grid = this.gridLayers.get(level.level);\r\n if (!grid) continue;\r\n for (const [key, cell] of grid.entries()) {\r\n // Filter allPoints\r\n cell.allPoints = cell.allPoints.filter((p: PointData) => !idSet.has(p.id));\r\n\r\n // Filter skipPoints\r\n cell.skipPoints = cell.skipPoints.filter((p: PointData) => !idSet.has(p.id));\r\n\r\n // Filter groups\r\n for (const [groupKey, groupPoints] of cell.groups.entries()) {\r\n const filteredGroup = groupPoints.filter((p: PointData) => !idSet.has(p.id));\r\n if (filteredGroup.length === 0) {\r\n cell.groups.delete(groupKey);\r\n } else {\r\n cell.groups.set(groupKey, filteredGroup);\r\n }\r\n }\r\n\r\n // Cleanup empty cell if needed (optional)\r\n if (cell.allPoints.length === 0) {\r\n grid.delete(key);\r\n }\r\n }\r\n }\r\n this._update();\r\n }\r\n\r\n private _buildLevels() {\r\n this.gridLayers.clear();\r\n for (const level of this.levels) {\r\n this.gridLayers.set(level.level, new Map<string, GridCell>());\r\n }\r\n for (const pt of this.points) {\r\n this._addPointToGrid(pt);\r\n }\r\n }\r\n\r\n private _addPointToGrid(pt: PointData) {\r\n for (const level of this.levels) {\r\n const tileLevel = level.level;\r\n const grid = this.gridLayers.get(tileLevel);\r\n if (!grid) continue;\r\n\r\n const carto = this.Cesium.Cartographic.fromDegrees(pt.lon, pt.lat);\r\n const tileXY = this.tilingScheme.positionToTileXY(\r\n carto,\r\n tileLevel,\r\n new this.Cesium.Cartesian2(),\r\n );\r\n if (!tileXY) continue;\r\n const key = `${tileXY.x}_${tileXY.y}`;\r\n\r\n let cell = grid.get(key);\r\n if (!cell) {\r\n cell = {\r\n allPoints: [],\r\n groups: new Map(),\r\n skipPoints: [],\r\n };\r\n grid.set(key, cell);\r\n }\r\n\r\n cell.allPoints.push(pt);\r\n\r\n if (pt.data?.billboard?.[0]?.skipAggregation) {\r\n cell.skipPoints.push(pt);\r\n } else {\r\n const theme = this.groupByTheme ? pt.data?.billboard?.[0]?.theme : this.clusterTheme;\r\n if (!cell.groups.has(theme)) {\r\n cell.groups.set(theme, []);\r\n }\r\n cell.groups.get(theme)!.push(pt);\r\n }\r\n }\r\n }\r\n\r\n // 在添加/更新点时预计算并缓存地图层级区间\r\n private _preparePointLevelRange(p: PointData) {\r\n const data: any = p.data || {};\r\n let min: number | null | undefined = data.minLevel;\r\n let max: number | null | undefined = data.maxLevel;\r\n\r\n // 兼容可能的 levelRange 结构\r\n const range: any = data.levelRange;\r\n if (Array.isArray(range)) {\r\n if (range.length > 0 && (min === undefined || min === null)) min = range[0];\r\n if (range.length > 1 && (max === undefined || max === null)) max = range[1];\r\n } else if (range && typeof range === 'object') {\r\n if ((min === undefined || min === null) && typeof range.min === 'number') min = range.min;\r\n if ((max === undefined || max === null) && typeof range.max === 'number') max = range.max;\r\n }\r\n\r\n const effectiveMin =\r\n min === undefined || min === null ? this.defaultMinLevel : Number(min) || this.defaultMinLevel;\r\n const effectiveMax =\r\n max === undefined || max === null ? this.defaultMaxLevel : Number(max) || this.defaultMaxLevel;\r\n\r\n p.__minLevel = effectiveMin;\r\n p.__maxLevel = effectiveMax;\r\n }\r\n\r\n private _isVisibleAtLevel(p: PointData, currentLevel: number | null): boolean {\r\n if (currentLevel == null) return true;\r\n // 兜底:如果还没有预计算,按需补一次,避免旧调用路径漏掉\r\n if (p.__minLevel === undefined || p.__maxLevel === undefined) {\r\n this._preparePointLevelRange(p);\r\n }\r\n const min = p.__minLevel ?? this.defaultMinLevel;\r\n const max = p.__maxLevel ?? this.defaultMaxLevel;\r\n return currentLevel >= min && currentLevel <= max;\r\n }\r\n\r\n\r\n private _update() {\r\n if (!this.labelPool) return;\r\n this._syncTilingSchemeAndLevels();\r\n this.labelPool.reset();\r\n\r\n if (this.debugCurrentGrids) this._clearDebugGrids();\r\n\r\n const effectiveThreshold =\r\n this.points.length < this.minGlobalPointCount ? Infinity : this.threshold;\r\n\r\n let labelCount = 0;\r\n\r\n const processCell = (\r\n levelIdx: number,\r\n lonIdx: number,\r\n latIdx: number,\r\n viewTileLevel: number | null,\r\n ) => {\r\n labelCount = this._processCell(\r\n levelIdx,\r\n lonIdx,\r\n latIdx,\r\n viewTileLevel,\r\n effectiveThreshold,\r\n labelCount,\r\n );\r\n };\r\n\r\n try {\r\n const tiles = this._getSurfaceTiles();\r\n if (!tiles || tiles.length === 0) {\r\n this._handleNoSurfaceTiles(labelCount);\r\n return;\r\n }\r\n this._tilesRetryCount = 0;\r\n this._processTiles(tiles, processCell);\r\n } catch (e) {\r\n this.labelPool.cleanup();\r\n return;\r\n }\r\n this.labelPool.cleanup();\r\n }\r\n\r\n private _getSurfaceTiles(): any[] | undefined {\r\n const globe = this.viewer.scene && this.viewer.scene.globe;\r\n const surface = globe && (globe as any)._surface;\r\n if (!surface) return undefined;\r\n return (\r\n (surface as any)._tilesToRender || (surface as any)._tilesToRenderByTextureCount\r\n );\r\n }\r\n\r\n private _handleNoSurfaceTiles(labelCount: number) {\r\n for (const p of this.points) {\r\n if (labelCount >= this.displayLimit) break;\r\n if (p.data?.show === false) continue;\r\n this.labelPool.add(p.data, {\r\n id: `point-${p.id}`,\r\n lon: p.lon,\r\n lat: p.lat,\r\n height: p.height,\r\n theme: p.data?.billboard?.[0]?.theme || this.pointTheme,\r\n style: (p as any).style,\r\n });\r\n labelCount++;\r\n }\r\n this.labelPool.cleanup();\r\n if (this.points.length > 0 && this._tilesRetryCount < this._tilesRetryMax) {\r\n this._tilesRetryCount++;\r\n this._scheduleUpdate();\r\n }\r\n }\r\n\r\n private _resolveLevelIndex(tileLevel: number): number | undefined {\r\n let levelIdx = this.levelIndexByTileLevel.get(tileLevel);\r\n if (levelIdx !== undefined) return levelIdx;\r\n if (this.levels.length === 0) return undefined;\r\n\r\n const minDefinedLevel = this.levels[0].level;\r\n const maxDefinedLevel = this.levels[this.levels.length - 1].level;\r\n if (tileLevel > maxDefinedLevel) {\r\n return this.levels.length - 1;\r\n }\r\n if (tileLevel < minDefinedLevel) {\r\n return 0;\r\n }\r\n\r\n let nearestIndex = 0;\r\n let minDiff = Infinity;\r\n for (let i = 0; i < this.levels.length; i++) {\r\n const diff = Math.abs(this.levels[i].level - tileLevel);\r\n if (diff < minDiff) {\r\n minDiff = diff;\r\n nearestIndex = i;\r\n }\r\n }\r\n return nearestIndex;\r\n }\r\n\r\n private _isTerrainEnabled(): boolean {\r\n // 根据 TerrainManage 的实现,如果使用的是 EllipsoidTerrainProvider,\r\n // 认为「未开启地形」,否则视为开启了地形。\r\n const viewerTerrain = (this.viewer as any).terrainProvider;\r\n const scene = this.viewer.scene;\r\n const globe = scene && scene.globe;\r\n const globeTerrain = globe && (globe as any).terrainProvider;\r\n const terrainProvider = viewerTerrain || globeTerrain;\r\n\r\n if (!terrainProvider) return false;\r\n return !(terrainProvider instanceof this.Cesium.EllipsoidTerrainProvider);\r\n }\r\n\r\n\r\n private _getGridRefLevel(tileLevel: number): number {\r\n let level = tileLevel;\r\n if (this._isTerrainEnabled()) {\r\n level += this.terrainLevelOffset;\r\n }\r\n if (this.levels.length > 0) {\r\n const maxDefinedLevel = this.levels[this.levels.length - 1].level;\r\n if (level > maxDefinedLevel) level = maxDefinedLevel;\r\n }\r\n return level;\r\n }\r\n\r\n private _processTiles(\r\n tiles: any[],\r\n processCell: (\r\n levelIdx: number,\r\n lonIdx: number,\r\n latIdx: number,\r\n viewTileLevel: number | null,\r\n ) => void,\r\n ) {\n const visited = new Set<string>();\n // 地形开启时,computeViewRectangle 基于椭球,和真实地形可见区域可能不一致,\n // 倾斜视角下会把应命中的格网提前过滤掉,因此关闭该裁剪。\n const shouldFilterByViewRectangle = !this._isTerrainEnabled();\n\r\n // 预先计算当前相机视口对应的椭球矩形,用于在向下细分时过滤视口外的子格网\r\n const scene = this.viewer.scene;\r\n const globe = scene && scene.globe;\r\n const ellipsoid = globe && globe.ellipsoid;\r\n const viewRectangle =\r\n ellipsoid && scene.camera.computeViewRectangle(ellipsoid);\r\n\r\n const isCellInView = (x: number, y: number, level: number): boolean => {\n if (!shouldFilterByViewRectangle) return true;\n if (!viewRectangle) return true;\n const cellRect = this.tilingScheme.tileXYToRectangle(x, y, level);\n if (!cellRect) return false;\n // 简单的经纬度矩形相交判断(不考虑跨日期变更线的极端情况)\r\n if (cellRect.east <= viewRectangle.west) return false;\r\n if (cellRect.west >= viewRectangle.east) return false;\r\n if (cellRect.north <= viewRectangle.south) return false;\r\n if (cellRect.south >= viewRectangle.north) return false;\r\n return true;\r\n };\r\n\r\n for (const t of tiles) {\r\n const rect = t.rectangle;\r\n const tileLevel = t._level ?? t.level;\r\n if (!rect || typeof tileLevel !== 'number') continue;\r\n\r\n // gridRefLevel 为“用于选择聚合格网层级”的参考层级:\r\n // - 未开地形时 == tileLevel\r\n // - 开启地形时在 tileLevel 基础上整体提升 terrainLevelOffset 级,\r\n // 并且不超过预设的最大格网层级\r\n const gridRefLevel = this._getGridRefLevel(tileLevel);\r\n\r\n const levelIdx = this._resolveLevelIndex(gridRefLevel);\r\n if (levelIdx === undefined) continue;\r\n const targetTileLevel = this.levels[levelIdx].level;\r\n\r\n\r\n const tileX = (t as any)._x ?? (t as any).x;\r\n const tileY = (t as any)._y ?? (t as any).y;\r\n\r\n if (typeof tileX === 'number' && typeof tileY === 'number') {\r\n const levelDelta = tileLevel - targetTileLevel;\r\n\r\n // 注意:levelDelta 仅表示两个层级之间的“差值”,用于将当前渲染 tile\r\n // 映射到聚合格网层级;与是否开启地形无关,不能作为 terrain 特判条件。\r\n if (levelDelta >= 0) {\r\n // 视图层级比聚合层级细或相等:把多个视图 tile 合并到父格网\r\n const factor = 1 << levelDelta;\r\n const parentX = Math.floor(tileX / factor);\r\n const parentY = Math.floor(tileY / factor);\r\n const key = `${targetTileLevel}_${parentX}_${parentY}`;\r\n if (visited.has(key)) continue;\r\n visited.add(key);\r\n processCell(levelIdx, parentX, parentY, tileLevel);\r\n } else {\r\n // 视图层级比聚合层级粗:按照四叉树向下细分若干层;\r\n // 这里对向下细分的层级数做一个上限(this.maxRefineLevels),\r\n // 避免 level 差过大时一次性生成过多子格网。\r\n const refineLevels = Math.min(-levelDelta, this.maxRefineLevels);\r\n const factor = 1 << refineLevels; // 每个方向细分倍数\r\n const startX = tileX * factor;\r\n const startY = tileY * factor;\r\n\r\n for (let dx = 0; dx < factor; dx++) {\r\n for (let dy = 0; dy < factor; dy++) {\r\n const childX = startX + dx;\r\n const childY = startY + dy;\r\n // 只处理与当前视口有交集的子格网\r\n if (!isCellInView(childX, childY, targetTileLevel)) continue;\r\n const key = `${targetTileLevel}_${childX}_${childY}`;\r\n if (visited.has(key)) continue;\r\n visited.add(key);\r\n processCell(levelIdx, childX, childY, tileLevel);\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n continue;\r\n }\r\n\r\n const level = this.levels[levelIdx];\r\n const size = level.size;\r\n const tileWestDeg = this.Cesium.Math.toDegrees(rect.west);\r\n const tileEastDeg = this.Cesium.Math.toDegrees(rect.east);\r\n const tileSouthDeg = this.Cesium.Math.toDegrees(rect.south);\r\n const tileNorthDeg = this.Cesium.Math.toDegrees(rect.north);\r\n\r\n const westIdx = Math.floor((tileWestDeg - -180) / size);\r\n const eastIdx = Math.floor((tileEastDeg - -180) / size);\r\n const southIdx = Math.floor((tileSouthDeg - -90) / size);\r\n const northIdx = Math.floor((tileNorthDeg - -90) / size);\r\n\r\n for (let lonIdx = westIdx; lonIdx <= eastIdx; lonIdx++) {\r\n for (let latIdx = southIdx; latIdx <= northIdx; latIdx++) {\r\n // 只处理与当前视口有交集的格网\r\n if (!isCellInView(lonIdx, latIdx, targetTileLevel)) continue;\r\n const key = `${targetTileLevel}_${lonIdx}_${latIdx}`;\r\n if (visited.has(key)) continue;\r\n visited.add(key);\r\n processCell(levelIdx, lonIdx, latIdx, tileLevel);\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n private _processCell(\r\n levelIdx: number,\r\n lonIdx: number,\r\n latIdx: number,\r\n viewTileLevel: number | null,\r\n effectiveThreshold: number,\r\n labelCount: number,\r\n ): number {\r\n if (labelCount >= this.displayLimit) return labelCount;\r\n if (levelIdx < 0) return labelCount;\r\n // 当超过最大层级时,强制使用最大层级\r\n if (levelIdx >= this.levels.length) {\r\n levelIdx = this.levels.length - 1;\r\n }\r\n\r\n const context = this._getCellContext(levelIdx, lonIdx, latIdx, viewTileLevel);\r\n if (!context) return labelCount;\r\n\r\n labelCount = this._processCellSkipPoints(context, labelCount);\r\n if (labelCount >= this.displayLimit) {\r\n this._debugDrawCell(context);\r\n return labelCount;\r\n }\r\n\r\n labelCount = this._processCellGroups(context, effectiveThreshold, labelCount);\r\n this._debugDrawCell(context);\r\n\r\n return labelCount;\r\n }\r\n\r\n private _getCellContext(\r\n levelIdx: number,\r\n lonIdx: number,\r\n latIdx: number,\r\n viewTileLevel: number | null,\r\n ) {\r\n const level = this.levels[levelIdx];\r\n const tileLevel = level.level;\r\n const grid = this.gridLayers.get(tileLevel);\r\n if (!grid) return null;\r\n\r\n const key = `${lonIdx}_${latIdx}`;\r\n const cell = grid.get(key);\r\n if (!cell) return null;\r\n\r\n const rect = this.tilingScheme.tileXYToRectangle(lonIdx, latIdx, tileLevel);\r\n const west = this.Cesium.Math.toDegrees(rect.west);\r\n const south = this.Cesium.Math.toDegrees(rect.south);\r\n const east = this.Cesium.Math.toDegrees(rect.east);\r\n const north = this.Cesium.Math.toDegrees(rect.north);\r\n const centerLon = (west + east) / 2;\r\n const centerLat = (south + north) / 2;\r\n\r\n return {\r\n levelIdx,\r\n tileLevel,\r\n lonIdx,\r\n latIdx,\r\n key,\r\n cell,\r\n rect,\r\n west,\r\n south,\r\n east,\r\n north,\r\n centerLon,\r\n centerLat,\r\n viewTileLevel,\r\n };\r\n }\r\n\r\n private _processCellSkipPoints(context: any, labelCount: number): number {\r\n const { cell, viewTileLevel } = context;\r\n const currentLevel = viewTileLevel;\r\n\r\n for (const p of cell.skipPoints) {\r\n if (p.data?.show === false) continue;\r\n if (labelCount >= this.displayLimit) break;\r\n if (!this._isVisibleAtLevel(p, currentLevel)) continue;\r\n this.labelPool.add(p.data, {\r\n id: `point-${p.id}`,\r\n lon: p.lon,\r\n lat: p.lat,\r\n height: p.height,\r\n theme: p.data?.billboard?.[0]?.theme || this.pointTheme,\r\n style: p.style,\r\n });\r\n labelCount++;\r\n }\r\n\r\n return labelCount;\r\n }\r\n\r\n private _processCellGroups(\r\n context: any,\r\n effectiveThreshold: number,\r\n labelCount: number,\r\n ): number {\r\n const {\r\n levelIdx,\r\n lonIdx,\r\n latIdx,\r\n cell,\r\n centerLon,\r\n centerLat,\r\n viewTileLevel,\r\n } = context;\r\n const currentLevel = viewTileLevel;\r\n\r\n for (const [groupKey, rawGroupPoints] of cell.groups) {\r\n const groupPoints = rawGroupPoints.filter((p: PointData) => p.data?.show !== false);\r\n if (groupPoints.length === 0) continue;\r\n\r\n let clusterLon = centerLon;\r\n let clusterLat = centerLat;\r\n let clusterHeight = groupPoints[0]?.height || 0;\r\n if (this.centralPointMode == 'firstPoint') {\r\n clusterLon = groupPoints[0]?.lon || 0;\r\n clusterLat = groupPoints[0]?.lat || 0;\r\n clusterHeight = groupPoints[0]?.height || 0;\r\n }\r\n\r\n const isLastLevel = levelIdx === this.levels.length - 1;\r\n\r\n if (isLastLevel || groupPoints.length < effectiveThreshold) {\r\n for (const p of groupPoints) {\r\n if (labelCount >= this.displayLimit) break;\r\n if (!this._isVisibleAtLevel(p, currentLevel)) continue;\r\n this.labelPool.add(p.data, {\r\n id: `point-${p.id}`,\r\n lon: p.lon,\r\n lat: p.lat,\r\n height: p.height,\r\n theme: p.data?.billboard?.[0]?.theme || this.pointTheme,\r\n style: p.style,\r\n });\r\n labelCount++;\r\n }\r\n } else {\r\n if (labelCount >= this.displayLimit) {\r\n return labelCount;\r\n }\r\n\r\n const visiblePoints =\r\n currentLevel == null\r\n ? groupPoints\r\n : groupPoints.filter((p: PointData) => this._isVisibleAtLevel(p, currentLevel));\r\n\r\n if (!visiblePoints.length) return labelCount;\r\n\r\n const customClusterTheme = visiblePoints[0]?.data?.billboard?.[0]?.theme;\r\n const finalTheme = customClusterTheme || this.clusterTheme;\r\n const clusterId = this.groupByTheme\r\n ? `cluster-${levelIdx}-${lonIdx}-${latIdx}-${groupKey}`\r\n : `cluster-${levelIdx}-${lonIdx}-${latIdx}`;\r\n this.labelPool.add(\r\n {\r\n id: clusterId,\r\n billboard: visiblePoints[0]?.data?.billboard || [],\r\n count: visiblePoints.length,\r\n gridKey: `${lonIdx}_${latIdx}`,\r\n points: visiblePoints,\r\n aggregationGroup: groupKey,\r\n },\r\n {\r\n id: clusterId,\r\n lon: clusterLon,\r\n lat: clusterLat,\r\n height: clusterHeight,\r\n theme: finalTheme,\r\n },\r\n );\r\n labelCount++;\r\n }\r\n }\r\n\r\n return labelCount;\r\n }\r\n\r\n private _debugDrawCell(context: any) {\r\n if (!this.debugCurrentGrids) return;\r\n const { levelIdx, west, south, east, north, lonIdx, latIdx } = context;\r\n const tileLevelForDebug = this.levels[levelIdx].level;\r\n this._drawDebugGrid(\r\n west,\r\n south,\r\n east,\r\n north,\r\n `L:${tileLevelForDebug} X:${lonIdx} Y:${latIdx}`,\r\n );\r\n }\r\n\r\n refresh() {\r\n this._update();\r\n }\r\n\r\n private _drawDebugGrid(\r\n west: number,\r\n south: number,\r\n east: number,\r\n north: number,\r\n text: string,\r\n ) {\r\n const rect = this.Cesium.Rectangle.fromDegrees(west, south, east, north);\r\n const positions = this.Cesium.Cartesian3.fromDegreesArray([\r\n west,\r\n south,\r\n east,\r\n south,\r\n east,\r\n north,\r\n west,\r\n north,\r\n west,\r\n south,\r\n ]);\r\n const entity = this.viewer.entities.add({\r\n rectangle: {\r\n coordinates: rect,\r\n material: this.Cesium.Color.YELLOW.withAlpha(0.2),\r\n outline: true,\r\n outlineColor: this.Cesium.Color.RED,\r\n // 贴地绘制调试网格\r\n heightReference: this.Cesium.HeightReference.CLAMP_TO_GROUND,\r\n classificationType: this.Cesium.ClassificationType.TERRAIN,\r\n },\r\n // 额外一圈贴地边框线,避免依赖 rectangle.outline\r\n polyline: {\r\n positions,\r\n width: 2,\r\n material: this.Cesium.Color.RED,\r\n clampToGround: true,\r\n },\r\n label: {\r\n text,\r\n font: '14px sans-serif',\r\n fillColor: this.Cesium.Color.BLACK,\r\n outlineColor: this.Cesium.Color.WHITE,\r\n outlineWidth: 2,\r\n style: this.Cesium.LabelStyle.FILL_AND_OUTLINE,\r\n verticalOrigin: this.Cesium.VerticalOrigin.CENTER,\r\n horizontalOrigin: this.Cesium.HorizontalOrigin.CENTER,\r\n },\r\n });\r\n this.debugGrids.push(entity);\r\n }\r\n\r\n private _clearDebugGrids() {\r\n for (const e of this.debugGrids) {\r\n this.viewer.entities.remove(e);\r\n }\r\n this.debugGrids = [];\r\n }\r\n\r\n private _ensureDebugImageryLayer() {\r\n if (this.debugTileCoordLayer) return;\r\n if (!this.viewer || !this.viewer.imageryLayers) return;\r\n\r\n const options: any = {\r\n tilingScheme: this.tilingScheme,\r\n };\r\n\r\n this.debugTileCoordLayer = this.viewer.imageryLayers.addImageryProvider(\r\n new this.Cesium.TileCoordinatesImageryProvider(options),\r\n );\r\n }\r\n\r\n private _removeDebugImageryLayer() {\r\n if (!this.debugTileCoordLayer || !this.viewer || !this.viewer.imageryLayers) return;\r\n try {\r\n this.viewer.imageryLayers.remove(this.debugTileCoordLayer, false);\r\n } catch (e) {\r\n // ignore\r\n }\r\n this.debugTileCoordLayer = null;\r\n }\r\n\r\n public destroy() {\r\n\r\n if (this._cameraChangedHandler) {\r\n this.viewer.camera.changed.removeEventListener(this._cameraChangedHandler);\r\n this._cameraChangedHandler = null;\r\n }\r\n const scene = this.viewer.scene;\r\n const globe = scene && scene.globe;\r\n if (globe && this._tileLoadListener) {\r\n (globe as any).tileLoadProgressEvent.removeEventListener(this._tileLoadListener);\r\n this._tileLoadListener = null;\r\n }\r\n if (this._updateTimer !== null) {\r\n clearTimeout(this._updateTimer);\r\n this._updateTimer = null;\r\n }\r\n this.labelPool.reset();\r\n this._clearDebugGrids();\r\n this._removeDebugImageryLayer();\r\n }\r\n}\r\n\r\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import baseGet from './_baseGet.js';\nimport baseSlice from './_baseSlice.js';\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nexport default parent;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","import castPath from './_castPath.js';\nimport last from './last.js';\nimport parent from './_parent.js';\nimport toKey from './_toKey.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n\n // Prevent prototype pollution:\n // https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n // https://github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh\n var index = -1,\n length = path.length;\n\n if (!length) {\n return true;\n }\n\n while (++index < length) {\n var key = toKey(path[index]);\n\n // Always block \"__proto__\" anywhere in the path if it's not expected\n if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n return false;\n }\n\n // Block constructor/prototype as non-terminal traversal keys to prevent\n // escaping the object graph into built-in constructors and prototypes.\n if ((key === 'constructor' || key === 'prototype') && index < length - 1) {\n return false;\n }\n }\n\n var obj = parent(object, path);\n return obj == null || delete obj[toKey(last(path))];\n}\n\nexport default baseUnset;\n","import isPlainObject from './isPlainObject.js';\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n}\n\nexport default customOmitClone;\n","import arrayMap from './_arrayMap.js';\nimport baseClone from './_baseClone.js';\nimport baseUnset from './_baseUnset.js';\nimport castPath from './_castPath.js';\nimport copyObject from './_copyObject.js';\nimport customOmitClone from './_customOmitClone.js';\nimport flatRest from './_flatRest.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n});\n\nexport default omit;\n","interface DynamicImgMaterialOptions {\r\n color?: any; // 通常是 Cesium.Color | Cesium.Property\r\n duration?: number;\r\n image: string;\r\n count: number;\r\n freely?: 'vertical' | 'horizontal';\r\n direction: string; // 例如 '+' 或 '-',传给 GLSL\r\n isCustomColor?: boolean;\r\n materialType?: string;\r\n}\r\n\r\n/**\r\n * 注册动态图片材质并返回 TrailLineMaterialProperty 实例\r\n */\r\nexport function getDynamicImgMaterial(Cesium: any, options: DynamicImgMaterialOptions): any {\r\n const MaterialType =\r\n options.materialType || 'DynamicImgMaterial' + Date.now() + Math.floor(Math.random() * 1000);\r\n\r\n // 构造材质属性的构造函数 —— 保留 function + prototype 形式\r\n function TrailLineMaterialProperty(this: any, opts: DynamicImgMaterialOptions) {\r\n this._definitionChanged = new Cesium.Event();\r\n this._color = opts.color;\r\n this._colorSubscription = undefined;\r\n this.color = opts.color;\r\n this.duration = opts.duration;\r\n this._time = Date.now();\r\n }\r\n\r\n Object.defineProperties(TrailLineMaterialProperty.prototype, {\r\n isConstant: {\r\n get(): boolean {\r\n return false;\r\n },\r\n },\r\n definitionChanged: {\r\n get(): any {\r\n return this._definitionChanged;\r\n },\r\n },\r\n color: Cesium.createPropertyDescriptor('color'),\r\n });\r\n\r\n TrailLineMaterialProperty.prototype.getType = function (): string {\r\n return MaterialType;\r\n };\r\n\r\n TrailLineMaterialProperty.prototype.getValue = function (time: any, result?: any): any {\r\n if (!Cesium.defined(result)) {\r\n result = {};\r\n }\r\n result.color = Cesium.Property.getValueOrClonedDefault(\r\n this._color,\r\n time,\r\n Cesium.Color.WHITE,\r\n result.color,\r\n );\r\n result.image = options.image;\r\n // if (this.duration) {\r\n // result.time = ((Date.now() - this._time) % this.duration) / this.duration;\r\n // }\r\n return result;\r\n };\r\n\r\n TrailLineMaterialProperty.prototype.equals = function (other: any): boolean {\r\n return (\r\n this === other ||\r\n (other instanceof TrailLineMaterialProperty &&\r\n Cesium.Property.equals(this._color, (other as any)._color))\r\n );\r\n };\r\n\r\n // 着色器源码生成\r\n const _getWallShader = function (opts: {\r\n count: number;\r\n freely: string;\r\n direction: string;\r\n duration: number;\r\n isCustomColor?: boolean;\r\n }): string {\r\n let material = `\r\n czm_material czm_getMaterial(czm_materialInput materialInput)\r\n {\r\n czm_material material = czm_getDefaultMaterial(materialInput);\r\n vec2 st = materialInput.st;\r\n float time = fract(mod(float(czm_frameNumber * 33.0) , float(${opts.duration})) / float(${opts.duration}));\r\n ${\r\n opts.freely === 'vertical'\r\n ? `vec4 colorImage = texture(image, vec2(fract(float(${opts.count}) *st.t ${opts.direction} time), fract(st.s)));`\r\n : `vec4 colorImage = texture(image, vec2(fract(float(${opts.count}) *st.s ${opts.direction} time), fract(st.t)));`\r\n }\r\n ${opts.isCustomColor ? 'material.diffuse = color.rgb;' : 'material.diffuse = colorImage.rgb;'}\r\n material.alpha = colorImage.a;\\n\\\r\n return material;\\n\\\r\n }`;\r\n return material;\r\n };\r\n\r\n Cesium.Material._materialCache.addMaterial(MaterialType, {\r\n fabric: {\r\n type: MaterialType,\r\n uniforms: {\r\n color: options.color,\r\n image: options.image,\r\n time: 1000,\r\n },\r\n source: _getWallShader({\r\n count: options.count,\r\n freely: options.freely || '',\r\n direction: options.direction,\r\n duration: options.duration || 100,\r\n isCustomColor: options.isCustomColor,\r\n }),\r\n },\r\n translucent(): boolean {\r\n return true;\r\n },\r\n });\r\n\r\n return new (TrailLineMaterialProperty as any)(options);\r\n}\r\n\r\nexport function getWallMaterial(Cesium: any, options: any) {\r\n const MaterialType =\r\n options.MaterialType || 'wallType' + new Date().getTime() + parseInt(Math.random() * 1000 + '');\r\n function TrailLineMaterialProperty(this: any, options: any) {\r\n // 默认参数设置\r\n this._definitionChanged = new Cesium.Event();\r\n this._color = undefined;\r\n this._colorSubscription = undefined;\r\n this.color = options.color;\r\n this.duration = options.duration;\r\n this._time = new Date().getTime();\r\n }\r\n Object.defineProperties(TrailLineMaterialProperty.prototype, {\r\n isConstant: {\r\n get: function () {\r\n return false;\r\n },\r\n },\r\n definitionChanged: {\r\n get: function (this: any) {\r\n return this._definitionChanged;\r\n },\r\n },\r\n color: Cesium.createPropertyDescriptor('color'),\r\n });\r\n TrailLineMaterialProperty.prototype.getType = function () {\r\n return MaterialType;\r\n };\r\n TrailLineMaterialProperty.prototype.getValue = function (this: any, time: any, result: any) {\r\n if (!Cesium.defined(result)) {\r\n result = {};\r\n }\r\n // result.color =this._color || Cesium.Color.WHITE;\r\n result.image = options.image;\r\n if (this.duration) {\r\n result.time = ((new Date().getTime() - this._time) % this.duration) / this.duration;\r\n }\r\n return result;\r\n };\r\n TrailLineMaterialProperty.prototype.equals = function (this: any, other: any) {\r\n return (\r\n this === other ||\r\n (other instanceof TrailLineMaterialProperty &&\r\n Cesium.Property.equals(this._color, (other as any)._color))\r\n );\r\n };\r\n\r\n const _getWallShader = function (options: any) {\r\n let materail =\r\n 'czm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\r\n {\\n\\\r\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\r\n vec2 st = materialInput.st;\\n\\\r\n \\n ';\r\n if (options.freely == 'vertical') {\r\n //(由下到上)\r\n\r\n materail +=\r\n 'vec4 colorImage = texture(image, vec2(fract(float(' +\r\n options.count +\r\n ')*st.t ' +\r\n options.direction +\r\n ' time), fract(st.s)));\\n ';\r\n } else {\r\n //(逆时针)\r\n\r\n materail +=\r\n 'vec4 colorImage = texture(image, vec2(fract(float(' +\r\n options.count +\r\n ')*st.s ' +\r\n options.direction +\r\n ' time), fract(st.t)));\\n ';\r\n }\r\n //泛光\r\n materail +=\r\n 'vec4 fragColor;\\n\\\r\n fragColor.rgb = (color.rgb) / 1.0;\\n\\\r\n fragColor = czm_gammaCorrect(fragColor);\\n ';\r\n\r\n materail +=\r\n ' material.diffuse = color.rgb;\\n\\\r\n material.alpha = colorImage.a * color.a;\\n\\\r\n material.emission = fragColor.rgb;\\n\\\r\n \\n\\\r\n return material;\\n\\\r\n }\\n\\\r\n ';\r\n return materail;\r\n };\r\n\r\n Cesium.Material._materialCache.addMaterial(MaterialType, {\r\n fabric: {\r\n type: MaterialType,\r\n uniforms: {\r\n color: options.color || new Cesium.Color(1.0, 1.0, 1.0, 1.0),\r\n image: options.image,\r\n time: 0,\r\n },\r\n source: _getWallShader({\r\n count: options.count,\r\n freely: options.freely,\r\n direction: options.direction,\r\n }),\r\n },\r\n translucent: function () {\r\n return true;\r\n },\r\n });\r\n return new (TrailLineMaterialProperty as any)(options);\r\n}\r\n","interface PolylineFlowMaterialOptions {\r\n color?: any; // 一般是 Cesium.Color | Cesium.Property\r\n duration?: number; // 流动持续时间\r\n materialType?: string;\r\n}\r\n\r\n/**\r\n * 注册 polyline 流动材质并返回对应的 MaterialProperty\r\n */\r\nexport function getPolylineFlowMaterialProperty(\r\n Cesium: any,\r\n options: PolylineFlowMaterialOptions,\r\n): any {\r\n const Color = Cesium.Color;\r\n const defineProperties = Object.defineProperties;\r\n const Event = Cesium.Event;\r\n const createPropertyDescriptor = Cesium.createPropertyDescriptor;\r\n const Property = Cesium.Property;\r\n const defaultValue = <T>(value: T | undefined, defaultVal: T): T =>\r\n value === undefined ? defaultVal : value;\r\n const DEFAULT_EMPTY_OBJECT: any = {};\r\n \r\n let _materialType =\r\n options.materialType || 'PolylineFlow' + Date.now() + Math.floor(Math.random() * 1000);\r\n\r\n // 构造函数保持 function + prototype 形式\r\n function PolylineFlowMaterialProperty(this: any, opts: PolylineFlowMaterialOptions) {\r\n opts = defaultValue(opts, DEFAULT_EMPTY_OBJECT);\r\n this._definitionChanged = new Event();\r\n this._color = undefined;\r\n this._colorSubscription = undefined;\r\n this.color = opts.color || Color.fromBytes(0, 255, 255, 255);\r\n this._duration = undefined;\r\n this._durationSubscription = undefined;\r\n this.duration = defaultValue(opts.duration, 45);\r\n }\r\n\r\n defineProperties(PolylineFlowMaterialProperty.prototype, {\r\n isConstant: {\r\n get(): boolean {\r\n return false;\r\n },\r\n },\r\n definitionChanged: {\r\n get(): any {\r\n return this._definitionChanged;\r\n },\r\n },\r\n });\r\n\r\n PolylineFlowMaterialProperty.prototype.getType = function (_time: any): string {\r\n return _materialType;\r\n };\r\n\r\n PolylineFlowMaterialProperty.prototype.getValue = function (time: any, result?: any): any {\r\n if (!result) {\r\n result = {};\r\n }\r\n result.color = Property.getValueOrClonedDefault(\r\n this._color,\r\n time,\r\n Cesium.Color.WHITE,\r\n result.color,\r\n );\r\n result.duration = this._duration;\r\n return result;\r\n };\r\n\r\n PolylineFlowMaterialProperty.prototype.equals = function (other?: any): boolean {\r\n return (\r\n this === other ||\r\n (other instanceof PolylineFlowMaterialProperty &&\r\n Property.equals(this._color, (other as any)._color))\r\n );\r\n };\r\n\r\n defineProperties(PolylineFlowMaterialProperty.prototype, {\r\n color: createPropertyDescriptor('color'),\r\n duration: createPropertyDescriptor('duration'),\r\n });\r\n\r\n // 挂到 Cesium 方便外部直接使用\r\n Cesium.PolylineFlowMaterialProperty = PolylineFlowMaterialProperty;\r\n\r\n Cesium.Material._materialCache.addMaterial(_materialType, {\r\n fabric: {\r\n type: _materialType,\r\n uniforms: {\r\n color: new Color(1.0, 1.0, 1.0, 1),\r\n duration: 45,\r\n },\r\n source: (function () {\r\n return `uniform vec4 color;\r\n uniform float duration;\r\n czm_material czm_getMaterial(czm_materialInput materialInput){\r\n czm_material material = czm_getDefaultMaterial(materialInput);\r\n vec2 st = materialInput.st;\r\n float t = fract(czm_frameNumber / duration);\r\n t *= 1.03;\r\n float alpha = smoothstep(t - 0.03, t, st.s) * step(-t, -st.s);\r\n alpha += 0.2;\r\n vec4 fragColor;\r\n fragColor.rgb = color.rgb;\r\n fragColor = czm_gammaCorrect(fragColor);\r\n material.diffuse = fragColor.rgb;\r\n material.alpha = alpha;\r\n material.emission = fragColor.rgb;\r\n return material;\r\n }`;\r\n })(),\r\n },\r\n translucent(): boolean {\r\n return true;\r\n },\r\n });\r\n\r\n return new (PolylineFlowMaterialProperty as any)(options);\r\n}\r\n","interface RegisterOptions {\r\n themeKey: string;\r\n material: any;\r\n force?: boolean; // 可选,默认 false\r\n category?: string; // 可选,默认 'default'\r\n}\r\n\r\nexport class MaterialManager {\r\n private categoryMap: Map<string, Map<string, any>> = new Map();\r\n\r\n private CategoryGet = {} as { [key: string]: Function };\r\n constructor() {}\r\n\r\n registerCategoryGet(category: string, fn: Function): void {\r\n if (!category) return console.warn('分类不能为空');\r\n this.CategoryGet[category] = fn;\r\n }\r\n /**\r\n * 注册材质\r\n */\r\n register(options: RegisterOptions): void {\r\n const { themeKey, material, force = false, category = 'default' } = options;\r\n\r\n if (!this.categoryMap.has(category)) {\r\n this.categoryMap.set(category, new Map());\r\n }\r\n const materialMap = this.categoryMap.get(category)!;\r\n\r\n if (materialMap.has(themeKey)) {\r\n if (!force) {\r\n console.warn(\r\n `[MaterialManager] 已存在 themeKey '${themeKey}' 在分类 '${category}',如需覆盖请设置 force = true`,\r\n );\r\n return;\r\n } else {\r\n console.info(`[MaterialManager] themeKey '${themeKey}' 在分类 '${category}' 已被覆盖`);\r\n }\r\n }\r\n materialMap.set(themeKey, material);\r\n }\r\n\r\n /**\r\n * 获取材质\r\n */\r\n get({\r\n themeKey,\r\n category,\r\n options,\r\n }: {\r\n themeKey: string;\r\n category?: string;\r\n options?: any;\r\n }): any | undefined {\r\n category = category || 'default';\r\n if (this.CategoryGet[category]) {\r\n return this.CategoryGet[category]({\r\n themeKey,\r\n materialMap: this.categoryMap,\r\n options: options || {},\r\n });\r\n }\r\n return this.categoryMap.get(category)?.get(themeKey);\r\n }\r\n\r\n /**\r\n * 是否存在\r\n */\r\n has(themeKey: string, category: string = 'default'): boolean {\r\n return this.categoryMap.get(category)?.has(themeKey) ?? false;\r\n }\r\n\r\n /**\r\n * 移除材质\r\n */\r\n remove(themeKey: string, category: string = 'default'): void {\r\n const materialMap = this.categoryMap.get(category);\r\n if (!materialMap) return;\r\n\r\n const material = materialMap.get(themeKey);\r\n if (material?.destroy) {\r\n material.destroy();\r\n }\r\n materialMap.delete(themeKey);\r\n\r\n if (materialMap.size === 0) {\r\n this.categoryMap.delete(category);\r\n }\r\n }\r\n\r\n /**\r\n * 获取某分类下的所有 keys\r\n */\r\n keys(category: string = 'default'): string[] {\r\n return [...(this.categoryMap.get(category)?.keys() || [])];\r\n }\r\n\r\n /**\r\n * 清空某个分类\r\n */\r\n clearCategory(category: string = 'default'): void {\r\n const materialMap = this.categoryMap.get(category);\r\n if (!materialMap) return;\r\n\r\n for (const material of materialMap.values()) {\r\n material?.destroy?.();\r\n }\r\n materialMap.clear();\r\n this.categoryMap.delete(category);\r\n }\r\n\r\n /**\r\n * 清空所有\r\n */\r\n clearAll(): void {\r\n for (const materialMap of this.categoryMap.values()) {\r\n for (const material of materialMap.values()) {\r\n material?.destroy?.();\r\n }\r\n }\r\n this.categoryMap.clear();\r\n }\r\n\r\n /**\r\n * 获取所有分类\r\n */\r\n categories(): string[] {\r\n return [...this.categoryMap.keys()];\r\n }\r\n}\r\n","import { BufferedHierarchicalAggregator } from '../BufferedHierarchicalAggregator';\r\nimport { HtmlOverlayLabelPool } from '../HtmlOverlayLabelPool';\r\nimport { MarkerEventKey } from '../MarkerEvent';\r\nimport { MaterialManager } from '../Material/MaterialManager';\r\n\r\ninterface EntityGroupOptions {\r\n id: string;\r\n entities?: any[]; // 默认值为空数组\r\n primitives?: any[]; // 默认值为空数组\r\n dataItem?: any; // 默认值为空对象\r\n aggregator?: BufferedHierarchicalAggregator;\r\n cardPool: HtmlOverlayLabelPool;\r\n}\r\n\r\nexport class EntityGroup {\r\n id: string;\r\n entities: any[] = [];\r\n primitives: any[] = [];\r\n dataItem: any = {};\r\n aggregator?: BufferedHierarchicalAggregator;\r\n cardPool: HtmlOverlayLabelPool;\r\n\r\n constructor(options: EntityGroupOptions) {\r\n // 从 options 中解构参数并设置默认值\r\n const { id, entities = [], primitives = [], dataItem = {}, aggregator, cardPool } = options;\r\n\r\n this.id = id;\r\n this.entities = entities;\r\n this.primitives = primitives;\r\n this.dataItem = dataItem;\r\n this.aggregator = aggregator;\r\n this.cardPool = cardPool;\r\n }\r\n\r\n // 改造 setVisible 方法,支持 Entity 和 Primitive 的可见性控制\r\n setVisible(visible: boolean) {\r\n // 控制 Cesium 原生实体\r\n this.entities.forEach((entity) => {\r\n if (entity) {\r\n entity.show = visible;\r\n }\r\n });\r\n\r\n // 控制 Cesium 原生 Primitive\r\n this.primitives.forEach((primitive) => {\r\n if (primitive) {\r\n primitive.show = visible;\r\n }\r\n });\r\n\r\n // 控制 billboard 聚合点(通过 aggregator)\r\n if (this.aggregator && Array.isArray(this.dataItem.billboard)) {\r\n const updated = this.dataItem.billboard.map((bill: any, index: number) => {\r\n const id = this.dataItem.id;\r\n return {\r\n id,\r\n data: {\r\n ...this.dataItem,\r\n show: visible && (bill.data?.show ?? true),\r\n },\r\n };\r\n });\r\n updated.forEach((p: any) => {\r\n this.aggregator?.updatePoint(p);\r\n });\r\n }\r\n\r\n // 控制 HTML 标签池\r\n if (this.cardPool && this.dataItem.card) {\r\n visible\r\n ? this.cardPool.showByIds([this.dataItem.id])\r\n : this.cardPool.hideByIds([this.dataItem.id]);\r\n }\r\n }\r\n\r\n // 改造 removeAll 方法,支持 Entity 和 Primitive 的移除\r\n removeAll(viewer: any, immediately = true) {\r\n // 移除 Entity\r\n this.entities.forEach((entity) => {\r\n if (entity) viewer.entities.remove(entity);\r\n });\r\n this.entities = [];\r\n\r\n // 移除 Primitive\r\n this.primitives.forEach((primitive) => {\r\n if (primitive) viewer.scene.primitives.remove(primitive);\r\n });\r\n this.primitives = [];\r\n\r\n // 移除 billboard 聚合点\r\n if (immediately && this.aggregator && Array.isArray(this.dataItem.billboard)) {\r\n this.aggregator.removePointsById([this.dataItem.id]);\r\n }\r\n\r\n // 移除 HTML 标签池中的卡片\r\n if (immediately && this.cardPool && this.dataItem.card) {\r\n this.cardPool.removeByIds([this.dataItem.id]);\r\n }\r\n\r\n return this.dataItem.id;\r\n }\r\n}\r\n\r\nexport class EntityLayer {\r\n id: string;\r\n groupMap: Map<string, EntityGroup> = new Map();\r\n Cesium: any;\r\n viewer: any;\r\n materialManager: MaterialManager;\r\n aggregator: BufferedHierarchicalAggregator;\r\n cardPool: HtmlOverlayLabelPool;\r\n constructor(\r\n id: string,\r\n Cesium: any,\r\n viewer: any,\r\n materialManager: MaterialManager,\r\n aggregator: BufferedHierarchicalAggregator,\r\n cardPool: HtmlOverlayLabelPool,\r\n ) {\r\n this.id = id;\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n this.materialManager = materialManager;\r\n this.aggregator = aggregator;\r\n this.cardPool = cardPool;\r\n\r\n this.aggregator.labelPool.eventBus.addListener(MarkerEventKey.Click, {\r\n name: 'BufferedHierarchicalAggregator_maker_click',\r\n fn: (info, e) => {\r\n this.cardPool.showByIds([info.data.id]);\r\n },\r\n });\r\n\r\n const handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);\r\n\r\n handler.setInputAction(() => {\r\n this.cardPool.hideFilter((data) => {\r\n if (data.initShow) return false;\r\n return true;\r\n });\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n }\r\n\r\n /** ====== 下面是抽出的创建函数 ====== */\r\n private createPolyline(line: any, show: boolean) {\r\n if (!line.positions || line.positions.length < 1) return null;\r\n const material = this.materialManager.get({\r\n themeKey: line.theme,\r\n category: 'polyline',\r\n options: line,\r\n });\r\n const positions = Array.isArray(line.positions[0]) ? line.positions.flat() : line.positions;\r\n let opt = {\r\n ...line,\r\n };\r\n if (material) opt.material = material;\r\n return this.viewer.entities.add({\r\n polyline: {\r\n ...opt,\r\n positions: this.Cesium.Cartesian3.fromDegreesArrayHeights(positions),\r\n },\r\n show: (line.show ?? true) && show,\r\n });\r\n }\r\n\r\n private createWall(wall: any, show: boolean) {\r\n if (!wall.positions || wall.positions.length < 1) return null;\r\n const material = this.materialManager.get({\r\n themeKey: wall.theme,\r\n category: 'wall',\r\n options: wall,\r\n });\r\n\r\n const minHeights =\r\n wall.positions.length === wall.minimumHeights?.length\r\n ? wall.minimumHeights.map((n: any) => n - Number(wall.minHeight || 0))\r\n : wall.positions.map((n: any) => (n[2] || 0) - Number(wall.minHeight || 0));\r\n\r\n const maxHeights =\r\n wall.positions.length === wall.maximumHeights?.length\r\n ? wall.maximumHeights.map((n: any) => n + Number(wall.maxHeight || 0))\r\n : wall.positions.map((n: any) => (n[2] || 0) + Number(wall.maxHeight || 0));\r\n\r\n const pos = wall.positions.map((p: any) =>\r\n this.Cesium.Cartesian3.fromDegrees(p[0], p[1], p[2] || 0),\r\n );\r\n let opt = {\r\n ...wall,\r\n };\r\n if (material) opt.material = material;\r\n return this.viewer.entities.add({\r\n wall: {\r\n ...opt,\r\n positions: pos,\r\n minimumHeights: minHeights,\r\n maximumHeights: maxHeights,\r\n },\r\n show: (wall.show ?? true) && show,\r\n });\r\n }\r\n\r\n private createPolygon(poly: any, show: boolean) {\r\n // 确保多边形数据有效\r\n if (!poly.hierarchy || poly.hierarchy.length < 1) return null;\r\n\r\n // 获取材质\r\n const material = this.materialManager.get({\r\n themeKey: poly.theme,\r\n category: 'polygon',\r\n options: poly,\r\n });\r\n\r\n // 处理外环(外环是第一个元素)\r\n const outerRing = Array.isArray(poly.hierarchy[0]) ? poly.hierarchy.flat() : poly.hierarchy;\r\n const outerCartesian = this.Cesium.Cartesian3.fromDegreesArrayHeights(outerRing);\r\n\r\n // 处理孔数据(如果有孔数据)\r\n const holes =\r\n poly.holes?.map((hole: any) => {\r\n let _hole = Array.isArray(hole[0]) ? poly.hierarchy.flat() : poly.hole;\r\n return this.Cesium.Cartesian3.fromDegreesArrayHeights(_hole.flat());\r\n }) || [];\r\n\r\n // 使用 PolygonHierarchy 来构建多边形\r\n const polygonHierarchy = new this.Cesium.PolygonHierarchy(outerCartesian, holes);\r\n let opt = {\r\n ...poly,\r\n };\r\n if (material) opt.material = material;\r\n // 创建并返回实体\r\n return this.viewer.entities.add({\r\n polygon: {\r\n ...opt,\r\n hierarchy: polygonHierarchy, // 使用构建好的 PolygonHierarchy\r\n },\r\n show: (poly.show ?? true) && show,\r\n });\r\n }\r\n\r\n private createBillboardPoints(dataItem: any) {\r\n if (!dataItem.billboard?.length || !this.aggregator) return [];\r\n return dataItem.billboard.map((bill: any) => {\r\n const [lon, lat, height = 0] = bill.position || [0, 0, 0];\r\n return {\r\n id: dataItem.id,\r\n lon,\r\n lat,\r\n height,\r\n name: bill.options?.text || '',\r\n data: dataItem,\r\n style: { zIndex: dataItem.zIndex || '1' },\r\n };\r\n });\r\n }\r\n\r\n private createCard(dataItem: any) {\r\n if (!dataItem.card?.data?.length) return;\r\n this.cardPool.add(dataItem.card, {\r\n id: dataItem.id,\r\n lon: dataItem.card.position[0],\r\n lat: dataItem.card.position[1],\r\n height: dataItem.card.position[3] || 0,\r\n theme: dataItem.card.theme,\r\n show: dataItem.show ? (dataItem.card.initShow ?? false) : false,\r\n notCreateElement: true,\r\n style: { width: '0', height: '0', zIndex: dataItem?.card?.zIndex || '110' },\r\n });\r\n }\r\n\r\n /** ====== 主入口:仅保留循环,内部调用独立函数 ====== */\r\n addGroup(dataItem: any, isAppendPoints = true) {\r\n const groupId = dataItem.id || `${Date.now()}`;\r\n this.removeGroup(groupId);\r\n const entities: any[] = [];\r\n const show = dataItem.show !== false;\r\n\r\n (dataItem.polyline || []).forEach((l: any) => {\r\n const e = this.createPolyline(l, show);\r\n if (e) entities.push(e);\r\n });\r\n\r\n (dataItem.wall || []).forEach((w: any) => {\r\n const e = this.createWall(w, show);\r\n if (e) entities.push(e);\r\n });\r\n\r\n (dataItem.polygon || []).forEach((p: any) => {\r\n const e = this.createPolygon(p, show);\r\n if (e) entities.push(e);\r\n });\r\n\r\n const pointList = this.createBillboardPoints(dataItem);\r\n if (pointList.length && isAppendPoints) this.aggregator.appendPoints(pointList, false);\r\n\r\n this.createCard(dataItem);\r\n\r\n const group = new EntityGroup({\r\n id: groupId,\r\n entities,\r\n primitives: [],\r\n dataItem,\r\n aggregator: this.aggregator,\r\n cardPool: this.cardPool,\r\n });\r\n this.groupMap.set(groupId, group);\r\n return pointList;\r\n }\r\n\r\n async addGroups(dataItemList: any) {\r\n let dataLists = dataItemList.map((dataItem: any) => {\r\n return this.addGroup(dataItem, false);\r\n });\r\n\r\n // 拉平二维数组\r\n const allPoints = dataLists.flat();\r\n if (allPoints.length > 0 && this.aggregator) {\r\n this.aggregator.appendPoints(allPoints, false);\r\n }\r\n }\r\n\r\n removeGroup(groupId: string) {\r\n const group = this.groupMap.get(groupId);\r\n if (group) {\r\n group.removeAll(this.viewer);\r\n this.groupMap.delete(groupId);\r\n }\r\n }\r\n removeGroups(groupIds: string[]) {\r\n let ids = [];\r\n for (const groupId of groupIds) {\r\n const group = this.groupMap.get(groupId);\r\n if (group) {\r\n let id = group.removeAll(this.viewer, false);\r\n this.groupMap.delete(groupId);\r\n ids.push(id);\r\n }\r\n }\r\n this.aggregator.removePointsById(ids);\r\n this.cardPool.removeByIds(ids);\r\n }\r\n updateGroup(dataItem: any) {\r\n const group = this.groupMap.get(dataItem.id);\r\n if (group) {\r\n group.removeAll(this.viewer);\r\n this.groupMap.delete(dataItem.id);\r\n }\r\n this.addGroup(dataItem);\r\n }\r\n\r\n async updateGroups(dataItemList: Array<any>) {\r\n this.aggregator.removePointsById(dataItemList.map((n: any) => n.id));\r\n this.cardPool.removeByIds(dataItemList.map((n: any) => n.id));\r\n let dataLists = dataItemList.map((dataItem: any) => {\r\n const group = this.groupMap.get(dataItem.id);\r\n if (group) {\r\n group.removeAll(this.viewer, false);\r\n this.groupMap.delete(dataItem.id);\r\n }\r\n return this.addGroup(dataItem, false);\r\n });\r\n\r\n // 拉平二维数组\r\n const allPoints = dataLists.flat();\r\n if (allPoints.length > 0 && this.aggregator) {\r\n this.aggregator.appendPoints(allPoints, false);\r\n }\r\n }\r\n\r\n setGroupVisible(groupId: string, visible: boolean) {\r\n this.groupMap.get(groupId)?.setVisible(visible);\r\n }\r\n\r\n clearAllGroups() {\r\n this.groupMap.forEach((group) => group.removeAll(this.viewer));\r\n this.groupMap.clear();\r\n }\r\n}\r\n\r\nexport class EntityLayerManager {\r\n Cesium: any;\r\n viewer: any;\r\n layerMap: Map<string, EntityLayer> = new Map();\r\n materialManager: MaterialManager;\r\n aggregator: BufferedHierarchicalAggregator;\r\n cardPool: HtmlOverlayLabelPool;\r\n constructor(\r\n Cesium: any,\r\n viewer: any,\r\n materialManager: MaterialManager,\r\n aggregator: BufferedHierarchicalAggregator,\r\n cardPool: HtmlOverlayLabelPool,\r\n ) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n this.materialManager = materialManager;\r\n this.aggregator = aggregator;\r\n this.cardPool = cardPool;\r\n }\r\n\r\n addLayer(layerId: string) {\r\n if (!this.layerMap.has(layerId)) {\r\n this.layerMap.set(\r\n layerId,\r\n new EntityLayer(\r\n layerId,\r\n this.Cesium,\r\n this.viewer,\r\n this.materialManager,\r\n this.aggregator,\r\n this.cardPool,\r\n ),\r\n );\r\n }\r\n }\r\n\r\n removeLayer(layerId: string) {\r\n const layer = this.layerMap.get(layerId);\r\n if (layer) {\r\n layer.clearAllGroups();\r\n this.layerMap.delete(layerId);\r\n }\r\n }\r\n\r\n getLayer(layerId: string): EntityLayer | undefined {\r\n return this.layerMap.get(layerId);\r\n }\r\n\r\n async addGroupsToLayer(layerId: string, dataList: any[]) {\r\n const layer = this.layerMap.get(layerId);\r\n if (!layer) return;\r\n // dataList.forEach((data) => layer.addGroup(data));\r\n layer.addGroups(dataList);\r\n this.aggregator.refresh();\r\n }\r\n updateGroupToLayer(layerId: string, dataList: any[]) {\r\n const layer = this.layerMap.get(layerId);\r\n if (!layer) return;\r\n\r\n layer.updateGroups(dataList);\r\n this.aggregator.refresh();\r\n }\r\n\r\n setGroupVisible(layerId: string, groupId: string, visible: boolean) {\r\n this.layerMap.get(layerId)?.setGroupVisible(groupId, visible);\r\n }\r\n\r\n removeGroup(layerId: string, groupId: string) {\r\n this.layerMap.get(layerId)?.removeGroup(groupId);\r\n }\r\n removeGroups(layerId: string, groupIds: string[]) {\r\n this.layerMap.get(layerId)?.removeGroups(groupIds);\r\n }\r\n}\r\n","import {\n BufferedHierarchicalAggregator,\n EntityLayerManager,\n HtmlOverlayLabelPool,\n MarkerEventBus,\n MaterialManager,\n} from '../../../../../../cesium-core/src';\nimport { isArray, merge } from 'lodash-es';\nimport { MarkerManageOptions } from '../type/markerManage';\n\ninterface LabelOcclusionOptions {\n enabled?: boolean;\n distanceEpsilon?: number;\n throttleMs?: number;\n}\n\nexport class MarkerManagerCore {\n labelId: string;\r\n cardId: string;\r\n opt: MarkerManageOptions;\r\n entityList = new Map();\r\n MaterialManager: MaterialManager;\r\n instance: any;\r\n\r\n constructor(opt: MarkerManageOptions & { labelId: string; cardId: string; MaterialManager?: MaterialManager; eventBus?: any; cardEventBus?: any }) {\r\n this.labelId = opt.labelId;\r\n this.cardId = opt.cardId;\r\n this.opt = opt;\r\n this.MaterialManager = opt.MaterialManager || new MaterialManager();\r\n this.instance = this.initCore(opt, opt.eventBus, opt.cardEventBus);\r\n }\r\n\r\n //初始化标记管理\r\n initCore(options: MarkerManageOptions, eventBus?: any, cardEventBus?: any) {\r\n let { Cesium, viewer, aggregatorOptions } = options;\r\n \r\n if (!eventBus) eventBus = new MarkerEventBus();\n if (!cardEventBus) cardEventBus = new MarkerEventBus();\n\n const labelPool = new HtmlOverlayLabelPool(Cesium, viewer, this.labelId, eventBus); //标记\n // 标签遮挡默认关闭,误差默认 1.0\n labelPool.setOcclusionOptions({ distanceEpsilon: 1.0 });\n labelPool.setOcclusionEnabled(false);\n\n const cardPool = new HtmlOverlayLabelPool(Cesium, viewer, this.cardId, cardEventBus, false); //卡片\n const aggregator = new BufferedHierarchicalAggregator(Cesium, viewer, {\r\n //聚合\r\n threshold: aggregatorOptions?.threshold || 16,\r\n displayLimit: aggregatorOptions?.displayLimit || 300,\r\n maxLevel: aggregatorOptions?.maxLevel || 20,\r\n debugCurrentGrids: aggregatorOptions?.debugCurrentGrids || false,\r\n groupByTheme: aggregatorOptions?.groupByTheme ?? true,\r\n //clusterTheme: aggregatorOptions?.clusterTheme || 'Tag1007', // 这里可以改成你自定义的默认聚合点主题k\r\n pointTheme: aggregatorOptions?.pointTheme || 'Tag1001', // 普通点的默认主题\r\n centralPointMode: aggregatorOptions?.centralPointMode || 'firstPoint', // 普通点的默认主题\r\n ...aggregatorOptions,\r\n labelPool: labelPool,\r\n\r\n });\r\n const materialManager = this.MaterialManager;\r\n const entityLayerManager = new EntityLayerManager( //实体图层管理\r\n Cesium,\r\n viewer,\r\n materialManager,\r\n aggregator,\r\n cardPool,\r\n );\r\n return { materialManager, entityLayerManager, cardPool, labelPool, aggregator, eventBus, cardEventBus };\r\n }\r\n\r\n //添加标记\r\n set(list: any) {\r\n this.entityList.clear();\r\n list.forEach((item: any) => {\r\n this.entityList.set(item.id, item);\r\n });\r\n this.instance.entityLayerManager.removeLayer('Layer_default');\r\n this.instance.entityLayerManager.addLayer('Layer_default');\r\n this.instance.entityLayerManager.addGroupsToLayer(\r\n 'Layer_default',\r\n Array.from(this.entityList.values()),\r\n );\r\n }\r\n\r\n //添加\r\n add(data: any) {\r\n let dataList = [] as Array<any>;\r\n if (isArray(data)) {\r\n dataList = data;\r\n } else {\r\n dataList.push(data);\r\n }\r\n dataList.forEach((item: any) => {\r\n this.entityList.set(item.id, item);\r\n });\r\n if (!this.instance.entityLayerManager.getLayer('Layer_default')) {\r\n this.instance.entityLayerManager.addLayer('Layer_default');\r\n }\r\n this.instance.entityLayerManager.addGroupsToLayer('Layer_default', dataList);\r\n }\r\n\r\n //更新标记\r\n update(data: any[], immediately = true) {\r\n let dataList = [] as Array<any>;\r\n if (isArray(data)) {\r\n dataList = data;\r\n } else {\r\n dataList.push(data);\r\n }\r\n\r\n const mergedList = dataList.map((options) => {\r\n const act = this.entityList.get(options.id);\r\n if (!act) return;\r\n let merged = merge({}, act, options);\r\n this.entityList.set(options.id, merged);\r\n return merged;\r\n }).filter(Boolean);\r\n\r\n if (immediately) {\r\n this.instance.entityLayerManager.updateGroupToLayer('Layer_default', mergedList);\r\n }\r\n }\r\n\r\n //获取标记\r\n getById(id: string) {\r\n return this.entityList.get(id);\r\n }\r\n \r\n getOptions() {\r\n return new Promise((resolve) => {\r\n resolve({\r\n entityList: Array.from(this.entityList.values()),\r\n });\r\n });\r\n }\r\n \r\n //删除标记\r\n delete(data: string[] | string) {\r\n let deleteList = [] as Array<String>;\r\n if (isArray(data)) {\r\n deleteList = data as Array<String>;\r\n } else {\r\n deleteList.push(data as String);\r\n }\r\n deleteList.forEach((id) => {\r\n this.entityList.delete(id);\r\n });\r\n this.instance.entityLayerManager.removeGroups('Layer_default', deleteList);\r\n }\r\n\r\n setMarkerAggregationEnabled(enabled: boolean, count?: number) {\r\n this.instance.aggregator.setThreshold(enabled ? count || 2 : 9999999);\r\n }\r\n \r\n setDebugCurrentGridsEnabled(enabled: boolean) {\n this.instance.aggregator.setDebugCurrentGrids(enabled || false);\n }\n\n setLabelOcclusionEnabled(enabled: boolean) {\n this.instance?.labelPool?.setOcclusionEnabled?.(Boolean(enabled));\n }\n\n setLabelOcclusionDistanceEpsilon(distanceEpsilon: number) {\n this.instance?.labelPool?.setOcclusionOptions?.({\n distanceEpsilon: Math.max(0, Number(distanceEpsilon) || 0),\n });\n }\n\n setLabelOcclusionOptions(options: LabelOcclusionOptions = {}) {\n if (typeof options.enabled === 'boolean') {\n this.setLabelOcclusionEnabled(options.enabled);\n }\n const patch: { distanceEpsilon?: number; throttleMs?: number } = {};\n if (options.distanceEpsilon != null) {\n patch.distanceEpsilon = Math.max(0, Number(options.distanceEpsilon) || 0);\n }\n if (options.throttleMs != null) {\n patch.throttleMs = Math.max(0, Number(options.throttleMs) || 0);\n }\n if (Object.keys(patch).length > 0) {\n this.instance?.labelPool?.setOcclusionOptions?.(patch);\n }\n }\n\n getLabelOcclusionOptions() {\n return this.instance?.labelPool?.getOcclusionOptions?.() || null;\n }\n}\n","import {\r\n getDynamicImgMaterial,\r\n getWallMaterial,\r\n getPolylineFlowMaterialProperty,\r\n} from '../../../../../../cesium-core/src';\r\n\r\nexport function createLineTheme({\r\n Cesium,\r\n options,\r\n MaterialManager,\r\n}: {\r\n Cesium: any;\r\n options: any;\r\n MaterialManager: any;\r\n}) {\r\n if (!options.data?.theme) return;\r\n // if (['2', '3', '4'].includes(options.data?.lineType)) return;\r\n if (options.data?.lineType == '1') {\r\n let material = getPolylineFlowMaterialProperty(Cesium, {\r\n color: new Cesium.Color.fromCssColorString(options?.options?.color || '#ffffff'),\r\n duration: 100,\r\n });\r\n //把材质逐步从引擎中迁移出来\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'polyline',\r\n });\r\n } else if (options.data?.lineType == '2') {\r\n let material = new Cesium.PolylineArrowMaterialProperty(\r\n Cesium.Color.fromCssColorString(options?.options?.color || 'red'),\r\n );\r\n //把材质逐步从引擎中迁移出来\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'polyline',\r\n });\r\n } else if (options.data?.lineType == '3') {\r\n let material = new Cesium.PolylineOutlineMaterialProperty({\r\n color: Cesium.Color.fromCssColorString(options?.options?.color || 'red'),\r\n outlineWidth: 0,\r\n });\r\n //把材质逐步从引擎中迁移出来\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'polyline',\r\n });\r\n } else if (options.data?.lineType == '4') {\r\n let material = new Cesium.PolylineDashMaterialProperty({\r\n color: Cesium.Color.fromCssColorString(options?.options?.color || 'red'),\r\n dashLength: Number(options?.options?.dashLength || 30), //短划线长度\r\n });\r\n //把材质逐步从引擎中迁移出来\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'polyline',\r\n });\r\n } else if (options.data?.lineType == '5') {\r\n let material = getDynamicImgMaterial(Cesium, {\r\n image: options.img,\r\n color: new Cesium.Color.fromCssColorString(options?.options?.color || '#ffffff'),\r\n duration: 5000,\r\n // freely: 'vertical',\r\n direction: '-',\r\n count: 1,\r\n isCustomColor:true,\r\n });\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'polyline',\r\n });\r\n }\r\n}\r\n\r\nexport function createPolygonTheme({\r\n Cesium,\r\n options,\r\n MaterialManager,\r\n}: {\r\n Cesium: any;\r\n options: any;\r\n MaterialManager: any;\r\n}) {\r\n if (!options.data?.theme) return;\r\n if (options.data?.polygonType == 'colorMode') {\r\n let material = new Cesium.Color.fromCssColorString(options?.options?.color || '#ffffff');\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'polygon',\r\n });\r\n } else if (options.data?.polygonType == 'img') {\r\n let material = new Cesium.ImageMaterialProperty({\r\n image: options.img,\r\n });\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'polygon',\r\n });\r\n } else if (options.data?.polygonType == 'DynamicImgMaterial') {\r\n let material = getWallMaterial(Cesium, {\r\n image: options.img,\r\n color: new Cesium.Color.fromCssColorString(options?.options?.color),\r\n duration: 5000,\r\n freely: options.data?.freely || 'vertical',\r\n direction: '+',\r\n count: 1,\r\n });\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'polygon',\r\n });\r\n }\r\n}\r\nexport function createWallTheme({\r\n Cesium,\r\n options,\r\n MaterialManager,\r\n}: {\r\n Cesium: any;\r\n options: any;\r\n MaterialManager: any;\r\n}) {\r\n if (!options.data?.theme) return;\r\n if (options.data?.wallType == 'img') {\r\n let material = new Cesium.ImageMaterialProperty({\r\n image: options.img,\r\n });\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'wall',\r\n });\r\n } else if (options.data?.wallType == 'DynamicImgMaterial') {\r\n let material = getWallMaterial(Cesium, {\r\n image: options.img,\r\n color: new Cesium.Color.fromCssColorString(options?.options?.color),\r\n duration: 5000,\r\n freely: options.data?.freely || 'vertical',\r\n direction: '+',\r\n count: 1,\r\n });\r\n MaterialManager.register({\r\n themeKey: options.data?.theme,\r\n material: material,\r\n category: 'wall',\r\n });\r\n }\r\n}\r\n","import { h, markRaw, render } from 'vue';\r\nimport {\r\n HtmlOverlayLabelPool,\r\n MarkerEventBus,\r\n MarkerEventKey,\r\n MaterialManager,\r\n} from '../../../../../../cesium-core/src';\r\nimport CxCardCarousel from '../../../card-carousel';\nimport CxMarkerBubble, { CxMarkerBubbleLine } from '../../../marker-bubble';\nimport CxMarkerDefault from '../../../marker-default';\nimport CxMarkerHtml from '../../../marker-html';\nimport CxMarkerText from '../../../marker-text';\nimport { MarkerManagerCore } from './MarkerManagerCore';\r\nimport type { MarkerManageOptions } from '../type/markerManage';\r\nimport { omit } from 'lodash-es';\r\nimport { ReportListenerKey } from '../type/markerManage';\r\nimport { isFunction } from 'lodash-es';\r\nimport { createLineTheme, createPolygonTheme, createWallTheme } from '../utils/themeTool';\r\n\r\ninterface MarkerManageOptionsExtend extends Partial<MarkerManageOptions> {\r\n labelId?: string;\r\n cardId?: string;\r\n tagThemeConfig?: any[];\r\n lineThemeConfig?: any[];\r\n cardThemeConfig?: any[];\r\n runListener?: Function;\r\n MaterialManager?: MaterialManager;\r\n Cesium: any;\r\n viewer: any;\r\n}\r\n\r\nexport class MarkerManage extends MarkerManagerCore {\r\n constructor(opt: MarkerManageOptionsExtend) {\r\n const {\r\n labelId = 'report-marker',\r\n cardId = 'report-marker',\r\n tagThemeConfig = [],\r\n lineThemeConfig = [],\r\n cardThemeConfig = [],\r\n runListener = () => { },\r\n MaterialManager: materialManager = new MaterialManager(),\r\n aggregatorOptions,\r\n } = opt;\r\n\r\n // Merge default themes with provided ones\r\n const finalTagThemeConfig = [...tagThemeConfig];\r\n const finalLineThemeConfig = [...lineThemeConfig];\r\n const finalCardThemeConfig = [...cardThemeConfig];\r\n\r\n // Merge default aggregator options\r\n const finalAggregatorOptions = {\r\n clusterTheme: 'Tag1007',\r\n pointTheme: 'Tag1001',\r\n centralPointMode: 'firstPoint',\r\n debugCurrentGrids: false,\r\n ...(aggregatorOptions || {}),\r\n };\r\n\r\n const options = {\r\n ...opt,\r\n labelId,\r\n cardId,\r\n MaterialManager: materialManager,\r\n aggregatorOptions: finalAggregatorOptions,\r\n eventBus: new MarkerEventBus(),\r\n };\r\n\r\n super(options as any);\r\n\r\n // Ensure opt has all extended props\r\n this.opt = { ...this.opt, ...options } as any;\r\n\r\n // Initialize listeners\r\n this.initTagListener(this.instance.eventBus, this.opt as any);\r\n\r\n // Load themes\r\n this.loadTabThemeConfig(finalTagThemeConfig);\r\n this.loadLineThemeConfig(finalLineThemeConfig);\r\n this.loadCardThemeConfig(finalCardThemeConfig);\r\n this.initDefaultLineMaterials();\r\n this.initDefaultTagTheme();\r\n }\r\n\r\n initDefaultTagTheme() {\r\n this.setTagTheme({\r\n comType: 4,\r\n data: {\r\n theme: 'default',\r\n options: {\r\n textStyle: {\r\n width: 'max-content',\r\n backgroundColor: 'rgba(0, 0, 0, 0.7)',\r\n borderRadius: '5px',\r\n padding: '4px 8px',\r\n },\r\n },\r\n },\r\n });\r\n }\r\n\r\n initDefaultLineMaterials() {\r\n const Cesium = (this.opt as any).Cesium;\r\n if (!Cesium) return;\r\n\r\n const defaultMaterials = {\r\n themeBeUnderConstructionRailway: {\r\n material: new Cesium.PolylineDashMaterialProperty({\r\n color: Cesium.Color.fromCssColorString('white'),\r\n gapColor: Cesium.Color.fromCssColorString('black'),\r\n dashLength: 50.0,\r\n dashPattern: parseInt('1111111111111110', 2),\r\n }),\r\n },\r\n themeRailway: {\r\n material: new Cesium.PolylineDashMaterialProperty({\r\n color: Cesium.Color.BLACK,\r\n gapColor: Cesium.Color.WHITE,\r\n dashLength: 48, //短划线长度\r\n }),\r\n },\r\n themeNewRailway: {\r\n material: new Cesium.PolylineOutlineMaterialProperty({\r\n color: Cesium.Color.RED,\r\n outlineWidth: 0,\r\n outlineColor: Cesium.Color.BLACK,\r\n }),\r\n },\r\n themePlanningRailway: {\r\n material: new Cesium.PolylineOutlineMaterialProperty({\r\n color: Cesium.Color.fromCssColorString('rgb(162, 83, 188)'),\r\n outlineWidth: 0,\r\n outlineColor: Cesium.Color.BLACK,\r\n }),\r\n },\r\n themePlanLine: {\r\n material: new Cesium.PolylineOutlineMaterialProperty({\r\n color: Cesium.Color.fromCssColorString('rgb(5,11,233)'),\r\n outlineWidth: 0,\r\n outlineColor: Cesium.Color.BLACK,\r\n }),\r\n },\r\n themeExpressway: {\r\n material: new Cesium.PolylineOutlineMaterialProperty({\r\n color: Cesium.Color.fromCssColorString('rgb(255,255, 0)'),\r\n outlineWidth: 6,\r\n outlineColor: Cesium.Color.fromCssColorString('rgb(102, 176 ,8)'),\r\n }),\r\n },\r\n themeNationalHighway: {\r\n material: new Cesium.PolylineOutlineMaterialProperty({\r\n color: Cesium.Color.fromCssColorString('rgb(160 ,119, 0)'),\r\n outlineWidth: 6,\r\n outlineColor: Cesium.Color.fromCssColorString('rgb(68 ,33, 24)'),\r\n }),\r\n },\r\n themeProvincialRoad: {\r\n material: new Cesium.PolylineOutlineMaterialProperty({\r\n color: Cesium.Color.fromCssColorString('rgb(160 ,119, 0)'),\r\n outlineWidth: 6,\r\n outlineColor: Cesium.Color.fromCssColorString('rgb(68 ,33, 24)'),\r\n }),\r\n },\r\n themeCityBoundary: {\r\n material: new Cesium.PolylineDashMaterialProperty({\r\n color: Cesium.Color.fromCssColorString('rgb(162, 83, 188)'),\r\n gapColor: Cesium.Color.fromCssColorString('0000'),\r\n dashLength: 50.0,\r\n dashPattern: parseInt('1111111111100100', 2),\r\n }),\r\n },\r\n themeProvincialBoundaries: {\r\n material: new Cesium.PolylineDashMaterialProperty({\r\n // color: Cesium.Color.fromCssColorString('rgb(162, 83, 188)'),\r\n color: Cesium.Color.fromCssColorString('rgb(162, 83, 188)'),\r\n gapColor: Cesium.Color.fromCssColorString('0000'),\r\n dashLength: 50.0,\r\n dashPattern: parseInt('1111111100100100', 2),\r\n }),\r\n },\r\n };\r\n\r\n Object.entries(defaultMaterials).forEach(([key, value]: [string, any]) => {\r\n if (this.MaterialManager.has(key, 'polyline')) return;\r\n this.MaterialManager.register({\r\n themeKey: key,\r\n material: value.material,\r\n category: 'polyline',\r\n });\r\n });\r\n }\r\n\r\n // Initialize dynamic themes from data\r\n public initThemes(data: any) {\r\n if (!data) return;\r\n\r\n if (data.tag) {\r\n this.loadTabThemeConfig(data.tag);\r\n }\r\n if (data.card) {\r\n this.loadCardThemeConfig(data.card);\r\n }\r\n\r\n const Cesium = (this.opt as any).Cesium;\r\n const materialManager = this.instance.materialManager || (this.opt as any).MaterialManager;\r\n\r\n if (data.line?.length > 0) {\r\n for (let item of data.line) {\r\n createLineTheme({\r\n options: item,\r\n Cesium: Cesium,\r\n MaterialManager: materialManager,\r\n });\r\n }\r\n }\r\n if (data.polygon?.length > 0) {\r\n for (let item of data.polygon) {\r\n createPolygonTheme({\r\n options: item,\r\n Cesium: Cesium,\r\n MaterialManager: materialManager,\r\n });\r\n }\r\n }\r\n if (data.wall?.length > 0) {\r\n for (let item of data.wall) {\r\n createWallTheme({\r\n options: item,\r\n Cesium: Cesium,\r\n MaterialManager: materialManager,\r\n });\r\n }\r\n }\r\n }\r\n\r\n extractOnEvents(props: any) {\r\n const events: { [key: string]: Function } = {};\r\n for (const key in props) {\r\n if (key.startsWith('on') && typeof props[key] === 'function') {\r\n events[key] = props[key]; // 直接保留\r\n }\r\n }\r\n return events;\r\n }\r\n\r\n //注册标记主题\r\n loadTabThemeConfig(themeList: any[]) {\r\n themeList.forEach((item) => {\r\n this.setTagTheme(item);\r\n });\r\n }\r\n\r\n //注册默认的线配置\r\n loadLineThemeConfig(themeList: any[]) {\r\n // let { Cesium } = this.opt;\r\n themeList.forEach((item) => {\r\n if (this.MaterialManager.has(item.data.theme, 'polyline')) return;\r\n if (item.material) {\r\n this.MaterialManager.register({\r\n themeKey: item.data.theme,\r\n material: item.material,\r\n category: 'polyline',\r\n });\r\n }\r\n });\r\n }\r\n\r\n loadCardThemeConfig(themeList: any[]) {\r\n let labelPool = this.instance.cardPool;\r\n themeList.forEach((item) => {\r\n labelPool.registerTheme(item.data.theme, {\r\n createElement(container: any, label: any) {\r\n let data = label.data.data;\r\n let vNode: any;\r\n\r\n if (item.comType == 1) {\r\n vNode = h(markRaw(CxCardCarousel), {\r\n data: data || {},\r\n imgSrc: item.data.img,\r\n styleConfig: {\r\n paddingTop: '50px',\r\n paddingRight: '18px',\r\n paddingBottom: '10px',\r\n paddingLeft: '95px',\r\n backgroundColor: 'rgba(0,0,0,0)',\r\n borderRadius: 0,\r\n width: '682px',\r\n height: '445px',\r\n },\r\n titleConfig: {\r\n show: true,\r\n width: '600px',\r\n height: '50px',\r\n left: '79px',\r\n top: '0px',\r\n },\r\n bgClass: [item.data.theme],\r\n });\r\n } else if (item.comType == 3) {\r\n vNode = h(markRaw(CxCardCarousel), {\r\n data: data || {},\r\n imgSrc: item.data.img,\r\n styleConfig: {\r\n paddingTop: '55px',\r\n paddingRight: '12px',\r\n paddingBottom: '17px',\r\n paddingLeft: '83px',\r\n backgroundColor: 'rgba(0,0,0,0)',\r\n borderRadius: 0,\r\n width: '365px',\r\n height: '353px',\r\n },\r\n titleConfig: {\r\n show: true,\r\n width: '285px',\r\n height: '50px',\r\n left: '79px',\r\n top: '0px',\r\n },\r\n bgClass: [item.data.theme],\r\n // titleConfig: themeOptions.options.titleConfig,\r\n // pageInfoConfig: themeOptions.options.pageInfoConfig,\r\n });\r\n }\r\n\r\n render(vNode, container);\r\n return () => {\r\n return render(null, container);\r\n };\r\n },\r\n options: {\r\n offset: item.data.pixelOffset,\r\n ...(item.data || {}),\r\n },\r\n });\r\n });\r\n }\r\n\r\n //注册主题\r\n setTagTheme(options: any) {\r\n let { labelPool } = this.instance;\r\n labelPool.registerTheme(options.data.theme, {\r\n createElement(container: any, label: any) {\r\n let info = label.data?.billboard?.[0];\r\n const newObj = omit(info, ['position', 'options']);\r\n let vNode: any;\r\n let props = {\r\n ...newObj,\r\n text: info?.options?.text,\r\n isFullLink: options?.isFullLink ?? false,\r\n img: options?.data?.options?.img,\r\n textStyle: options?.data?.options?.textStyle,\r\n imgStyle: options?.data?.options?.imgStyle,\r\n };\r\n if (label.data?.gridKey) {\r\n vNode = h(markRaw(CxMarkerDefault), {\r\n text: label.data?.count,\r\n isFullLink: options.isFullLink ?? false,\r\n img: options?.data.options.img,\r\n imgStyle: options?.data.options?.imgStyle,\r\n textStyle: {\r\n display: 'block !important',\r\n 'font-size': `12px !important`,\r\n minWidth: '20px',\r\n maxWidth: 'max-content',\r\n position: 'absolute',\r\n left: '63%',\r\n top: '-8px',\r\n background: '#f00',\r\n 'border-radius': '50%',\r\n height: '20px',\r\n 'line-height': '20px',\r\n 'text-align': 'center',\r\n color: 'white',\r\n },\r\n });\r\n } else if (options.comType == 4) {\r\n vNode = h(markRaw(CxMarkerHtml), props);\r\n } else if (options.comType == 5 || options.comType == 8) {\n const billboardOptions = info?.options || {};\n const themeOptions = options?.data?.options || {};\n const pixelOffset = info?.pixelOffset || options?.data?.pixelOffset || { x: 0, y: 0 };\n const otherOffset =\r\n billboardOptions.otherOffset ?? themeOptions.otherOffset ?? { x: 0, y: -0 };\r\n const isCanDraggable =\r\n billboardOptions.isCanDraggable ??\r\n themeOptions.isCanDraggable ??\r\n options?.isCanDraggable ??\r\n false;\r\n\r\n const markerBubbleComponent = options.comType == 8 ? CxMarkerBubbleLine : CxMarkerBubble;\n\n vNode = h(markRaw(markerBubbleComponent), {\n ...props,\n pixelOffset,\n textStyle: billboardOptions.textStyle || themeOptions.textStyle,\n lineStyle: billboardOptions.lineStyle || themeOptions.lineStyle,\r\n otherOffset,\r\n isCanDraggable,\r\n onCanDraggable: billboardOptions.onCanDraggable || options?.onCanDraggable,\r\n onSetOtherOffset: (offset: { x: number; y: number }) => {\r\n if (label.data?.billboard?.[0]?.options) {\r\n label.data.billboard[0].options.otherOffset = offset;\r\n }\n billboardOptions.onSetOtherOffset?.(offset);\n options?.onSetOtherOffset?.(label.data, offset);\n },\n onSetLineStake: (lineStake: { stake: string; anchorPoint: { x: number; y: number } }) => {\n if (label.data?.billboard?.[0]?.options) {\n label.data.billboard[0].options.lineStake = lineStake;\n }\n billboardOptions.onSetLineStake?.(lineStake);\n options?.onSetLineStake?.(label.data, lineStake);\n },\n });\n } else if (options.comType == 6 || options.comType == 7) {\n vNode = h(markRaw(CxMarkerText), {\n text: props.text,\r\n textStyle: props.textStyle,\r\n });\r\n } else {\r\n vNode = h(markRaw(CxMarkerDefault), props);\r\n }\r\n\r\n render(vNode, container);\r\n return () => {\r\n return render(null, container);\r\n };\r\n },\n options: {\n offset: options.comType == 5 || options.comType == 8 ? {} : options?.data?.pixelOffset || {},\n },\n });\n }\n\r\n //标记监听事件\r\n private initTagListener(eventBus: MarkerEventBus, options: MarkerManageOptionsExtend) {\r\n let { viewer, tagListeningOptions } = options;\r\n // const eventBus = new MarkerEventBus(); // Already created in core\r\n eventBus.addListener(MarkerEventKey.Click, {\r\n name: 'marker:click',\r\n fn: (info: any) => {\r\n options.runListener?.(ReportListenerKey.标记左键点击, info.data);\r\n if (isFunction(info.data?.onClick)) {\r\n info.data?.onClick(info.data);\r\n }\r\n if (info.data?.cameraPoint && info.data?.billboard[0]?.isFlyToCameraPoint) {\r\n viewer?.camera?.flyTo({\r\n duration: 1,\r\n ...info.data?.cameraPoint,\r\n });\r\n }\r\n },\r\n });\r\n eventBus.addListener(MarkerEventKey.MouseEnter, {\r\n name: 'marker:mouseenter',\r\n fn: (info: any) => {\r\n let Cesium = (this.opt as any).Cesium;\r\n let offset = { x: 0, y: 0 };\r\n try {\r\n if (info.data?.billboard?.[0]?.position?.length > 2) {\r\n let p = info.data?.billboard[0]?.position;\r\n let position = Cesium.Cartesian3.fromDegrees(p[0], p[1], p[3] || 0);\r\n let f = this.instance.labelPool.toWindowCoordinates(position);\r\n offset.x = f.x;\r\n offset.y = f.y;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n options.runListener?.(ReportListenerKey.标记移入, info.data, offset);\r\n },\r\n });\r\n eventBus.addListener(MarkerEventKey.MouseLeave, {\r\n name: 'marker:mouseleave',\r\n fn: (info: any) => {\r\n let Cesium = (this.opt as any).Cesium;\r\n let offset = { x: 0, y: 0 };\r\n try {\r\n if (info.data?.billboard?.[0]?.position?.length > 2) {\r\n let p = info.data?.billboard[0]?.position;\r\n let position = Cesium.Cartesian3.fromDegrees(p[0], p[1], p[3] || 0);\r\n let f = this.instance.labelPool.toWindowCoordinates(position);\r\n offset.x = f.x;\r\n offset.y = f.y;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n options.runListener?.(ReportListenerKey.标记移出, info.data, offset);\r\n },\r\n });\r\n tagListeningOptions?.forEach((item) => {\r\n eventBus.addListener(item.key, item.ListenerItem, item.overwrite);\r\n });\r\n // return eventBus;\r\n }\r\n\r\n // 兼容旧模式的材质注册\r\n setMaterial(options: any) {\r\n const { type, material, materialKey, cover } = options;\r\n // 统一转为小写,例如 Polyline -> polyline\r\n const category = type ? type.toLowerCase() : 'default';\r\n\r\n this.MaterialManager.register({\r\n themeKey: materialKey,\r\n // 兼容传入的是 { material: ... } 结构或者直接是材质对象\r\n material: material?.material || material,\r\n force: cover,\r\n category: category,\r\n });\r\n }\r\n}\r\n","<script lang=\"ts\" setup>\r\n import { onMounted, onUnmounted, watch, inject, unref, Ref } from 'vue';\r\n import { markerManageProps, MarkerManageOptions } from '../type/markerManage';\r\n import { MarkerManage } from '../core/MarkerManage';\r\n\r\n const props = defineProps(markerManageProps);\r\n const emits = defineEmits(['register', 'load', 'marker-event']);\r\n const leitingMethods = inject('leitingMethods') as Ref<any>;\r\n let markerManager: MarkerManage | null = null;\r\n\r\n const init = (options: Partial<MarkerManageOptions> = {}) => {\r\n if (markerManager) return markerManager;\r\n\r\n const finalOptions = {\r\n ...props,\r\n ...options,\r\n Cesium: options.Cesium || props.Cesium,\r\n viewer: options.viewer || props.viewer,\r\n runListener: (key: string, data: any, ...args: any[]) => {\r\n emits('marker-event', { key, data, args });\r\n },\r\n };\r\n\r\n if (!finalOptions.Cesium || !finalOptions.viewer) {\r\n // console.warn('MarkerManage: Cesium or viewer not provided yet');\r\n return null;\r\n }\r\n\r\n markerManager = new MarkerManage(finalOptions as any);\r\n if (options.methods) {\n options.methods.setTagTheme = markerManager.setTagTheme.bind(markerManager);\n options.methods.setMaterial = markerManager.setMaterial.bind(markerManager);\n options.methods.setEntityList = markerManager.set.bind(markerManager);\n options.methods.addComItem = markerManager.add.bind(markerManager);\r\n options.methods.deleteComItem = markerManager.delete.bind(markerManager);\r\n options.methods.updateComItem = markerManager.update.bind(markerManager);\n options.methods.getEntityByID = markerManager.getById.bind(markerManager);\n options.methods.getOptions = markerManager.getOptions.bind(markerManager);\n }\n emits('load', markerManager);\r\n\r\n return markerManager;\r\n };\r\n\r\n const methods = {\r\n init,\r\n set: (list: any) => markerManager?.set(list),\r\n add: (data: any) => markerManager?.add(data),\r\n update: (data: any[], immediately?: boolean) => markerManager?.update(data, immediately),\r\n getById: (id: string) => markerManager?.getById(id),\r\n getOptions: () => markerManager?.getOptions(),\r\n delete: (data: string[] | string) => markerManager?.delete(data),\r\n setMarkerAggregationEnabled: (enabled: boolean, count?: number) =>\r\n markerManager?.setMarkerAggregationEnabled(enabled, count),\r\n setDebugCurrentGridsEnabled: (enabled: boolean) =>\n markerManager?.setDebugCurrentGridsEnabled(enabled),\n setLabelOcclusionEnabled: (enabled: boolean) =>\n markerManager?.setLabelOcclusionEnabled(enabled),\n setLabelOcclusionDistanceEpsilon: (distanceEpsilon: number) =>\n markerManager?.setLabelOcclusionDistanceEpsilon(distanceEpsilon),\n setLabelOcclusionOptions: (options: any) => markerManager?.setLabelOcclusionOptions(options),\n getLabelOcclusionOptions: () => markerManager?.getLabelOcclusionOptions(),\n initThemes: (data: any) => markerManager?.initThemes(data),\n setTagTheme: (data: any) => markerManager?.setTagTheme(data),\r\n setMaterial: (data: any) => markerManager?.setMaterial(data),\r\n };\r\n\r\n defineExpose(methods);\r\n emits('register', methods);\r\n function load() {\r\n if (markerManager) return markerManager;\r\n const methods = unref(leitingMethods) as any;\r\n const Cesium = methods?.getCesium?.();\r\n const viewer = methods?.getViewer?.();\r\n if (Cesium && viewer) {\r\n init({ Cesium, viewer, methods });\r\n } else if (props.Cesium && props.viewer) {\r\n init({ methods });\r\n }\r\n }\r\n\r\n onMounted(() => {\r\n load();\r\n });\r\n\r\n watch(\r\n () => [props.Cesium, props.viewer],\r\n ([newCesium, newViewer]) => {\r\n if (newCesium && newViewer && !markerManager) {\r\n load();\r\n }\r\n },\r\n );\r\n watch(\r\n () => leitingMethods?.value,\r\n (nv, ov) => {\r\n /* ... */\r\n load();\r\n },\r\n { deep: false },\r\n );\r\n onUnmounted(() => {\r\n // markerManager?.destroy();\r\n // Assuming destroy exists or cleanup is handled\r\n });\r\n\r\n // Watch for props changes if needed, but usually init is once.\r\n</script>\r\n\r\n<template>\r\n <slot></slot>\r\n</template>\r\n","import { withInstall } from '../../../../utils/with-install';\r\nimport _MarkerManage from './src/components/MarkerManage.vue';\r\nexport * from './src/type/markerManage';\r\nexport * from './src/core/MarkerManagerCore';\r\nexport * from './src/core/MarkerManage';\r\n\r\nconst CxMarkerManage = withInstall(_MarkerManage);\r\nexport { CxMarkerManage };\r\nexport default CxMarkerManage;\r\n"],"names":["markerManageProps","ReportListenerKey","BufferedHierarchicalAggregator","Cesium","viewer","options","globe","surface","provider","tilingScheme","pending","groupByTheme","rebuild","update","count","threshold","debug","providerChanged","schemeChanged","levels","minLevel","maxLevel","index","tileLevel","size","points","newPoints","isUpdate","pt","newData","idx","p","oldPt","level","grid","carto","tileXY","key","cell","iAll","iSkip","theme","group","iGroup","updated","ids","idSet","groupKey","groupPoints","filteredGroup","data","min","max","range","effectiveMin","effectiveMax","currentLevel","effectiveThreshold","labelCount","processCell","levelIdx","lonIdx","latIdx","viewTileLevel","tiles","minDefinedLevel","maxDefinedLevel","nearestIndex","minDiff","i","diff","viewerTerrain","scene","globeTerrain","terrainProvider","visited","shouldFilterByViewRectangle","ellipsoid","viewRectangle","isCellInView","x","y","cellRect","t","rect","gridRefLevel","targetTileLevel","tileX","tileY","levelDelta","factor","parentX","parentY","startX","startY","dx","dy","childX","childY","tileWestDeg","tileEastDeg","tileSouthDeg","tileNorthDeg","westIdx","eastIdx","southIdx","northIdx","context","west","south","east","north","centerLon","centerLat","rawGroupPoints","clusterLon","clusterLat","clusterHeight","visiblePoints","finalTheme","clusterId","tileLevelForDebug","text","positions","entity","symbolTag","isSymbol","value","isObjectLike","baseGetTag","arrayMap","array","iteratee","length","result","symbolProto","Symbol","symbolToString","baseToString","isArray","identity","apply","func","thisArg","args","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","lastCalled","stamp","remaining","constant","baseSetToString","defineProperty","string","setToString","nativeMax","overRest","start","transform","otherArgs","baseRest","isIterateeCall","object","isObject","type","isArrayLike","isIndex","eq","createAssigner","assigner","sources","customizer","guard","source","reIsDeepProp","reIsPlainProp","isKey","FUNC_ERROR_TEXT","memoize","resolver","memoized","cache","MapCache","MAX_MEMOIZE_SIZE","memoizeCapped","rePropName","reEscapeChar","stringToPath","match","number","quote","subString","toString","castPath","toKey","baseGet","path","spreadableSymbol","isFlattenable","isArguments","baseFlatten","depth","predicate","isStrict","arrayPush","flatten","flatRest","objectTag","funcProto","objectProto","funcToString","hasOwnProperty","objectCtorString","isPlainObject","proto","getPrototype","Ctor","baseSlice","end","createBaseFor","fromRight","keysFunc","iterable","props","baseFor","assignMergeValue","baseAssignValue","isArrayLikeObject","safeGet","toPlainObject","copyObject","keysIn","baseMergeDeep","srcIndex","mergeFunc","stack","objValue","srcValue","stacked","newValue","isCommon","isArr","isBuff","isBuffer","isTyped","isTypedArray","copyArray","cloneBuffer","cloneTypedArray","isFunction","initCloneObject","baseMerge","Stack","last","parent","merge","baseUnset","obj","customOmitClone","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","omit","paths","isDeep","getAllKeysIn","baseClone","getDynamicImgMaterial","MaterialType","TrailLineMaterialProperty","opts","time","other","_getWallShader","getWallMaterial","materail","getPolylineFlowMaterialProperty","Color","defineProperties","Event","createPropertyDescriptor","Property","defaultValue","defaultVal","DEFAULT_EMPTY_OBJECT","_materialType","PolylineFlowMaterialProperty","_time","MaterialManager","category","fn","themeKey","material","force","materialMap","EntityGroup","id","entities","primitives","dataItem","aggregator","cardPool","visible","primitive","bill","immediately","EntityLayer","materialManager","MarkerEventKey","info","e","line","show","opt","wall","minHeights","n","maxHeights","pos","poly","outerRing","outerCartesian","holes","hole","_hole","polygonHierarchy","lon","lat","height","isAppendPoints","groupId","l","w","pointList","dataItemList","allPoints","groupIds","EntityLayerManager","layerId","layer","dataList","MarkerManagerCore","eventBus","cardEventBus","aggregatorOptions","MarkerEventBus","labelPool","HtmlOverlayLabelPool","entityLayerManager","list","item","mergedList","act","merged","resolve","deleteList","enabled","distanceEpsilon","patch","createLineTheme","createPolygonTheme","createWallTheme","MarkerManage","labelId","cardId","tagThemeConfig","lineThemeConfig","cardThemeConfig","runListener","finalTagThemeConfig","finalLineThemeConfig","finalCardThemeConfig","finalAggregatorOptions","defaultMaterials","events","themeList","container","label","vNode","h","markRaw","CxCardCarousel","render","newObj","CxMarkerDefault","CxMarkerHtml","billboardOptions","themeOptions","pixelOffset","otherOffset","isCanDraggable","markerBubbleComponent","CxMarkerBubbleLine","CxMarkerBubble","offset","lineStake","CxMarkerText","tagListeningOptions","position","f","materialKey","cover","__props","emits","__emit","leitingMethods","inject","markerManager","init","finalOptions","methods","__expose","load","unref","onMounted","watch","newCesium","newViewer","nv","ov","onUnmounted","_renderSlot","_ctx","CxMarkerManage","withInstall","_MarkerManage"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42]}