leiting-bim 2.1.70 → 2.1.71

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.

Potentially problematic release.


This version of leiting-bim might be problematic. Click here for more details.

Files changed (57) hide show
  1. package/leiting-bim.es.js +1 -1
  2. package/package.json +1 -1
  3. package/plugins/cesium-core/dist/cesium-core.mjs +20 -20
  4. package/plugins/cesium-core/dist/cesium-core.mjs.map +1 -1
  5. package/plugins/cesium-core/dist/cesium-core.umd.js +2 -2
  6. package/plugins/cesium-core/dist/cesium-core.umd.js.map +1 -1
  7. package/plugins/cesium-core/package.json +1 -1
  8. package/plugins/cesium-vue/dist/cesium-vue/src/components/basic-audio/index.d.ts +13 -0
  9. package/plugins/cesium-vue/dist/cesium-vue/src/components/basic-video/index.d.ts +98 -0
  10. package/plugins/cesium-vue/dist/cesium-vue/src/components/card-carousel/index.d.ts +147 -0
  11. package/plugins/cesium-vue/dist/cesium-vue/src/components/card-content/index.d.ts +16 -0
  12. package/plugins/cesium-vue/dist/cesium-vue/src/components/card-page/index.d.ts +64 -0
  13. package/plugins/cesium-vue/dist/cesium-vue/src/components/carousel-img/index.d.ts +34 -0
  14. package/plugins/cesium-vue/dist/cesium-vue/src/components/echarts-pro/index.d.ts +63 -0
  15. package/plugins/cesium-vue/dist/cesium-vue/src/components/marker-bubble/index.d.ts +73 -0
  16. package/plugins/cesium-vue/dist/cesium-vue/src/components/marker-default/index.d.ts +43 -0
  17. package/plugins/cesium-vue/dist/cesium-vue/src/components/marker-html/index.d.ts +43 -0
  18. package/plugins/cesium-vue/dist/cesium-vue/src/components/marker-manage/index.d.ts +159 -0
  19. package/plugins/cesium-vue/dist/cesium-vue/src/components/marker-text/index.d.ts +25 -0
  20. package/plugins/cesium-vue/dist/cesium-vue/src/components/measurement/index.d.ts +73 -0
  21. package/plugins/cesium-vue/dist/cesium-vue/src/components/position-picker/index.d.ts +58 -0
  22. package/plugins/cesium-vue/dist/cesium-vue/src/index.d.ts +46 -0
  23. package/plugins/cesium-vue/dist/components/basic-audio.d.ts +3 -3
  24. package/plugins/cesium-vue/dist/components/basic-audio.js.map +1 -1
  25. package/plugins/cesium-vue/dist/components/basic-video.d.ts +3 -3
  26. package/plugins/cesium-vue/dist/components/basic-video.js.map +1 -1
  27. package/plugins/cesium-vue/dist/components/card-carousel.d.ts +3 -3
  28. package/plugins/cesium-vue/dist/components/card-carousel.js.map +1 -1
  29. package/plugins/cesium-vue/dist/components/card-content.d.ts +3 -3
  30. package/plugins/cesium-vue/dist/components/card-content.js.map +1 -1
  31. package/plugins/cesium-vue/dist/components/card-page.d.ts +3 -3
  32. package/plugins/cesium-vue/dist/components/card-page.js.map +1 -1
  33. package/plugins/cesium-vue/dist/components/carousel-img.d.ts +3 -3
  34. package/plugins/cesium-vue/dist/components/carousel-img.js.map +1 -1
  35. package/plugins/cesium-vue/dist/components/echarts-pro.d.ts +3 -3
  36. package/plugins/cesium-vue/dist/components/marker-bubble.d.ts +3 -3
  37. package/plugins/cesium-vue/dist/components/marker-bubble.js.map +1 -1
  38. package/plugins/cesium-vue/dist/components/marker-default.d.ts +3 -3
  39. package/plugins/cesium-vue/dist/components/marker-default.js.map +1 -1
  40. package/plugins/cesium-vue/dist/components/marker-html.d.ts +3 -3
  41. package/plugins/cesium-vue/dist/components/marker-html.js.map +1 -1
  42. package/plugins/cesium-vue/dist/components/marker-manage.d.ts +3 -3
  43. package/plugins/cesium-vue/dist/components/marker-manage.js +211 -194
  44. package/plugins/cesium-vue/dist/components/marker-manage.js.map +1 -1
  45. package/plugins/cesium-vue/dist/components/marker-text.d.ts +3 -3
  46. package/plugins/cesium-vue/dist/components/marker-text.js.map +1 -1
  47. package/plugins/cesium-vue/dist/components/measurement.d.ts +3 -3
  48. package/plugins/cesium-vue/dist/components/measurement.js.map +1 -1
  49. package/plugins/cesium-vue/dist/components/position-picker.d.ts +3 -3
  50. package/plugins/cesium-vue/dist/components/position-picker.js.map +1 -1
  51. package/plugins/cesium-vue/dist/index-CUs_hd1V.js.map +1 -1
  52. package/plugins/cesium-vue/dist/index-Kdqw0FJN.js.map +1 -1
  53. package/plugins/cesium-vue/dist/index.d.ts +6 -46
  54. package/plugins/cesium-vue/dist/index.js.map +1 -1
  55. package/plugins/cesium-vue/package.json +4 -4
  56. package/plugins/theme-chalk/package.json +1 -1
  57. package/plugins/utils/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"measurement.js","sources":["../../../cesium-core/src/components/measurement/handlers/HorizontalMeasure.ts","../../../cesium-core/src/components/measurement/handlers/VerticalMeasure.ts","../../../cesium-core/src/components/measurement/handlers/TriangleMeasure.ts","../../../cesium-core/src/components/measurement/handlers/SpaceMeasure.ts","../../../cesium-core/src/components/measurement/handlers/AreaMeasure.ts","../../../cesium-core/src/components/measurement/handlers/CircleMeasure.ts","../../../cesium-core/src/components/measurement/handlers/PolylineDistanceMeasure.ts","../../../cesium-core/src/components/measurement/handlers/TerrainHeightMeasure.ts","../../../cesium-core/src/components/measurement/handlers/CoordinateMeasure.ts","../../../cesium-core/src/components/measurement/handlers/RectangleMeasure.ts","../../../cesium-core/src/components/measurement/handlers/RegularPolygonMeasure.ts","../../../cesium-core/src/components/measurement/MeasurementTool.ts","../../src/components/measurement/src/measurement.ts","../../src/assets/icons/icon-001.png","../../src/assets/icons/icon-002.png","../../src/assets/icons/icon-003.png","../../src/assets/icons/icon-004.png","../../src/assets/icons/icon-005.png","../../src/assets/icons/icon-006.png","../../src/assets/icons/icon-007.png","../../src/assets/icons/icon-008.png","../../src/assets/icons/icon-009.png","../../src/assets/icons/icon-010.png","../../src/assets/icons/icon-011.png","../../src/assets/icons/icon-012.png","../../src/components/measurement/src/Measurement.vue","../../src/components/measurement/index.ts"],"sourcesContent":["import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class HorizontalMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private positions: any[] = [];\r\n private tempPoints: any[] = [];\r\n private segmentEntities: any[] = [];\r\n private segmentLabelIds: string[] = [];\r\n private previewEntity: any = null;\r\n private previewGroundEntity: any = null;\r\n private hoverPos: any = null;\r\n private htmlLabelPool: any = null;\r\n private totalLabelId: string | null = null;\r\n private previewLabelId: string | null = null;\r\n private labelEntity: any = null;\r\n private firstHeight: number | null = null;\r\n private groundLineEntities: any[] = [];\r\n private previewPos: any = null;\r\n private previewGroundPos: any = null;\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-horizontal-total', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-horizontal-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((movement: any) => {\r\n const pos = viewer.scene.pickPosition(movement.position);\r\n if (!pos) return;\r\n const carto = Cesium.Cartographic.fromCartesian(pos);\r\n const lng = Cesium.Math.toDegrees(carto.longitude);\r\n const lat = Cesium.Math.toDegrees(carto.latitude);\r\n if (this.positions.length === 0) {\r\n this.firstHeight = carto.height || 0;\r\n }\r\n const clampedPos = Cesium.Cartesian3.fromDegrees(lng, lat, this.firstHeight || 0);\r\n this.positions.push(clampedPos);\r\n const point = viewer.entities.add({\r\n position: clampedPos,\r\n point: {\r\n pixelSize: 8,\r\n color: options.pointColor || options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.tempPoints.push(point);\r\n const terrainHeight =\r\n viewer.scene.globe.getHeight(new Cesium.Cartographic(carto.longitude, carto.latitude, 0)) || 0;\r\n const groundPos = Cesium.Cartesian3.fromDegrees(lng, lat, terrainHeight);\r\n const groundDashColor =\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED;\r\n const groundLine = viewer.entities.add({\r\n polyline: {\r\n positions: [groundPos, clampedPos],\r\n width: options.width || 3,\r\n material: new Cesium.PolylineDashMaterialProperty({\r\n color: groundDashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n this.groundLineEntities.push(groundLine);\r\n if (this.positions.length >= 2) {\r\n const p1 = this.positions[this.positions.length - 2];\r\n const p2 = this.positions[this.positions.length - 1];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const entity = viewer.entities.add({\r\n polyline: {\r\n positions: [p1, p2],\r\n width: options.width || 3,\r\n material: options.lineColor || options.color || Cesium.Color.YELLOW,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color:\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n this.segmentEntities.push(entity);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n const mid = new Cesium.Cartesian3(\r\n (p1.x + p2.x) / 2,\r\n (p1.y + p2.y) / 2,\r\n (p1.z + p2.z) / 2,\r\n );\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const id = `measure_horizontal_seg_${this.segmentLabelIds.length}_${Date.now()}`;\r\n this.segmentLabelIds.push(id);\r\n this.htmlLabelPool.add(\r\n { text: `${d.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || (this.firstHeight || 0),\r\n theme: 'measure-horizontal-seg',\r\n show: true,\r\n },\r\n );\r\n }\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction(() => {\r\n if (this.positions.length < 2) {\r\n this.stop();\r\n return;\r\n }\r\n this.stop();\r\n if (this.previewLabelId) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n if (this.hoverPos) {\r\n this.hoverPos = null;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewGroundEntity) {\r\n this.viewer.entities.remove(this.previewGroundEntity);\r\n this.previewGroundEntity = null;\r\n }\r\n let total = 0;\r\n for (let i = 1; i < this.positions.length; i++) {\r\n const p1 = this.positions[i - 1];\r\n const p2 = this.positions[i];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n total += geodesic.surfaceDistance;\r\n }\r\n const last = this.positions[this.positions.length - 1];\r\n const lc = Cesium.Cartographic.fromCartesian(last);\r\n const id = this.totalLabelId || `measure_horizontal_total_${Date.now()}`;\r\n this.totalLabelId = id;\r\n this.htmlLabelPool.add(\r\n { text: `${total.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(lc.longitude),\r\n lat: Cesium.Math.toDegrees(lc.latitude),\r\n height: lc.height || (this.firstHeight || 0),\r\n theme: 'measure-horizontal-total',\r\n show: true,\r\n },\r\n );\r\n this.labelEntity = this.totalLabelId;\r\n const result = {\r\n entity: this.segmentEntities,\r\n label: this.labelEntity,\r\n segmentLabels: this.segmentLabelIds,\r\n positions: this.positions,\r\n distance: total,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n if (this.positions.length === 0) return;\r\n const pos = viewer.scene.pickPosition(movement.endPosition);\r\n if (!pos) return;\r\n this.hoverPos = pos;\r\n const carto = Cesium.Cartographic.fromCartesian(pos);\r\n const lng = Cesium.Math.toDegrees(carto.longitude);\r\n const lat = Cesium.Math.toDegrees(carto.latitude);\r\n const clampedPos = Cesium.Cartesian3.fromDegrees(lng, lat, this.firstHeight || 0);\r\n this.previewPos = clampedPos;\r\n const terrainHeight =\r\n viewer.scene.globe.getHeight(new Cesium.Cartographic(carto.longitude, carto.latitude, 0)) || 0;\r\n const groundPos = Cesium.Cartesian3.fromDegrees(lng, lat, terrainHeight);\r\n this.previewGroundPos = groundPos;\r\n const p1 = this.positions[this.positions.length - 1];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(clampedPos);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n const mid = new Cesium.Cartesian3(\r\n (p1.x + clampedPos.x) / 2,\r\n (p1.y + clampedPos.y) / 2,\r\n (p1.z + clampedPos.z) / 2,\r\n );\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const id = this.previewLabelId || 'measure_horizontal_preview';\r\n this.previewLabelId = id;\r\n this.htmlLabelPool.add(\r\n { text: `${d.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || (this.firstHeight || 0),\r\n theme: 'measure-horizontal-seg',\r\n show: true,\r\n },\r\n );\r\n const groundDashColor =\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED;\r\n if (!this.previewGroundEntity) {\r\n this.previewGroundEntity = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewPos || !this.previewGroundPos) return [];\r\n return [this.previewGroundPos, this.previewPos];\r\n }, false),\r\n width: options.width || 3,\r\n material: new Cesium.PolylineDashMaterialProperty({\r\n color: groundDashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n }\r\n if (!this.previewEntity) {\r\n this.previewEntity = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewPos || !this.positions.length) return [];\r\n const last = this.positions[this.positions.length - 1];\r\n return [last, this.previewPos];\r\n }, false),\r\n width: options.width || 3,\r\n material: options.lineColor || options.color || Cesium.Color.YELLOW,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color:\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n }\r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n this.segmentEntities.forEach((e) => this.viewer.entities.remove(e));\r\n this.segmentEntities = [];\r\n this.groundLineEntities.forEach((e) => this.viewer.entities.remove(e));\r\n this.groundLineEntities = [];\r\n this.tempPoints.forEach((p) => this.viewer.entities.remove(p));\r\n this.tempPoints = [];\r\n if (this.totalLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.totalLabelId]);\r\n this.totalLabelId = null;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewGroundEntity) {\r\n this.viewer.entities.remove(this.previewGroundEntity);\r\n this.previewGroundEntity = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n if (this.segmentLabelIds.length && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice());\r\n }\r\n this.segmentLabelIds = [];\r\n this.positions = [];\r\n this.hoverPos = null;\r\n this.labelEntity = null;\r\n this.firstHeight = null;\r\n this.previewPos = null;\r\n this.previewGroundPos = null;\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const lineColor = opts.lineColor || opts.color || Cesium.Color.YELLOW;\r\n const dashColor = (opts.dashLineColor || opts.lineColor || opts.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n const width = opts.width || 3;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (!posList.length) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-horizontal-total', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-horizontal-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n for (const pos of posList) {\r\n const point = viewer.entities.add({ position: pos, point: { pixelSize: 8, color: opts.pointColor || opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n this.tempPoints.push(point);\r\n const carto = Cesium.Cartographic.fromCartesian(pos);\r\n const lng = Cesium.Math.toDegrees(carto.longitude);\r\n const lat = Cesium.Math.toDegrees(carto.latitude);\r\n const terrainHeight = viewer.scene.globe.getHeight(new Cesium.Cartographic(carto.longitude, carto.latitude, 0)) || 0;\r\n const groundPos = Cesium.Cartesian3.fromDegrees(lng, lat, terrainHeight);\r\n const groundLine = viewer.entities.add({\r\n polyline: {\r\n positions: [groundPos, pos],\r\n width,\r\n material: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n this.groundLineEntities.push(groundLine);\r\n }\r\n for (let i = 1; i < posList.length; i++) {\r\n const p1 = posList[i - 1];\r\n const p2 = posList[i];\r\n const seg = viewer.entities.add({\r\n polyline: {\r\n positions: [p1, p2],\r\n width,\r\n material: lineColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n this.segmentEntities.push(seg);\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n const mid = new Cesium.Cartesian3((p1.x + p2.x) / 2, (p1.y + p2.y) / 2, (p1.z + p2.z) / 2);\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const sid = record.id + `_seg_${i - 1}`;\r\n this.segmentLabelIds.push(sid);\r\n this.htmlLabelPool.add({ text: `${d.toFixed(2)} m` }, {\r\n id: sid,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-horizontal-seg',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n });\r\n }\r\n let total = 0;\r\n for (let i = 1; i < posList.length; i++) {\r\n const c1 = Cesium.Cartographic.fromCartesian(posList[i - 1]);\r\n const c2 = Cesium.Cartographic.fromCartesian(posList[i]);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n total += geodesic.surfaceDistance;\r\n }\r\n const last = posList[posList.length - 1];\r\n const lc = Cesium.Cartographic.fromCartesian(last);\r\n const id = record.id + '_total';\r\n this.totalLabelId = id;\r\n this.htmlLabelPool.add({ text: `${total.toFixed(2)} m` }, {\r\n id,\r\n lon: Cesium.Math.toDegrees(lc.longitude),\r\n lat: Cesium.Math.toDegrees(lc.latitude),\r\n height: lc.height || 0,\r\n theme: 'measure-horizontal-total',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n });\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class VerticalMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private entity: any = null;\r\n private labelEntity: any = null;\r\n private positions: any[] = [];\r\n private htmlLabelPool: any = null;\r\n private htmlLabelId: string | null = null;\r\n private previewLabelId: string | null = null;\r\n private baseCarto: any = null;\r\n private baseUp: any = null;\r\n private tempPoints: any[] = [];\r\n private previewPointEntity: any = null;\r\n private previewEntity: any = null;\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-vertical', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((movement: any) => {\r\n const ray0 = viewer.camera.getPickRay(movement.position);\r\n let cart = ray0 ? viewer.scene.globe.pick(ray0, viewer.scene) : null;\r\n if (!cart) cart = viewer.camera.pickEllipsoid(movement.position, Cesium.Ellipsoid.WGS84);\r\n if (!cart) cart = viewer.scene.pickPosition(movement.position);\r\n if (!cart) return;\r\n if (this.positions.length === 0) {\r\n const c0 = Cesium.Cartographic.fromCartesian(cart);\r\n this.baseCarto = new Cesium.Cartographic(c0.longitude, c0.latitude, 0);\r\n const base = Cesium.Ellipsoid.WGS84.cartographicToCartesian(this.baseCarto);\r\n this.baseUp = Cesium.Ellipsoid.WGS84.geodeticSurfaceNormalCartographic(this.baseCarto);\r\n this.positions.push(base);\r\n const basePoint = viewer.entities.add({\r\n position: base,\r\n point: {\r\n pixelSize: 8,\r\n color: options.pointColor || options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.tempPoints.push(basePoint);\r\n const solidColor = options.lineColor || options.color || Cesium.Color.CYAN;\r\n const dashColor =\r\n (\r\n options.dashLineColor ||\r\n options.lineColor ||\r\n options.color ||\r\n Cesium.Color.RED\r\n ).withAlpha?.(0.9) || Cesium.Color.RED;\r\n this.previewEntity = viewer.entities.add({\r\n polyline: {\r\n positions: [base, base],\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n } else {\r\n if (!this.baseCarto || !this.baseUp) return;\r\n const base = this.positions[0];\r\n const ray = viewer.camera.getPickRay(movement.position);\r\n if (!ray) return;\r\n const O = ray.origin;\r\n const D = Cesium.Cartesian3.normalize(ray.direction, new Cesium.Cartesian3());\r\n const B = base;\r\n const U = this.baseUp;\r\n const w0 = Cesium.Cartesian3.subtract(O, B, new Cesium.Cartesian3());\r\n const a = Cesium.Cartesian3.dot(D, D);\r\n const b = -Cesium.Cartesian3.dot(D, U);\r\n const c = Cesium.Cartesian3.dot(U, U);\r\n const d = -Cesium.Cartesian3.dot(D, w0);\r\n const e = Cesium.Cartesian3.dot(U, w0);\r\n const den = a * c - b * b;\r\n if (Math.abs(den) < 1e-6) return;\r\n const s = (a * e - b * d) / den;\r\n const second = Cesium.Cartesian3.add(\r\n B,\r\n Cesium.Cartesian3.multiplyByScalar(U, s, new Cesium.Cartesian3()),\r\n new Cesium.Cartesian3(),\r\n );\r\n this.positions[1] = second;\r\n this.stop();\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewPointEntity) {\r\n this.viewer.entities.remove(this.previewPointEntity);\r\n this.previewPointEntity = null;\r\n }\r\n const solidColor2 = options.lineColor || options.color || Cesium.Color.CYAN;\r\n const dashColor2 = (\r\n options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED\r\n ).withAlpha?.(0.9) || Cesium.Color.RED;\r\n this.entity = viewer.entities.add({\r\n polyline: {\r\n positions: [base, second],\r\n width: options.width || 3,\r\n material: solidColor2,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor2,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n const secondPoint = viewer.entities.add({\r\n position: second,\r\n point: {\r\n pixelSize: 8,\r\n color: options.pointColor || options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.tempPoints.push(secondPoint);\r\n const c1 = this.baseCarto;\r\n const c2 = Cesium.Cartographic.fromCartesian(second);\r\n const vertical = Math.abs((c2.height || 0) - (c1.height || 0));\r\n const mid = new Cesium.Cartesian3(\r\n (this.positions[0].x + this.positions[1].x) / 2,\r\n (this.positions[0].y + this.positions[1].y) / 2,\r\n (this.positions[0].z + this.positions[1].z) / 2,\r\n );\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n const id = this.htmlLabelId || `measure_vertical_${Date.now()}`;\r\n this.htmlLabelId = id;\r\n this.htmlLabelPool.add(\r\n { text: `${vertical.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-vertical',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n },\r\n );\r\n const result = {\r\n entity: this.entity,\r\n label: this.labelEntity,\r\n positions: this.positions,\r\n vertical,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n if (this.positions.length < 1) return;\r\n if (!this.baseCarto || !this.baseUp) {\r\n const c0 = Cesium.Cartographic.fromCartesian(this.positions[0]);\r\n this.baseCarto = new Cesium.Cartographic(c0.longitude, c0.latitude, c0.height || 0);\r\n this.baseUp = Cesium.Ellipsoid.WGS84.geodeticSurfaceNormalCartographic(this.baseCarto);\r\n }\r\n const base = this.positions[0];\r\n const ray = viewer.camera.getPickRay(movement.endPosition);\r\n if (!ray) return;\r\n const O = ray.origin;\r\n const D = Cesium.Cartesian3.normalize(ray.direction, new Cesium.Cartesian3());\r\n const B = base;\r\n const U = this.baseUp;\r\n const w0 = Cesium.Cartesian3.subtract(O, B, new Cesium.Cartesian3());\r\n const a = Cesium.Cartesian3.dot(D, D);\r\n const b = -Cesium.Cartesian3.dot(D, U);\r\n const c = Cesium.Cartesian3.dot(U, U);\r\n const d = -Cesium.Cartesian3.dot(D, w0);\r\n const e = Cesium.Cartesian3.dot(U, w0);\r\n const den = a * c - b * b;\r\n if (Math.abs(den) < 1e-6) return;\r\n const s = (a * e - b * d) / den;\r\n const second = Cesium.Cartesian3.add(\r\n B,\r\n Cesium.Cartesian3.multiplyByScalar(U, s, new Cesium.Cartesian3()),\r\n new Cesium.Cartesian3(),\r\n );\r\n this.positions[1] = second;\r\n if (!this.previewEntity) {\r\n const solidColor = options.lineColor || options.color || Cesium.Color.CYAN;\r\n const dashColor =\r\n (\r\n options.dashLineColor ||\r\n options.lineColor ||\r\n options.color ||\r\n Cesium.Color.RED\r\n ).withAlpha?.(0.9) || Cesium.Color.RED;\r\n this.previewEntity = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (this.positions.length < 2) return [];\r\n return [this.positions[0], this.positions[1]];\r\n }, false),\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n }\r\n if (!this.previewPointEntity) {\r\n this.previewPointEntity = viewer.entities.add({\r\n position: second,\r\n point: {\r\n pixelSize: 8,\r\n color: options.pointColor || options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n } else {\r\n this.previewPointEntity.position = second;\r\n }\r\n const c1 = this.baseCarto;\r\n const c2 = Cesium.Cartographic.fromCartesian(second);\r\n const vertical = Math.abs((c2.height || 0) - (c1.height || 0));\r\n const mid = new Cesium.Cartesian3(\r\n (this.positions[0].x + second.x) / 2,\r\n (this.positions[0].y + second.y) / 2,\r\n (this.positions[0].z + second.z) / 2,\r\n );\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const pid = this.previewLabelId || 'measure_vertical_preview';\r\n this.previewLabelId = pid;\r\n this.htmlLabelPool.add(\r\n { text: `${vertical.toFixed(2)} m` },\r\n {\r\n id: pid,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-vertical',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n },\r\n );\r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n if (this.entity) {\r\n this.viewer.entities.remove(this.entity);\r\n this.entity = null;\r\n }\r\n if (this.labelEntity) {\r\n this.viewer.entities.remove(this.labelEntity);\r\n this.labelEntity = null;\r\n }\r\n this.tempPoints.forEach((p) => this.viewer.entities.remove(p));\r\n this.tempPoints = [];\r\n if (this.previewPointEntity) {\r\n this.viewer.entities.remove(this.previewPointEntity);\r\n this.previewPointEntity = null;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.htmlLabelPool && this.htmlLabelId) {\r\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\r\n this.htmlLabelId = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n this.positions = [];\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const lineColor = opts.lineColor || opts.color || Cesium.Color.CYAN;\r\n const dashColor = (opts.dashLineColor || opts.lineColor || opts.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n const width = opts.width || 3;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (posList.length < 2) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-vertical', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n const base = posList[0];\r\n const second = posList[1];\r\n const basePoint = viewer.entities.add({ position: base, point: { pixelSize: 8, color: opts.pointColor || opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n const secondPoint = viewer.entities.add({ position: second, point: { pixelSize: 8, color: opts.pointColor || opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n this.tempPoints.push(basePoint);\r\n this.tempPoints.push(secondPoint);\r\n this.entity = viewer.entities.add({ polyline: { positions: [base, second], width, material: lineColor, depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }) } });\r\n const c1 = Cesium.Cartographic.fromCartesian(base);\r\n const c2 = Cesium.Cartographic.fromCartesian(second);\r\n const vertical = Math.abs((c2.height || 0) - (c1.height || 0));\r\n const mid = new Cesium.Cartesian3((base.x + second.x) / 2, (base.y + second.y) / 2, (base.z + second.z) / 2);\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const id = record.id + '_label';\r\n this.htmlLabelId = id;\r\n this.htmlLabelPool.add({ text: `${vertical.toFixed(2)} m` }, {\r\n id,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-vertical',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n });\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class TriangleMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private positions: any[] = [];\r\n private htmlLabelPool: any = null;\r\n private htmlLabelId: string | null = null;\r\n private segmentEntities: any[] = [];\r\n private angleMarkerEntities: any[] = [];\r\n private pointEntities: any[] = [];\r\n private segmentLabelIds: string[] = [];\r\n private angleLabelIds: string[] = [];\r\n private previewLabelId: string | null = null;\r\n private previewSegmentEntities: any[] = [];\r\n private previewAngleMarkerEntities: any[] = [];\r\n private previewPointEntity: any = null;\r\n private previewLow: any = null;\r\n private previewHigh: any = null;\r\n private previewThird: any = null;\r\n private previewMarkerP1: any = null;\r\n private previewMarkerP2: any = null;\r\n private previewMarkerCorner: any = null;\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-triangle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-triangle-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-triangle-angle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((movement: any) => {\r\n const pos = viewer.scene.pickPosition(movement.position);\r\n if (!pos) return;\r\n this.positions.push(pos);\r\n const p = viewer.entities.add({\r\n position: pos,\r\n point: {\r\n pixelSize: 8,\r\n color: options.pointColor || options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.pointEntities.push(p);\r\n if (this.positions.length === 2) {\r\n this.stop();\r\n this.previewSegmentEntities.forEach((e) => viewer.entities.remove(e));\r\n this.previewSegmentEntities = [];\r\n this.previewAngleMarkerEntities.forEach((e) => viewer.entities.remove(e));\r\n this.previewAngleMarkerEntities = [];\r\n if (this.previewPointEntity) {\r\n viewer.entities.remove(this.previewPointEntity);\r\n this.previewPointEntity = null;\r\n }\r\n const c1 = Cesium.Cartographic.fromCartesian(this.positions[0]);\r\n const c2 = Cesium.Cartographic.fromCartesian(this.positions[1]);\r\n const h1 = c1.height || 0;\r\n const h2 = c2.height || 0;\r\n const low = h1 <= h2 ? this.positions[0] : this.positions[1];\r\n const high = h1 > h2 ? this.positions[0] : this.positions[1];\r\n const cl = Cesium.Cartographic.fromCartesian(low);\r\n const ch = Cesium.Cartographic.fromCartesian(high);\r\n const maxH = Math.max(h1, h2);\r\n const third = Cesium.Cartesian3.fromDegrees(\r\n Cesium.Math.toDegrees(cl.longitude),\r\n Cesium.Math.toDegrees(cl.latitude),\r\n maxH,\r\n );\r\n const solidColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor = (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n const vertical = viewer.entities.add({\r\n polyline: {\r\n positions: [low, third],\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n const horizontal = viewer.entities.add({\r\n polyline: {\r\n positions: [third, high],\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n const hypotenuse = viewer.entities.add({\r\n polyline: {\r\n positions: [low, high],\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n this.segmentEntities.push(vertical, horizontal, hypotenuse);\r\n const lenV = Cesium.Cartesian3.distance(low, third);\r\n const lenH = Cesium.Cartesian3.distance(third, high);\r\n const lenHyp = Cesium.Cartesian3.distance(low, high);\r\n const midV = new Cesium.Cartesian3((low.x + third.x) / 2, (low.y + third.y) / 2, (low.z + third.z) / 2);\r\n const midH = new Cesium.Cartesian3((third.x + high.x) / 2, (third.y + high.y) / 2, (third.z + high.z) / 2);\r\n const midHyp = new Cesium.Cartesian3((low.x + high.x) / 2, (low.y + high.y) / 2, (low.z + high.z) / 2);\r\n const mV = Cesium.Cartographic.fromCartesian(midV);\r\n const mH = Cesium.Cartographic.fromCartesian(midH);\r\n const mHyp = Cesium.Cartographic.fromCartesian(midHyp);\r\n const idV = 'measure_triangle_seg_v';\r\n const idH = 'measure_triangle_seg_h';\r\n const idHyp = 'measure_triangle_seg_hyp';\r\n this.segmentLabelIds = [idV, idH, idHyp];\r\n this.htmlLabelPool.add({ text: `${lenV.toFixed(2)} m` }, { id: idV, lon: Cesium.Math.toDegrees(mV.longitude), lat: Cesium.Math.toDegrees(mV.latitude), height: mV.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${lenH.toFixed(2)} m` }, { id: idH, lon: Cesium.Math.toDegrees(mH.longitude), lat: Cesium.Math.toDegrees(mH.latitude), height: mH.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${lenHyp.toFixed(2)} m` }, { id: idHyp, lon: Cesium.Math.toDegrees(mHyp.longitude), lat: Cesium.Math.toDegrees(mHyp.latitude), height: mHyp.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n const vLowToHigh = Cesium.Cartesian3.subtract(high, low, new Cesium.Cartesian3());\r\n const vLowToThird = Cesium.Cartesian3.subtract(third, low, new Cesium.Cartesian3());\r\n const vHighToThird = Cesium.Cartesian3.subtract(third, high, new Cesium.Cartesian3());\r\n const vHighToLow = Cesium.Cartesian3.subtract(low, high, new Cesium.Cartesian3());\r\n const dotA = Cesium.Cartesian3.dot(vLowToHigh, vLowToThird);\r\n const magA = Math.sqrt(Cesium.Cartesian3.dot(vLowToHigh, vLowToHigh)) * Math.sqrt(Cesium.Cartesian3.dot(vLowToThird, vLowToThird));\r\n const dotB = Cesium.Cartesian3.dot(vHighToThird, vHighToLow);\r\n const magB = Math.sqrt(Cesium.Cartesian3.dot(vHighToThird, vHighToThird)) * Math.sqrt(Cesium.Cartesian3.dot(vHighToLow, vHighToLow));\r\n const angleA = Math.acos(Math.min(Math.max(dotA / (magA || 1), -1), 1));\r\n const angleB = Math.acos(Math.min(Math.max(dotB / (magB || 1), -1), 1));\r\n const cLow = Cesium.Cartographic.fromCartesian(low);\r\n const cHigh = Cesium.Cartographic.fromCartesian(high);\r\n const idAngA = 'measure_triangle_angle_a';\r\n const idAngB = 'measure_triangle_angle_b';\r\n this.angleLabelIds = [idAngA, idAngB];\r\n this.htmlLabelPool.add({ text: `${(angleA * 180 / Math.PI).toFixed(2)}°` }, { id: idAngA, lon: Cesium.Math.toDegrees(cLow.longitude), lat: Cesium.Math.toDegrees(cLow.latitude), height: cLow.height || 0, theme: 'measure-triangle-angle', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${(angleB * 180 / Math.PI).toFixed(2)}°` }, { id: idAngB, lon: Cesium.Math.toDegrees(cHigh.longitude), lat: Cesium.Math.toDegrees(cHigh.latitude), height: cHigh.height || 0, theme: 'measure-triangle-angle', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n const ratio = Math.max(0.01, Math.min(0.5, options.angleMarkerRatio ?? 0.2));\r\n const markerLen = Math.min(lenV, lenH) * ratio;\r\n if (lenV > 0.001 && lenH > 0.001) {\r\n const dirV = Cesium.Cartesian3.normalize(\r\n Cesium.Cartesian3.subtract(low, third, new Cesium.Cartesian3()),\r\n new Cesium.Cartesian3(),\r\n );\r\n const dirH = Cesium.Cartesian3.normalize(\r\n Cesium.Cartesian3.subtract(high, third, new Cesium.Cartesian3()),\r\n new Cesium.Cartesian3(),\r\n );\r\n const pOffV = new Cesium.Cartesian3(\r\n third.x + dirV.x * markerLen,\r\n third.y + dirV.y * markerLen,\r\n third.z + dirV.z * markerLen,\r\n );\r\n const pOffH = new Cesium.Cartesian3(\r\n third.x + dirH.x * markerLen,\r\n third.y + dirH.y * markerLen,\r\n third.z + dirH.z * markerLen,\r\n );\r\n const pCorner = new Cesium.Cartesian3(\r\n third.x + dirV.x * markerLen + dirH.x * markerLen,\r\n third.y + dirV.y * markerLen + dirH.y * markerLen,\r\n third.z + dirV.z * markerLen + dirH.z * markerLen,\r\n );\r\n const rightMarkerSeg1 = viewer.entities.add({\r\n polyline: {\r\n positions: [pOffV, pCorner],\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n const rightMarkerSeg2 = viewer.entities.add({\r\n polyline: {\r\n positions: [pOffH, pCorner],\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n this.angleMarkerEntities.push(rightMarkerSeg1, rightMarkerSeg2);\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n const result = {\r\n entity: this.segmentEntities,\r\n positions: [low, high, third],\r\n lengths: { vertical: lenV, horizontal: lenH, hypotenuse: lenHyp },\r\n angles: { acuteA: angleA, acuteB: angleB },\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n if (this.positions.length !== 1) return;\r\n const pos = viewer.scene.pickPosition(movement.endPosition);\r\n if (!pos) return;\r\n const c1 = Cesium.Cartographic.fromCartesian(this.positions[0]);\r\n const c2 = Cesium.Cartographic.fromCartesian(pos);\r\n const h1 = c1.height || 0;\r\n const h2 = c2.height || 0;\r\n const low = h1 <= h2 ? this.positions[0] : pos;\r\n const high = h1 > h2 ? this.positions[0] : pos;\r\n const cl = Cesium.Cartographic.fromCartesian(low);\r\n const maxH = Math.max(h1, h2);\r\n const third = Cesium.Cartesian3.fromDegrees(\r\n this.Cesium.Math.toDegrees(cl.longitude),\r\n this.Cesium.Math.toDegrees(cl.latitude),\r\n maxH,\r\n );\r\n this.previewLow = low;\r\n this.previewHigh = high;\r\n this.previewThird = third;\r\n const solidColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor = (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n if (!this.previewPointEntity) {\r\n this.previewPointEntity = viewer.entities.add({\r\n position: pos,\r\n point: {\r\n pixelSize: 8,\r\n color: options.pointColor || options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n } else {\r\n this.previewPointEntity.position = pos;\r\n }\r\n if (!this.previewSegmentEntities.length) {\r\n const pv = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewLow || !this.previewThird) return [];\r\n return [this.previewLow, this.previewThird];\r\n }, false),\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n const ph = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewThird || !this.previewHigh) return [];\r\n return [this.previewThird, this.previewHigh];\r\n }, false),\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n const phyp = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewLow || !this.previewHigh) return [];\r\n return [this.previewLow, this.previewHigh];\r\n }, false),\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n this.previewSegmentEntities.push(pv, ph, phyp);\r\n }\r\n const lenV = Cesium.Cartesian3.distance(low, third);\r\n const lenH = Cesium.Cartesian3.distance(third, high);\r\n const lenHyp = Cesium.Cartesian3.distance(low, high);\r\n const vLowToHigh = Cesium.Cartesian3.subtract(high, low, new Cesium.Cartesian3());\r\n const vLowToThird = Cesium.Cartesian3.subtract(third, low, new Cesium.Cartesian3());\r\n const vHighToThird = Cesium.Cartesian3.subtract(third, high, new Cesium.Cartesian3());\r\n const vHighToLow = Cesium.Cartesian3.subtract(low, high, new Cesium.Cartesian3());\r\n const dotA = Cesium.Cartesian3.dot(vLowToHigh, vLowToThird);\r\n const magA = Math.sqrt(Cesium.Cartesian3.dot(vLowToHigh, vLowToHigh)) * Math.sqrt(Cesium.Cartesian3.dot(vLowToThird, vLowToThird));\r\n const dotB = Cesium.Cartesian3.dot(vHighToThird, vHighToLow);\r\n const magB = Math.sqrt(Cesium.Cartesian3.dot(vHighToThird, vHighToThird)) * Math.sqrt(Cesium.Cartesian3.dot(vHighToLow, vHighToLow));\r\n const angleA = Math.acos(Math.min(Math.max((dotA / (magA || 1)), -1), 1));\r\n const angleB = Math.acos(Math.min(Math.max((dotB / (magB || 1)), -1), 1));\r\n const midV = new Cesium.Cartesian3((low.x + third.x) / 2, (low.y + third.y) / 2, (low.z + third.z) / 2);\r\n const midH = new Cesium.Cartesian3((third.x + high.x) / 2, (third.y + high.y) / 2, (third.z + high.z) / 2);\r\n const midHyp = new Cesium.Cartesian3((low.x + high.x) / 2, (low.y + high.y) / 2, (low.z + high.z) / 2);\r\n const mV = Cesium.Cartographic.fromCartesian(midV);\r\n const mH = Cesium.Cartographic.fromCartesian(midH);\r\n const mHyp = Cesium.Cartographic.fromCartesian(midHyp);\r\n const cLow = Cesium.Cartographic.fromCartesian(low);\r\n const cHigh = Cesium.Cartographic.fromCartesian(high);\r\n const idV = 'measure_triangle_seg_v';\r\n const idH = 'measure_triangle_seg_h';\r\n const idHyp = 'measure_triangle_seg_hyp';\r\n const idAngA = 'measure_triangle_angle_a';\r\n const idAngB = 'measure_triangle_angle_b';\r\n if (this.segmentLabelIds.length === 0) {\r\n this.segmentLabelIds = [idV, idH, idHyp];\r\n }\r\n if (this.angleLabelIds.length === 0) {\r\n this.angleLabelIds = [idAngA, idAngB];\r\n }\r\n this.htmlLabelPool.add({ text: `${lenV.toFixed(2)} m` }, { id: idV, lon: Cesium.Math.toDegrees(mV.longitude), lat: Cesium.Math.toDegrees(mV.latitude), height: mV.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${lenH.toFixed(2)} m` }, { id: idH, lon: Cesium.Math.toDegrees(mH.longitude), lat: Cesium.Math.toDegrees(mH.latitude), height: mH.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${lenHyp.toFixed(2)} m` }, { id: idHyp, lon: Cesium.Math.toDegrees(mHyp.longitude), lat: Cesium.Math.toDegrees(mHyp.latitude), height: mHyp.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${(angleA * 180 / Math.PI).toFixed(2)}°` }, { id: idAngA, lon: Cesium.Math.toDegrees(cLow.longitude), lat: Cesium.Math.toDegrees(cLow.latitude), height: cLow.height || 0, theme: 'measure-triangle-angle', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${(angleB * 180 / Math.PI).toFixed(2)}°` }, { id: idAngB, lon: Cesium.Math.toDegrees(cHigh.longitude), lat: Cesium.Math.toDegrees(cHigh.latitude), height: cHigh.height || 0, theme: 'measure-triangle-angle', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n const ratio = Math.max(0.01, Math.min(0.5, options.angleMarkerRatio ?? 0.2));\r\n const markerLen = Math.min(lenV, lenH) * ratio;\r\n if (lenV > 0.001 && lenH > 0.001) {\r\n const dirV = Cesium.Cartesian3.normalize(\r\n Cesium.Cartesian3.subtract(low, third, new Cesium.Cartesian3()),\r\n new Cesium.Cartesian3(),\r\n );\r\n const dirH = Cesium.Cartesian3.normalize(\r\n Cesium.Cartesian3.subtract(high, third, new Cesium.Cartesian3()),\r\n new Cesium.Cartesian3(),\r\n );\r\n const pOffV = new Cesium.Cartesian3(\r\n third.x + dirV.x * markerLen,\r\n third.y + dirV.y * markerLen,\r\n third.z + dirV.z * markerLen,\r\n );\r\n const pOffH = new Cesium.Cartesian3(\r\n third.x + dirH.x * markerLen,\r\n third.y + dirH.y * markerLen,\r\n third.z + dirH.z * markerLen,\r\n );\r\n const pCorner = new Cesium.Cartesian3(\r\n third.x + dirV.x * markerLen + dirH.x * markerLen,\r\n third.y + dirV.y * markerLen + dirH.y * markerLen,\r\n third.z + dirV.z * markerLen + dirH.z * markerLen,\r\n );\r\n this.previewMarkerP1 = pOffV;\r\n this.previewMarkerP2 = pOffH;\r\n this.previewMarkerCorner = pCorner;\r\n if (!this.previewAngleMarkerEntities.length) {\r\n const rightMarkerSeg1 = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewMarkerP1 || !this.previewMarkerCorner) return [];\r\n return [this.previewMarkerP1, this.previewMarkerCorner];\r\n }, false),\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n const rightMarkerSeg2 = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewMarkerP2 || !this.previewMarkerCorner) return [];\r\n return [this.previewMarkerP2, this.previewMarkerCorner];\r\n }, false),\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n this.previewAngleMarkerEntities.push(rightMarkerSeg1, rightMarkerSeg2);\r\n }\r\n }\r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n this.segmentEntities.forEach((e) => this.viewer.entities.remove(e));\r\n this.segmentEntities = [];\r\n this.angleMarkerEntities.forEach((e) => this.viewer.entities.remove(e));\r\n this.angleMarkerEntities = [];\r\n this.pointEntities.forEach((e) => this.viewer.entities.remove(e));\r\n this.pointEntities = [];\r\n this.previewSegmentEntities.forEach((e) => this.viewer.entities.remove(e));\r\n this.previewSegmentEntities = [];\r\n this.previewAngleMarkerEntities.forEach((e) => this.viewer.entities.remove(e));\r\n this.previewAngleMarkerEntities = [];\r\n if (this.previewPointEntity) {\r\n this.viewer.entities.remove(this.previewPointEntity);\r\n this.previewPointEntity = null;\r\n }\r\n if (this.htmlLabelPool && this.htmlLabelId) {\r\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\r\n this.htmlLabelId = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n if (this.segmentLabelIds.length && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice());\r\n }\r\n if (this.angleLabelIds.length && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds(this.angleLabelIds.slice());\r\n }\r\n this.segmentLabelIds = [];\r\n this.angleLabelIds = [];\r\n this.positions = [];\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const lineColor = opts.lineColor || opts.color || Cesium.Color.YELLOW;\r\n const dashColor = (opts.dashLineColor || opts.lineColor || opts.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n const width = opts.width || 3;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (posList.length < 2) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-triangle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-triangle-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-triangle-angle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n const c1 = Cesium.Cartographic.fromCartesian(posList[0]);\r\n const c2 = Cesium.Cartographic.fromCartesian(posList[1]);\r\n const h1 = c1.height || 0;\r\n const h2 = c2.height || 0;\r\n const low = h1 <= h2 ? posList[0] : posList[1];\r\n const high = h1 > h2 ? posList[0] : posList[1];\r\n const pLow = viewer.entities.add({ position: low, point: { pixelSize: 8, color: opts.pointColor || opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n const pHigh = viewer.entities.add({ position: high, point: { pixelSize: 8, color: opts.pointColor || opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n this.pointEntities.push(pLow, pHigh);\r\n const cl = Cesium.Cartographic.fromCartesian(low);\r\n const maxH = Math.max(h1, h2);\r\n const third = Cesium.Cartesian3.fromDegrees(\r\n Cesium.Math.toDegrees(cl.longitude),\r\n Cesium.Math.toDegrees(cl.latitude),\r\n maxH,\r\n );\r\n const vertical = viewer.entities.add({\r\n polyline: { positions: [low, third], width, material: lineColor, depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }) },\r\n });\r\n const horizontal = viewer.entities.add({\r\n polyline: { positions: [third, high], width, material: lineColor, depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }) },\r\n });\r\n const hypotenuse = viewer.entities.add({\r\n polyline: { positions: [low, high], width, material: lineColor, depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }) },\r\n });\r\n this.segmentEntities.push(vertical, horizontal, hypotenuse);\r\n const lenV = Cesium.Cartesian3.distance(low, third);\r\n const lenH = Cesium.Cartesian3.distance(third, high);\r\n const lenHyp = Cesium.Cartesian3.distance(low, high);\r\n const midV = new Cesium.Cartesian3((low.x + third.x) / 2, (low.y + third.y) / 2, (low.z + third.z) / 2);\r\n const midH = new Cesium.Cartesian3((third.x + high.x) / 2, (third.y + high.y) / 2, (third.z + high.z) / 2);\r\n const midHyp = new Cesium.Cartesian3((low.x + high.x) / 2, (low.y + high.y) / 2, (low.z + high.z) / 2);\r\n const mV = Cesium.Cartographic.fromCartesian(midV);\r\n const mH = Cesium.Cartographic.fromCartesian(midH);\r\n const mHyp = Cesium.Cartographic.fromCartesian(midHyp);\r\n const idV = record.id + '_tri_v';\r\n const idH = record.id + '_tri_h';\r\n const idHyp = record.id + '_tri_hyp';\r\n this.segmentLabelIds = [idV, idH, idHyp];\r\n this.htmlLabelPool.add({ text: `${lenV.toFixed(2)} m` }, { id: idV, lon: Cesium.Math.toDegrees(mV.longitude), lat: Cesium.Math.toDegrees(mV.latitude), height: mV.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${lenH.toFixed(2)} m` }, { id: idH, lon: Cesium.Math.toDegrees(mH.longitude), lat: Cesium.Math.toDegrees(mH.latitude), height: mH.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${lenHyp.toFixed(2)} m` }, { id: idHyp, lon: Cesium.Math.toDegrees(mHyp.longitude), lat: Cesium.Math.toDegrees(mHyp.latitude), height: mHyp.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n const vLowToHigh = Cesium.Cartesian3.subtract(high, low, new Cesium.Cartesian3());\r\n const vLowToThird = Cesium.Cartesian3.subtract(third, low, new Cesium.Cartesian3());\r\n const vHighToThird = Cesium.Cartesian3.subtract(third, high, new Cesium.Cartesian3());\r\n const vHighToLow = Cesium.Cartesian3.subtract(low, high, new Cesium.Cartesian3());\r\n const dotA = Cesium.Cartesian3.dot(vLowToHigh, vLowToThird);\r\n const magA = Math.sqrt(Cesium.Cartesian3.dot(vLowToHigh, vLowToHigh)) * Math.sqrt(Cesium.Cartesian3.dot(vLowToThird, vLowToThird));\r\n const dotB = Cesium.Cartesian3.dot(vHighToThird, vHighToLow);\r\n const magB = Math.sqrt(Cesium.Cartesian3.dot(vHighToThird, vHighToThird)) * Math.sqrt(Cesium.Cartesian3.dot(vHighToLow, vHighToLow));\r\n const angleA = Math.acos(Math.min(Math.max(dotA / (magA || 1), -1), 1));\r\n const angleB = Math.acos(Math.min(Math.max(dotB / (magB || 1), -1), 1));\r\n const cLow = Cesium.Cartographic.fromCartesian(low);\r\n const cHigh = Cesium.Cartographic.fromCartesian(high);\r\n const t = opts.labelText || { angle: '角度' };\r\n const idAngA = record.id + '_tri_angA';\r\n const idAngB = record.id + '_tri_angB';\r\n this.angleLabelIds = [idAngA, idAngB];\r\n this.htmlLabelPool.add({ text: `${t.angle}:${(angleA * 180 / Math.PI).toFixed(2)}°` }, { id: idAngA, lon: Cesium.Math.toDegrees(cLow.longitude), lat: Cesium.Math.toDegrees(cLow.latitude), height: cLow.height || 0, theme: 'measure-triangle-angle', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${t.angle}:${(angleB * 180 / Math.PI).toFixed(2)}°` }, { id: idAngB, lon: Cesium.Math.toDegrees(cHigh.longitude), lat: Cesium.Math.toDegrees(cHigh.latitude), height: cHigh.height || 0, theme: 'measure-triangle-angle', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n const ratio = Math.max(0.01, Math.min(0.5, opts.angleMarkerRatio ?? 0.2));\r\n const markerLen = Math.min(lenV, lenH) * ratio;\r\n if (lenV > 0.001 && lenH > 0.001) {\r\n const dirV = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(low, third, new Cesium.Cartesian3()), new Cesium.Cartesian3());\r\n const dirH = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(high, third, new Cesium.Cartesian3()), new Cesium.Cartesian3());\r\n const pOffV = new Cesium.Cartesian3(third.x + dirV.x * markerLen, third.y + dirV.y * markerLen, third.z + dirV.z * markerLen);\r\n const pOffH = new Cesium.Cartesian3(third.x + dirH.x * markerLen, third.y + dirH.y * markerLen, third.z + dirH.z * markerLen);\r\n const pCorner = new Cesium.Cartesian3(third.x + dirV.x * markerLen + dirH.x * markerLen, third.y + dirV.y * markerLen + dirH.y * markerLen, third.z + dirV.z * markerLen + dirH.z * markerLen);\r\n const rightMarkerSeg1 = viewer.entities.add({ polyline: { positions: [pOffV, pCorner], width, material: lineColor, depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }) } });\r\n const rightMarkerSeg2 = viewer.entities.add({ polyline: { positions: [pOffH, pCorner], width, material: lineColor, depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }) } });\r\n this.angleMarkerEntities.push(rightMarkerSeg1, rightMarkerSeg2);\r\n }\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class SpaceMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private entity: any = null;\r\n private labelEntity: any = null;\r\n private positions: any[] = [];\r\n private tempPoints: any[] = [];\r\n private htmlLabelPool: any = null;\r\n private htmlLabelId: string | null = null;\r\n private previewEntity: any = null;\r\n private previewPos: any = null;\r\n private previewLabelId: string | null = null;\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-space', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((movement: any) => {\r\n const pos = viewer.scene.pickPosition(movement.position);\r\n if (!pos) return;\r\n this.positions.push(pos);\r\n const point = viewer.entities.add({\r\n position: pos,\r\n point: {\r\n pixelSize: 8,\r\n color: options.pointColor || options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.tempPoints.push(point);\r\n if (this.positions.length === 2) {\r\n this.stop();\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n const p1 = this.positions[0];\r\n const p2 = this.positions[1];\r\n const solidColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor = (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n this.entity = viewer.entities.add({\r\n polyline: {\r\n positions: [p1, p2],\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n const total = Cesium.Cartesian3.distance(p1, p2);\r\n const last = p2;\r\n const lc = Cesium.Cartographic.fromCartesian(last);\r\n const id = this.htmlLabelId || `measure_space_${Date.now()}`;\r\n this.htmlLabelId = id;\r\n this.htmlLabelPool.add(\r\n { text: `${total.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(lc.longitude),\r\n lat: Cesium.Math.toDegrees(lc.latitude),\r\n height: lc.height || 0,\r\n theme: 'measure-space',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n },\r\n );\r\n const result = {\r\n entity: this.entity,\r\n label: this.labelEntity,\r\n positions: this.positions,\r\n distance: total,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n if (this.positions.length !== 1) return;\r\n const pos = viewer.scene.pickPosition(movement.endPosition);\r\n if (!pos) return;\r\n this.previewPos = pos;\r\n const p1 = this.positions[0];\r\n const d = Cesium.Cartesian3.distance(p1, pos);\r\n const mid = new Cesium.Cartesian3(\r\n (p1.x + pos.x) / 2,\r\n (p1.y + pos.y) / 2,\r\n (p1.z + pos.z) / 2,\r\n );\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const pid = this.previewLabelId || 'measure_space_preview';\r\n this.previewLabelId = pid;\r\n this.htmlLabelPool.add(\r\n { text: `${d.toFixed(2)} m` },\r\n {\r\n id: pid,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-space',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n },\r\n );\r\n const solidColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor = (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n if (!this.previewEntity) {\r\n this.previewEntity = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewPos || !this.positions.length) return [];\r\n const first = this.positions[0];\r\n return [first, this.previewPos];\r\n }, false),\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n }\r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n \r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n if (this.entity) {\r\n this.viewer.entities.remove(this.entity);\r\n this.entity = null;\r\n }\r\n if (this.labelEntity) {\r\n this.viewer.entities.remove(this.labelEntity);\r\n this.labelEntity = null;\r\n }\r\n if (this.htmlLabelPool && this.htmlLabelId) {\r\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\r\n this.htmlLabelId = null;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n this.tempPoints.forEach((p) => this.viewer.entities.remove(p));\r\n this.tempPoints = [];\r\n this.positions = [];\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const lineColor = opts.lineColor || opts.color || Cesium.Color.YELLOW;\r\n const dashColor = (opts.dashLineColor || opts.lineColor || opts.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n const width = opts.width || 3;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (!posList.length) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-space', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n if (posList.length >= 1) {\r\n const p0 = viewer.entities.add({ position: posList[0], point: { pixelSize: 8, color: opts.pointColor || opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n this.tempPoints.push(p0);\r\n }\r\n if (posList.length >= 2) {\r\n const p1 = viewer.entities.add({ position: posList[1], point: { pixelSize: 8, color: opts.pointColor || opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n this.tempPoints.push(p1);\r\n this.entity = viewer.entities.add({\r\n polyline: {\r\n positions: [posList[0], posList[1]],\r\n width,\r\n material: lineColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n const total = Cesium.Cartesian3.distance(posList[0], posList[1]);\r\n const lc = Cesium.Cartographic.fromCartesian(posList[1]);\r\n const id = record.id + '_label';\r\n this.htmlLabelId = id;\r\n this.htmlLabelPool.add({ text: `${total.toFixed(2)} m` }, {\r\n id,\r\n lon: Cesium.Math.toDegrees(lc.longitude),\r\n lat: Cesium.Math.toDegrees(lc.latitude),\r\n height: lc.height || 0,\r\n theme: 'measure-space',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n });\r\n }\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class AreaMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private entity: any = null;\r\n private labelEntity: any = null;\r\n private positions: any[] = [];\r\n private tempPoints: any[] = [];\r\n private primitive: any = null;\r\n private previewEntity: any = null;\r\n private previewPos: any = null;\r\n private edgeEntities: any[] = [];\r\n private pointEntities: any[] = [];\r\n private previewEdgeEntity: any = null;\r\n private previewPointEntities: any[] = [];\r\n private htmlLabelPool: any = null;\r\n private htmlLabelId: string | null = null;\r\n private previewLabelId: string | null = null;\r\n private segmentLabelIds: string[] = [];\r\n private angleLabelIds: string[] = [];\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-area', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-area-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-area-angle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((movement: any) => {\r\n const pos = viewer.scene.pickPosition(movement.position);\r\n if (!pos) return;\r\n this.positions.push(pos);\r\n const point = viewer.entities.add({\r\n position: pos,\r\n point: {\r\n pixelSize: 8,\r\n color: options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.tempPoints.push(point);\r\n if (this.primitive) {\r\n viewer.scene.primitives.remove(this.primitive);\r\n this.primitive = null;\r\n }\r\n const hierarchy = new Cesium.PolygonHierarchy(this.positions.slice());\r\n const geom = new Cesium.PolygonGeometry({\r\n polygonHierarchy: hierarchy,\r\n vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT,\r\n perPositionHeight: true,\r\n arcType: Cesium.ArcType.NONE,\r\n });\r\n const instance = new Cesium.GeometryInstance({ geometry: geom });\r\n const color = options.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n const occludedColor = (options.color && options.color.withAlpha)\r\n ? options.color.withAlpha(0.25)\r\n : Cesium.Color.RED.withAlpha(0.4);\r\n this.primitive = new Cesium.Primitive({\r\n geometryInstances: instance,\r\n appearance: new Cesium.MaterialAppearance({\r\n material: Cesium.Material.fromType('Color', { color }),\r\n translucent: true,\r\n closed: true,\r\n }),\r\n depthFailAppearance: new Cesium.MaterialAppearance({\r\n material: Cesium.Material.fromType('Color', { color: occludedColor }),\r\n translucent: true,\r\n closed: true,\r\n }),\r\n });\r\n viewer.scene.primitives.add(this.primitive);\r\n if (this.positions.length >= 2) {\r\n if (this.edgeEntities.length) {\r\n for (const e of this.edgeEntities) {\r\n try {\r\n viewer.entities.remove(e);\r\n } catch {}\r\n }\r\n this.edgeEntities = [];\r\n }\r\n const lineColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor =\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED;\r\n const polylinePositions = this.positions.concat([this.positions[0]]);\r\n const lineEntity = viewer.entities.add({\r\n polyline: {\r\n positions: polylinePositions,\r\n width: options.width || 2,\r\n material: lineColor,\r\n clampToGround: false,\r\n arcType: Cesium.ArcType.NONE,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n this.edgeEntities.push(lineEntity);\r\n }\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n if (this.positions.length === 0) return;\r\n const pos = viewer.scene.pickPosition(movement.endPosition);\r\n if (!pos) return;\r\n this.previewPos = pos;\r\n const pts = this.positions.concat([pos]);\r\n const center = new Cesium.Cartesian3(\r\n pts.reduce((s: number, p: any) => s + p.x, 0) / pts.length,\r\n pts.reduce((s: number, p: any) => s + p.y, 0) / pts.length,\r\n pts.reduce((s: number, p: any) => s + p.z, 0) / pts.length,\r\n );\r\n const plane = new Cesium.EllipsoidTangentPlane(center, Cesium.Ellipsoid.WGS84);\r\n const points2D = plane.projectPointsOntoPlane(pts);\r\n let area2D = 0;\r\n for (let i = 0; i < points2D.length; i++) {\r\n const j = (i + 1) % points2D.length;\r\n area2D += points2D[i].x * points2D[j].y - points2D[j].x * points2D[i].y;\r\n }\r\n area2D = Math.abs(area2D) / 2;\r\n const cc = Cesium.Cartographic.fromCartesian(center);\r\n const pid = this.previewLabelId || 'measure_area_preview';\r\n this.previewLabelId = pid;\r\n const t = options.labelText || { area: '面积' };\r\n this.htmlLabelPool.add(\r\n { text: `${t.area}:${area2D.toFixed(2)} m²` },\r\n {\r\n id: pid,\r\n lon: Cesium.Math.toDegrees(cc.longitude),\r\n lat: Cesium.Math.toDegrees(cc.latitude),\r\n height: cc.height || 0,\r\n theme: 'measure-area',\r\n show: true,\r\n },\r\n );\r\n if (!this.previewEntity) {\r\n const color = options.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n this.previewEntity = viewer.entities.add({\r\n polygon: {\r\n hierarchy: new Cesium.CallbackProperty(() => {\r\n if (!this.previewPos || !this.positions.length) return undefined;\r\n const all = this.positions.concat([this.previewPos]);\r\n return new Cesium.PolygonHierarchy(all);\r\n }, false),\r\n material: color,\r\n perPositionHeight: true,\r\n arcType: Cesium.ArcType.NONE,\r\n },\r\n });\r\n const lineColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor =\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED;\r\n this.previewEdgeEntity = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewPos || !this.positions.length) return [];\r\n const all = this.positions.concat([this.previewPos, this.positions[0]]);\r\n return all;\r\n }, false),\r\n width: options.width || 2,\r\n material: lineColor,\r\n clampToGround: false,\r\n arcType: Cesium.ArcType.NONE,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n const pointColor = options.pointColor || options.color || Cesium.Color.YELLOW;\r\n const hoverPoint = viewer.entities.add({\r\n position: new Cesium.CallbackProperty(() => this.previewPos || this.positions[this.positions.length - 1], false),\r\n point: {\r\n pixelSize: 8,\r\n color: pointColor,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.previewPointEntities.push(hoverPoint);\r\n }\r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n this.handler.setInputAction(() => {\r\n if (this.positions.length < 3) {\r\n this.stop();\r\n return;\r\n }\r\n if (this.positions.length >= 3) {\r\n this.positions.pop();\r\n const lastPoint = this.tempPoints.pop();\r\n if (lastPoint) this.viewer.entities.remove(lastPoint);\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewEdgeEntity) {\r\n this.viewer.entities.remove(this.previewEdgeEntity);\r\n this.previewEdgeEntity = null;\r\n }\r\n if (this.previewPointEntities.length) {\r\n for (const p of this.previewPointEntities) {\r\n try {\r\n this.viewer.entities.remove(p);\r\n } catch {}\r\n }\r\n this.previewPointEntities = [];\r\n }\r\n this.previewPos = null;\r\n this.stop();\r\n const center = new Cesium.Cartesian3(\r\n this.positions.reduce((s: number, p: any) => s + p.x, 0) / this.positions.length,\r\n this.positions.reduce((s: number, p: any) => s + p.y, 0) / this.positions.length,\r\n this.positions.reduce((s: number, p: any) => s + p.z, 0) / this.positions.length,\r\n );\r\n const plane = new Cesium.EllipsoidTangentPlane(center, Cesium.Ellipsoid.WGS84);\r\n const points2D = plane.projectPointsOntoPlane(this.positions);\r\n let area2D = 0;\r\n for (let i = 0; i < points2D.length; i++) {\r\n const j = (i + 1) % points2D.length;\r\n area2D += points2D[i].x * points2D[j].y - points2D[j].x * points2D[i].y;\r\n }\r\n area2D = Math.abs(area2D) / 2;\r\n const cc = Cesium.Cartographic.fromCartesian(center);\r\n const id = this.htmlLabelId || `measure_area_${Date.now()}`;\r\n this.htmlLabelId = id;\r\n const t = options.labelText || { area: '面积', side: '边长', angle: '角度' };\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n this.htmlLabelPool.add(\r\n { text: `${t.area}:${area2D.toFixed(2)} m²` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(cc.longitude),\r\n lat: Cesium.Math.toDegrees(cc.latitude),\r\n height: cc.height || 0,\r\n theme: 'measure-area',\r\n show: true,\r\n },\r\n );\r\n this.labelEntity = this.htmlLabelId;\r\n for (let i = 0; i < this.positions.length; i++) {\r\n const j = (i + 1) % this.positions.length;\r\n const p1 = this.positions[i];\r\n const p2 = this.positions[j];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n const mid = new Cesium.Cartesian3((p1.x + p2.x) / 2, (p1.y + p2.y) / 2, (p1.z + p2.z) / 2);\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const sid = `measure_area_seg_${Date.now()}_${i}`;\r\n this.segmentLabelIds.push(sid);\r\n this.htmlLabelPool.add(\r\n { text: `${t.side}:${d.toFixed(2)} m` },\r\n {\r\n id: sid,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-area-seg',\r\n show: true,\r\n },\r\n );\r\n }\r\n const p2d = points2D;\r\n for (let i = 0; i < p2d.length; i++) {\r\n const prev = p2d[(i - 1 + p2d.length) % p2d.length];\r\n const curr = p2d[i];\r\n const next = p2d[(i + 1) % p2d.length];\r\n const v1x = prev.x - curr.x;\r\n const v1y = prev.y - curr.y;\r\n const v2x = next.x - curr.x;\r\n const v2y = next.y - curr.y;\r\n const len1 = Math.sqrt(v1x * v1x + v1y * v1y);\r\n const len2 = Math.sqrt(v2x * v2x + v2y * v2y);\r\n if (!len1 || !len2) continue;\r\n const dot = (v1x / len1) * (v2x / len2) + (v1y / len1) * (v2y / len2);\r\n const ang = Math.acos(Math.min(1, Math.max(-1, dot))) * (180 / Math.PI);\r\n const pc = Cesium.Cartographic.fromCartesian(this.positions[i]);\r\n const aid = `measure_area_angle_${Date.now()}_${i}`;\r\n this.angleLabelIds.push(aid);\r\n this.htmlLabelPool.add(\r\n { text: `${t.angle}:${ang.toFixed(2)} °` },\r\n {\r\n id: aid,\r\n lon: Cesium.Math.toDegrees(pc.longitude),\r\n lat: Cesium.Math.toDegrees(pc.latitude),\r\n height: pc.height || 0,\r\n theme: 'measure-area-angle',\r\n show: true,\r\n },\r\n );\r\n }\r\n const result = {\r\n entity: this.primitive,\r\n label: this.labelEntity,\r\n positions: this.positions,\r\n area: area2D,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n if (this.entity) {\r\n this.viewer.entities.remove(this.entity);\r\n this.entity = null;\r\n }\r\n if (this.primitive) {\r\n this.viewer.scene.primitives.remove(this.primitive);\r\n this.primitive = null;\r\n }\r\n if (this.edgeEntities.length) {\r\n for (const e of this.edgeEntities) {\r\n try {\r\n this.viewer.entities.remove(e);\r\n } catch {}\r\n }\r\n this.edgeEntities = [];\r\n }\r\n if (this.pointEntities.length) {\r\n for (const p of this.pointEntities) {\r\n try {\r\n this.viewer.entities.remove(p);\r\n } catch {}\r\n }\r\n this.pointEntities = [];\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n this.previewPos = null;\r\n }\r\n if (this.previewEdgeEntity) {\r\n this.viewer.entities.remove(this.previewEdgeEntity);\r\n this.previewEdgeEntity = null;\r\n }\r\n if (this.previewPointEntities.length) {\r\n for (const p of this.previewPointEntities) {\r\n try {\r\n this.viewer.entities.remove(p);\r\n } catch {}\r\n }\r\n this.previewPointEntities = [];\r\n }\r\n if (this.labelEntity) {\r\n this.viewer.entities.remove(this.labelEntity);\r\n this.labelEntity = null;\r\n }\r\n if (this.htmlLabelPool && this.htmlLabelId) {\r\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\r\n this.htmlLabelId = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n if (this.segmentLabelIds.length && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice());\r\n }\r\n if (this.angleLabelIds.length && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds(this.angleLabelIds.slice());\r\n }\r\n this.segmentLabelIds = [];\r\n this.angleLabelIds = [];\r\n this.tempPoints.forEach((p) => this.viewer.entities.remove(p));\r\n this.tempPoints = [];\r\n this.positions = [];\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (posList.length < 3) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-area', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-area-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-area-angle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n for (const pos of posList) {\r\n const point = viewer.entities.add({ position: pos, point: { pixelSize: 8, color: opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n this.tempPoints.push(point);\r\n }\r\n const center = new Cesium.Cartesian3(\r\n posList.reduce((s: number, p: any) => s + p.x, 0) / posList.length,\r\n posList.reduce((s: number, p: any) => s + p.y, 0) / posList.length,\r\n posList.reduce((s: number, p: any) => s + p.z, 0) / posList.length,\r\n );\r\n const plane = new Cesium.EllipsoidTangentPlane(center, Cesium.Ellipsoid.WGS84);\r\n const points2D = plane.projectPointsOntoPlane(posList);\r\n let area2D = 0;\r\n for (let i = 0; i < points2D.length; i++) {\r\n const j = (i + 1) % points2D.length;\r\n area2D += points2D[i].x * points2D[j].y - points2D[j].x * points2D[i].y;\r\n }\r\n area2D = Math.abs(area2D) / 2;\r\n const cc = Cesium.Cartographic.fromCartesian(center);\r\n const id = record.id + '_area';\r\n this.htmlLabelId = id;\r\n const t = opts.labelText || { area: '面积', side: '边长', angle: '角度' };\r\n this.htmlLabelPool.add({ text: `${t.area}:${area2D.toFixed(2)} m²` }, {\r\n id,\r\n lon: Cesium.Math.toDegrees(cc.longitude),\r\n lat: Cesium.Math.toDegrees(cc.latitude),\r\n height: cc.height || 0,\r\n theme: 'measure-area',\r\n show: true,\r\n });\r\n const hierarchy = new Cesium.PolygonHierarchy(posList);\r\n const geom = new Cesium.PolygonGeometry({ polygonHierarchy: hierarchy, vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT, perPositionHeight: true });\r\n const instance = new Cesium.GeometryInstance({ geometry: geom });\r\n const color = opts.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n const occludedColor = (opts.color && opts.color.withAlpha) ? opts.color.withAlpha(0.25) : Cesium.Color.RED.withAlpha(0.4);\r\n const primitive = new Cesium.Primitive({\r\n geometryInstances: instance,\r\n appearance: new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color }), translucent: true, closed: true }),\r\n depthFailAppearance: new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color: occludedColor }), translucent: true, closed: true }),\r\n });\r\n viewer.scene.primitives.add(primitive);\r\n this.primitive = primitive;\r\n for (let i = 0; i < posList.length; i++) {\r\n const j = (i + 1) % posList.length;\r\n const p1 = posList[i];\r\n const p2 = posList[j];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n const mid = new Cesium.Cartesian3((p1.x + p2.x) / 2, (p1.y + p2.y) / 2, (p1.z + p2.z) / 2);\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const sid = record.id + `_area_seg_${i}`;\r\n this.segmentLabelIds.push(sid);\r\n this.htmlLabelPool.add({ text: `${t.side}:${d.toFixed(2)} m` }, { id: sid, lon: Cesium.Math.toDegrees(mc.longitude), lat: Cesium.Math.toDegrees(mc.latitude), height: mc.height || 0, theme: 'measure-area-seg', show: true });\r\n }\r\n const p2d = points2D;\r\n for (let i = 0; i < p2d.length; i++) {\r\n const prev = p2d[(i - 1 + p2d.length) % p2d.length];\r\n const curr = p2d[i];\r\n const next = p2d[(i + 1) % p2d.length];\r\n const v1x = prev.x - curr.x;\r\n const v1y = prev.y - curr.y;\r\n const v2x = next.x - curr.x;\r\n const v2y = next.y - curr.y;\r\n const len1 = Math.sqrt(v1x * v1x + v1y * v1y);\r\n const len2 = Math.sqrt(v2x * v2x + v2y * v2y);\r\n if (!len1 || !len2) continue;\r\n const dot = (v1x / len1) * (v2x / len2) + (v1y / len1) * (v2y / len2);\r\n const ang = Math.acos(Math.min(1, Math.max(-1, dot))) * (180 / Math.PI);\r\n const pc = Cesium.Cartographic.fromCartesian(posList[i]);\r\n const aid = record.id + `_area_angle_${i}`;\r\n this.angleLabelIds.push(aid);\r\n this.htmlLabelPool.add({ text: `${t.angle}:${ang.toFixed(2)} °` }, { id: aid, lon: Cesium.Math.toDegrees(pc.longitude), lat: Cesium.Math.toDegrees(pc.latitude), height: pc.height || 0, theme: 'measure-area-angle', show: true });\r\n }\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class CircleMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private entity: any = null;\r\n private positions: any[] = [];\r\n private currentRadius: number = 0;\r\n private labelEntity: any = null;\r\n private previewLabel: any = null;\r\n private ellipsePrimitive: any = null;\r\n private previewEntity: any = null;\r\n private isPrimitive: boolean = false;\r\n private htmlLabelPool: any = null;\r\n private htmlLabelId: string | null = null;\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-circle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n const text = ctx?.data?.text || '';\r\n el.innerHTML = String(text);\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((click: any) => {\r\n const position = viewer.scene.pickPosition(click.position);\r\n if (!position) return;\r\n this.positions.push(position);\r\n if (this.positions.length === 2) {\r\n this.stop();\r\n const center = this.positions[0];\r\n const edge = this.positions[1];\r\n const radius = Cesium.Cartesian3.distance(center, edge);\r\n const area = Math.PI * radius * radius;\r\n const perimeter = 2 * Math.PI * radius;\r\n const t = options.labelText || { radius: '半径', area: '面积', circumference: '周长' };\r\n const centerLabelPos = center;\r\n if (!this.labelEntity) {\r\n this.labelEntity = viewer.entities.add({\r\n position: centerLabelPos,\r\n label: {\r\n text: `${t.radius}:${radius.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²\\n${t.circumference}:${perimeter.toFixed(2)} m`,\r\n font: '14px sans-serif',\r\n fillColor: Cesium.Color.WHITE,\r\n outlineColor: Cesium.Color.BLACK,\r\n outlineWidth: 2,\r\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\r\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\r\n pixelOffset: new Cesium.Cartesian2(0, -10),\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n eyeOffset: new Cesium.Cartesian3(0, 0, -1000),\r\n showBackground: true,\r\n backgroundColor: Cesium.Color.BLACK.withAlpha(0.6),\r\n show: false,\r\n },\r\n });\r\n } else {\r\n this.labelEntity.position = centerLabelPos;\r\n this.labelEntity.label.text = `${t.radius}:${radius.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²\\n${t.circumference}:${perimeter.toFixed(2)} m`;\r\n }\r\n if (this.previewEntity) {\r\n viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n const cartoCenter = Cesium.Cartographic.fromCartesian(center);\r\n const geom = new Cesium.EllipseGeometry({\r\n center,\r\n semiMajorAxis: radius,\r\n semiMinorAxis: radius,\r\n height: cartoCenter.height || 0,\r\n vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT,\r\n });\r\n const instance = new Cesium.GeometryInstance({ geometry: geom });\r\n const color = options.color || Cesium.Color.YELLOW.withAlpha(0.5);\r\n const occludedColor = (options.color && options.color.withAlpha)\r\n ? options.color.withAlpha(0.25)\r\n : Cesium.Color.RED.withAlpha(0.4);\r\n if (this.ellipsePrimitive) {\r\n viewer.scene.primitives.remove(this.ellipsePrimitive);\r\n this.ellipsePrimitive = null;\r\n }\r\n this.ellipsePrimitive = new Cesium.Primitive({\r\n geometryInstances: instance,\r\n appearance: new Cesium.MaterialAppearance({\r\n material: Cesium.Material.fromType('Color', { color }),\r\n translucent: true,\r\n closed: true,\r\n }),\r\n depthFailAppearance: new Cesium.MaterialAppearance({\r\n material: Cesium.Material.fromType('Color', { color: occludedColor }),\r\n translucent: true,\r\n closed: true,\r\n }),\r\n });\r\n viewer.scene.primitives.add(this.ellipsePrimitive);\r\n this.entity = this.ellipsePrimitive;\r\n this.isPrimitive = true;\r\n const c = Cesium.Cartographic.fromCartesian(center);\r\n const lng = Cesium.Math.toDegrees(c.longitude);\r\n const lat = Cesium.Math.toDegrees(c.latitude);\r\n const h = c.height || 0;\r\n const id = this.htmlLabelId || `measure_circle_${Date.now()}`;\r\n this.htmlLabelId = id;\r\n const text = `${t.radius}:${radius.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²\\n${t.circumference}:${perimeter.toFixed(2)} m`;\r\n this.htmlLabelPool.add({ text }, { id, lon: lng, lat, height: h, theme: 'measure-circle', show: true });\r\n const result = {\r\n entity: this.entity,\r\n label: this.labelEntity,\r\n positions: this.positions,\r\n radius,\r\n area,\r\n perimeter,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n if (this.positions.length !== 1) return;\r\n const center = this.positions[0];\r\n const ray = viewer.camera.getPickRay(movement.endPosition);\r\n const edge = viewer.scene.globe.pick(ray, viewer.scene);\r\n if (!edge) return;\r\n const radius = Cesium.Cartesian3.distance(center, edge);\r\n this.currentRadius = radius;\r\n const cartoCenter = Cesium.Cartographic.fromCartesian(center);\r\n const area = Math.PI * radius * radius;\r\n const perimeter = 2 * Math.PI * radius;\r\n const t = options.labelText || { radius: '半径', area: '面积', circumference: '周长' };\r\n const centerLabelPos = center;\r\n if (!this.labelEntity) {\r\n this.labelEntity = viewer.entities.add({\r\n position: centerLabelPos,\r\n label: {\r\n text: `${t.radius}:${radius.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²\\n${t.circumference}:${perimeter.toFixed(2)} m`,\r\n font: '14px sans-serif',\r\n fillColor: Cesium.Color.WHITE,\r\n outlineColor: Cesium.Color.BLACK,\r\n outlineWidth: 2,\r\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\r\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\r\n pixelOffset: new Cesium.Cartesian2(0, -10),\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n eyeOffset: new Cesium.Cartesian3(0, 0, -1000),\r\n showBackground: true,\r\n backgroundColor: Cesium.Color.BLACK.withAlpha(0.6),\r\n show: false,\r\n },\r\n });\r\n } else {\r\n this.labelEntity.position = centerLabelPos;\r\n this.labelEntity.label.text = `${t.radius}:${radius.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²\\n${t.circumference}:${perimeter.toFixed(2)} m`;\r\n }\r\n const c = Cesium.Cartographic.fromCartesian(center);\r\n const lng = Cesium.Math.toDegrees(c.longitude);\r\n const lat = Cesium.Math.toDegrees(c.latitude);\r\n const h = c.height || 0;\r\n const id = this.htmlLabelId || `measure_circle_${Date.now()}`;\r\n this.htmlLabelId = id;\r\n const text = `${t.radius}:${radius.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²\\n${t.circumference}:${perimeter.toFixed(2)} m`;\r\n this.htmlLabelPool.add({ text }, { id, lon: lng, lat, height: h, theme: 'measure-circle', show: true });\r\n if (!this.previewEntity) {\r\n const color = options.color || Cesium.Color.YELLOW.withAlpha(0.5);\r\n this.previewEntity = viewer.entities.add({\r\n position: center,\r\n ellipse: {\r\n semiMajorAxis: new Cesium.CallbackProperty(() => this.currentRadius, false),\r\n semiMinorAxis: new Cesium.CallbackProperty(() => this.currentRadius, false),\r\n height: cartoCenter.height || 0,\r\n material: color,\r\n },\r\n });\r\n }\r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n if (this.entity) {\r\n if (this.isPrimitive) {\r\n this.viewer.scene.primitives.remove(this.entity);\r\n } else {\r\n this.viewer.entities.remove(this.entity);\r\n }\r\n this.entity = null;\r\n this.isPrimitive = false;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.labelEntity) {\r\n this.viewer.entities.remove(this.labelEntity);\r\n this.labelEntity = null;\r\n }\r\n if (this.previewLabel) {\r\n this.viewer.entities.remove(this.previewLabel);\r\n this.previewLabel = null;\r\n }\r\n if (this.ellipsePrimitive) {\r\n this.viewer.scene.primitives.remove(this.ellipsePrimitive);\r\n this.ellipsePrimitive = null;\r\n }\r\n if (this.htmlLabelPool && this.htmlLabelId) {\r\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\r\n this.htmlLabelId = null;\r\n }\r\n this.positions = [];\r\n this.currentRadius = 0;\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (posList.length < 2) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-circle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n const text = ctx?.data?.text || '';\r\n el.innerHTML = String(text);\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n const center = posList[0];\r\n const edge = posList[1];\r\n const radius = Cesium.Cartesian3.distance(center, edge);\r\n const area = Math.PI * radius * radius;\r\n const perimeter = 2 * Math.PI * radius;\r\n const cartoCenter = Cesium.Cartographic.fromCartesian(center);\r\n const geom = new Cesium.EllipseGeometry({ center, semiMajorAxis: radius, semiMinorAxis: radius, height: cartoCenter.height || 0, vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT });\r\n const instance = new Cesium.GeometryInstance({ geometry: geom });\r\n const color = opts.color || Cesium.Color.YELLOW.withAlpha(0.5);\r\n const occludedColor = (opts.color && opts.color.withAlpha) ? opts.color.withAlpha(0.25) : Cesium.Color.RED.withAlpha(0.4);\r\n const primitive = new Cesium.Primitive({\r\n geometryInstances: instance,\r\n appearance: new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color }), translucent: true, closed: true }),\r\n depthFailAppearance: new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color: occludedColor }), translucent: true, closed: true }),\r\n });\r\n viewer.scene.primitives.add(primitive);\r\n this.ellipsePrimitive = primitive;\r\n this.entity = primitive;\r\n this.isPrimitive = true;\r\n const c = Cesium.Cartographic.fromCartesian(center);\r\n const id = record.id + '_circle';\r\n this.htmlLabelId = id;\r\n const t = opts.labelText || { radius: '半径', area: '面积', circumference: '周长' };\r\n const text = `${t.radius}:${radius.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²\\n${t.circumference}:${perimeter.toFixed(2)} m`;\r\n this.htmlLabelPool.add({ text }, { id, lon: Cesium.Math.toDegrees(c.longitude), lat: Cesium.Math.toDegrees(c.latitude), height: c.height || 0, theme: 'measure-circle', show: true });\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class PolylineDistanceMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private entity: any = null;\r\n private labelEntity: any = null;\r\n private positions: any[] = [];\r\n private tempPoints: any[] = [];\r\n private segmentLabels: any[] = [];\r\n private hoverPos: any = null;\r\n private previewPos: any = null;\r\n private previewLabel: any = null;\r\n private previewEntity: any = null;\r\n private htmlLabelPool: any = null;\r\n private totalLabelId: string | null = null;\r\n private segmentLabelIds: string[] = [];\r\n private previewLabelId: string | null = null;\r\n \r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-polyline-total', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-polyline-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((movement: any) => {\r\n const pos = viewer.scene.pickPosition(movement.position);\r\n if (!pos) return;\r\n this.positions.push(pos);\r\n const point = viewer.entities.add({\r\n position: pos,\r\n point: {\r\n pixelSize: 8,\r\n color: options.pointColor || options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.tempPoints.push(point);\r\n if (!this.entity) {\r\n this.entity = viewer.entities.add({\r\n polyline: {\r\n positions: this.positions.slice(),\r\n width: options.width || 3,\r\n material: options.lineColor || options.color || Cesium.Color.YELLOW,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n } else {\r\n this.entity.polyline.positions = this.positions.slice();\r\n }\r\n if (this.positions.length >= 2) {\r\n const p1 = this.positions[this.positions.length - 2];\r\n const p2 = this.positions[this.positions.length - 1];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n const mid = new Cesium.Cartesian3(\r\n (p1.x + p2.x) / 2,\r\n (p1.y + p2.y) / 2,\r\n (p1.z + p2.z) / 2,\r\n );\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const id = `measure_polyline_seg_${this.segmentLabelIds.length}_${Date.now()}`;\r\n this.segmentLabelIds.push(id);\r\n this.htmlLabelPool.add(\r\n { text: `${d.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-polyline-seg',\r\n show: true,\r\n },\r\n );\r\n }\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction(() => {\r\n if (this.positions.length < 2) {\r\n this.stop();\r\n return;\r\n }\r\n this.stop();\r\n if (this.previewLabelId) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n if (this.hoverPos) {\r\n this.hoverPos = null;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.positions.length >= 2 && this.tempPoints.length >= 2) {\r\n const lastPoint = this.tempPoints[this.tempPoints.length - 1];\r\n this.viewer.entities.remove(lastPoint);\r\n this.tempPoints.pop();\r\n }\r\n if (this.segmentLabelIds.length >= 1) {\r\n const lastId = this.segmentLabelIds[this.segmentLabelIds.length - 1];\r\n if (lastId) {\r\n this.htmlLabelPool.removeByIds([lastId]);\r\n this.segmentLabelIds.pop();\r\n }\r\n }\r\n if (this.positions.length >= 2) {\r\n this.positions.pop();\r\n }\r\n let total = 0;\r\n for (let i = 1; i < this.positions.length; i++) {\r\n const p1 = this.positions[i - 1];\r\n const p2 = this.positions[i];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n total += d;\r\n }\r\n const last = this.positions[this.positions.length - 1];\r\n if (this.entity && this.entity.polyline) {\r\n this.entity.polyline.positions = this.positions;\r\n }\r\n const lc = Cesium.Cartographic.fromCartesian(last);\r\n const id = this.totalLabelId || `measure_polyline_total_${Date.now()}`;\r\n this.totalLabelId = id;\r\n this.htmlLabelPool.add(\r\n { text: `${total.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(lc.longitude),\r\n lat: Cesium.Math.toDegrees(lc.latitude),\r\n height: lc.height || 0,\r\n theme: 'measure-polyline-total',\r\n show: true,\r\n },\r\n );\r\n this.labelEntity = this.totalLabelId;\r\n const result = {\r\n entity: this.entity,\r\n label: this.labelEntity,\r\n segmentLabels: this.segmentLabelIds,\r\n positions: this.positions,\r\n distance: total,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n if (this.positions.length === 0) return;\r\n const pos = viewer.scene.pickPosition(movement.endPosition);\r\n if (!pos) return;\r\n this.hoverPos = pos;\r\n this.previewPos = pos;\r\n const p1 = this.positions[this.positions.length - 1];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(pos);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n const mid = new Cesium.Cartesian3(\r\n (p1.x + pos.x) / 2,\r\n (p1.y + pos.y) / 2,\r\n (p1.z + pos.z) / 2,\r\n );\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const id = this.previewLabelId || 'measure_polyline_preview';\r\n this.previewLabelId = id;\r\n this.htmlLabelPool.add(\r\n { text: `${d.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-polyline-seg',\r\n show: true,\r\n },\r\n );\r\n\r\n if (!this.previewEntity) {\r\n this.previewEntity = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewPos || !this.positions.length) return [];\r\n const last = this.positions[this.positions.length - 1];\r\n return [last, this.previewPos];\r\n }, false),\r\n width: options.width || 3,\r\n material: options.lineColor || options.color || Cesium.Color.YELLOW,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n }\r\n\r\n \r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n if (this.entity) {\r\n this.viewer.entities.remove(this.entity);\r\n this.entity = null;\r\n }\r\n if (this.totalLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.totalLabelId]);\r\n this.totalLabelId = null;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n this.hoverPos = null;\r\n if (this.segmentLabelIds.length && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice());\r\n }\r\n this.segmentLabelIds = [];\r\n this.tempPoints.forEach((p) => this.viewer.entities.remove(p));\r\n this.tempPoints = [];\r\n this.positions = [];\r\n }\r\n \r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const lineColor = opts.lineColor || opts.color || Cesium.Color.YELLOW;\r\n const dashColor = (opts.dashLineColor || opts.lineColor || opts.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n const width = opts.width || 3;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (posList.length < 2) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-polyline-total', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-polyline-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n for (const pos of posList) {\r\n const point = viewer.entities.add({ position: pos, point: { pixelSize: 8, color: opts.pointColor || opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n this.tempPoints.push(point);\r\n }\r\n this.entity = viewer.entities.add({ polyline: { positions: posList, width, material: lineColor, depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }) } });\r\n let total = 0;\r\n for (let i = 1; i < posList.length; i++) {\r\n const c1 = Cesium.Cartographic.fromCartesian(posList[i - 1]);\r\n const c2 = Cesium.Cartographic.fromCartesian(posList[i]);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n total += geodesic.surfaceDistance;\r\n const p1 = posList[i - 1];\r\n const p2 = posList[i];\r\n const mid = new Cesium.Cartesian3((p1.x + p2.x) / 2, (p1.y + p2.y) / 2, (p1.z + p2.z) / 2);\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const sid = record.id + `_seg_${i - 1}`;\r\n this.segmentLabelIds.push(sid);\r\n this.htmlLabelPool.add({ text: `${geodesic.surfaceDistance.toFixed(2)} m` }, {\r\n id: sid,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-polyline-seg',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n });\r\n }\r\n const last = posList[posList.length - 1];\r\n const lc = Cesium.Cartographic.fromCartesian(last);\r\n const id = record.id + '_total';\r\n this.totalLabelId = id;\r\n this.htmlLabelPool.add({ text: `${total.toFixed(2)} m` }, {\r\n id,\r\n lon: Cesium.Math.toDegrees(lc.longitude),\r\n lat: Cesium.Math.toDegrees(lc.latitude),\r\n height: lc.height || 0,\r\n theme: 'measure-polyline-total',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n });\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class TerrainHeightMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private labelEntity: any = null;\r\n private htmlLabelPool: any = null;\r\n private htmlLabelId: string | null = null;\r\n private topPoint: any = null;\r\n private zeroPoint: any = null;\r\n private lineEntity: any = null;\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-terrainHeight', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((movement: any) => {\r\n const position = viewer.scene.pickPosition(movement.position);\r\n if (!position) return;\r\n const carto = Cesium.Cartographic.fromCartesian(position);\r\n const terrainHeight = viewer.scene.globe.getHeight(\r\n new Cesium.Cartographic(carto.longitude, carto.latitude, 0),\r\n ) || 0;\r\n const lng = Cesium.Math.toDegrees(carto.longitude);\r\n const lat = Cesium.Math.toDegrees(carto.latitude);\r\n const terrainPos = Cesium.Cartesian3.fromDegrees(lng, lat, terrainHeight);\r\n this.topPoint = viewer.entities.add({\r\n position,\r\n point: {\r\n pixelSize: 8,\r\n color: options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.zeroPoint = viewer.entities.add({\r\n position: terrainPos,\r\n point: {\r\n pixelSize: 8,\r\n color: Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.lineEntity = viewer.entities.add({\r\n polyline: {\r\n positions: [terrainPos, position],\r\n width: options.width || 3,\r\n material: options.color || Cesium.Color.YELLOW,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: Cesium.Color.RED,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n const t = options.labelText || { height: '高差' };\r\n const heightDiff = (carto.height || 0) - terrainHeight;\r\n const labelText = `${t.height}:${heightDiff.toFixed(2)} m`;\r\n const id = this.htmlLabelId || `measure_terrain_${Date.now()}`;\r\n this.htmlLabelId = id;\r\n this.htmlLabelPool.add(\r\n { text: labelText },\r\n {\r\n id,\r\n lon: lng,\r\n lat: lat,\r\n height: carto.height || 0,\r\n theme: 'measure-terrainHeight',\r\n show: true,\r\n },\r\n );\r\n this.labelEntity = this.htmlLabelId;\r\n const result = {\r\n label: this.labelEntity,\r\n position,\r\n zeroPosition: terrainPos,\r\n line: this.lineEntity,\r\n terrainHeight,\r\n difference: heightDiff,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n this.stop();\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n if (this.lineEntity) {\r\n this.viewer.entities.remove(this.lineEntity);\r\n this.lineEntity = null;\r\n }\r\n if (this.topPoint) {\r\n this.viewer.entities.remove(this.topPoint);\r\n this.topPoint = null;\r\n }\r\n if (this.zeroPoint) {\r\n this.viewer.entities.remove(this.zeroPoint);\r\n this.zeroPoint = null;\r\n }\r\n if (this.htmlLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\r\n this.htmlLabelId = null;\r\n }\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (posList.length < 1) {\r\n const data: any = record.data || {};\r\n const p = data.position;\r\n if (p) {\r\n if (Array.isArray(p) && p.length === 3) {\r\n posList.push(new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n } else if (typeof p === 'object' && p && 'x' in p && 'y' in p && 'z' in p) {\r\n posList.push(new Cesium.Cartesian3(p.x, p.y, p.z));\r\n }\r\n }\r\n }\r\n if (posList.length < 1) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-terrainHeight', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n const position = posList[0];\r\n const carto = Cesium.Cartographic.fromCartesian(position);\r\n const terrainHeight = viewer.scene.globe.getHeight(new Cesium.Cartographic(carto.longitude, carto.latitude, 0)) || 0;\r\n const lng = Cesium.Math.toDegrees(carto.longitude);\r\n const lat = Cesium.Math.toDegrees(carto.latitude);\r\n const terrainPos = Cesium.Cartesian3.fromDegrees(lng, lat, terrainHeight);\r\n this.topPoint = viewer.entities.add({ position, point: { pixelSize: 8, color: opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n this.zeroPoint = viewer.entities.add({ position: terrainPos, point: { pixelSize: 8, color: Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n this.lineEntity = viewer.entities.add({ polyline: { positions: [terrainPos, position], width: opts.width || 3, material: opts.color || Cesium.Color.YELLOW, depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: Cesium.Color.RED, dashLength: 12, dashPattern: 255 }) } });\r\n const t = opts.labelText || { height: '高差' };\r\n const heightDiff = (carto.height || 0) - terrainHeight;\r\n const id = record.id + '_terrain';\r\n this.htmlLabelId = id;\r\n this.htmlLabelPool.add({ text: `${t.height}:${heightDiff.toFixed(2)} m` }, { id, lon: lng, lat, height: carto.height || 0, theme: 'measure-terrainHeight', show: true });\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class CoordinateMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private entity: any = null;\r\n private labelEntity: any = null;\r\n private htmlLabelPool: any = null;\r\n private htmlLabelId: string | null = null;\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-coordinate', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((movement: any) => {\r\n const position = viewer.scene.pickPosition(movement.position);\r\n if (!position) return;\r\n const carto = Cesium.Cartographic.fromCartesian(position);\r\n const lng = Cesium.Math.toDegrees(carto.longitude);\r\n const lat = Cesium.Math.toDegrees(carto.latitude);\r\n const h = carto.height || 0;\r\n this.entity = viewer.entities.add({\r\n position,\r\n point: {\r\n pixelSize: 10,\r\n color: options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n const id = this.htmlLabelId || `measure_coordinate_${Date.now()}`;\r\n this.htmlLabelId = id;\r\n const t = options.labelText || { lng: '经', lat: '纬', height: '高' };\r\n this.htmlLabelPool.add(\r\n { text: `${t.lng}:${lng.toFixed(6)}\\n${t.lat}:${lat.toFixed(6)}\\n${t.height}:${h.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: lng,\r\n lat,\r\n height: h,\r\n theme: 'measure-coordinate',\r\n show: true,\r\n },\r\n );\r\n this.labelEntity = this.htmlLabelId;\r\n const result = {\r\n entity: this.entity,\r\n label: this.labelEntity,\r\n lnglat: { lng, lat, height: h },\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n this.stop();\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n if (this.entity) {\r\n this.viewer.entities.remove(this.entity);\r\n this.entity = null;\r\n }\r\n if (this.htmlLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\r\n this.htmlLabelId = null;\r\n }\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (!posList.length) {\r\n const ll = (record.data as any)?.lnglat;\r\n if (ll && typeof ll.lng === 'number' && typeof ll.lat === 'number') {\r\n const c = Cesium.Cartesian3.fromDegrees(ll.lng, ll.lat, ll.height || 0);\r\n posList.push(c);\r\n }\r\n }\r\n if (!posList.length) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-coordinate', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n const position = posList[0];\r\n const carto = Cesium.Cartographic.fromCartesian(position);\r\n const lng = Cesium.Math.toDegrees(carto.longitude);\r\n const lat = Cesium.Math.toDegrees(carto.latitude);\r\n const h = carto.height || 0;\r\n this.entity = viewer.entities.add({ position, point: { pixelSize: 10, color: opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n const id = record.id + '_coord';\r\n this.htmlLabelId = id;\r\n const t = opts.labelText || { lng: '经', lat: '纬', height: '高' };\r\n this.htmlLabelPool.add({ text: `${t.lng}:${lng.toFixed(6)}\\n${t.lat}:${lat.toFixed(6)}\\n${t.height}:${h.toFixed(2)} m` }, { id, lon: lng, lat, height: h, theme: 'measure-coordinate', show: true });\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class RectangleMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private startPoint: any = null;\r\n private endPoint: any = null;\r\n private secondPoint: any = null;\r\n private currentCorners: any[] = [];\r\n private edgeEntities: any[] = [];\r\n private pointEntities: any[] = [];\r\n private previewEdgeEntity: any = null;\r\n private previewPointEntities: any[] = [];\r\n private entity: any = null;\r\n private labelEntity: any = null;\r\n private primitive: any = null;\r\n private previewEntity: any = null;\r\n private htmlLabelPool: any = null;\r\n private htmlLabelId: string | null = null;\r\n private segmentLabelIds: string[] = [];\r\n private previewLabelId: string | null = null;\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-rectangle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-rectangle-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((movement: any) => {\r\n const pos = viewer.scene.pickPosition(movement.position);\r\n if (!pos) return;\r\n if (!this.startPoint) {\r\n this.startPoint = pos;\r\n return;\r\n }\r\n if (!this.secondPoint) {\r\n this.secondPoint = pos;\r\n this.endPoint = pos;\r\n return;\r\n }\r\n const thirdPoint = pos;\r\n const rect = this.computeRectangle(this.startPoint, this.secondPoint, thirdPoint);\r\n if (!rect) {\r\n this.stop();\r\n return;\r\n }\r\n this.stop();\r\n const { corners, center, width, height, area } = rect;\r\n if (this.previewEntity) {\r\n viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.primitive) {\r\n viewer.scene.primitives.remove(this.primitive);\r\n this.primitive = null;\r\n }\r\n if (this.entity) {\r\n viewer.entities.remove(this.entity);\r\n this.entity = null;\r\n }\r\n const id = this.htmlLabelId || `measure_rectangle_${Date.now()}`;\r\n this.htmlLabelId = id;\r\n const mc = Cesium.Cartographic.fromCartesian(center);\r\n const t = options.labelText || { width: '宽', heightLabel: '高', area: '面积', side: '边长' };\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n this.htmlLabelPool.add(\r\n { text: `${t.width}:${width.toFixed(2)} m\\n${t.heightLabel}:${height.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-rectangle',\r\n show: true,\r\n },\r\n );\r\n const edges = [\r\n [corners[0], corners[1]],\r\n [corners[1], corners[2]],\r\n [corners[2], corners[3]],\r\n [corners[3], corners[0]],\r\n ];\r\n for (let i = 0; i < edges.length; i++) {\r\n const [p1, p2] = edges[i];\r\n const d = i === 0 || i === 2 ? width : height;\r\n const mid = new Cesium.Cartesian3((p1.x + p2.x) / 2, (p1.y + p2.y) / 2, (p1.z + p2.z) / 2);\r\n const mc2 = Cesium.Cartographic.fromCartesian(mid);\r\n const sid = `measure_rectangle_seg_${Date.now()}_${i}`;\r\n this.segmentLabelIds.push(sid);\r\n this.htmlLabelPool.add(\r\n { text: `${t.side}:${Number(d).toFixed(2)} m` },\r\n {\r\n id: sid,\r\n lon: Cesium.Math.toDegrees(mc2.longitude),\r\n lat: Cesium.Math.toDegrees(mc2.latitude),\r\n height: mc2.height || 0,\r\n theme: 'measure-rectangle-seg',\r\n show: true,\r\n },\r\n );\r\n }\r\n const surfacePositions = this.buildSurfaceRectanglePositions(corners);\r\n const hierarchy = new Cesium.PolygonHierarchy(surfacePositions);\r\n const geom = new Cesium.PolygonGeometry({\r\n polygonHierarchy: hierarchy,\r\n vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT,\r\n perPositionHeight: true,\r\n arcType: Cesium.ArcType.NONE,\r\n });\r\n const instance = new Cesium.GeometryInstance({ geometry: geom });\r\n const color = options.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n const occludedColor = (options.color && options.color.withAlpha)\r\n ? options.color.withAlpha(0.25)\r\n : Cesium.Color.RED.withAlpha(0.4);\r\n this.primitive = new Cesium.Primitive({\r\n geometryInstances: instance,\r\n appearance: new Cesium.MaterialAppearance({\r\n material: Cesium.Material.fromType('Color', { color }),\r\n translucent: true,\r\n closed: true,\r\n }),\r\n depthFailAppearance: new Cesium.MaterialAppearance({\r\n material: Cesium.Material.fromType('Color', { color: occludedColor }),\r\n translucent: true,\r\n closed: true,\r\n }),\r\n });\r\n viewer.scene.primitives.add(this.primitive);\r\n const lineColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor =\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED;\r\n const polylinePositions = [...surfacePositions, surfacePositions[0]];\r\n const lineEntity = viewer.entities.add({\r\n polyline: {\r\n positions: polylinePositions,\r\n width: options.width || 2,\r\n material: lineColor,\r\n clampToGround: false,\r\n arcType: Cesium.ArcType.NONE,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n this.edgeEntities.push(lineEntity);\r\n const pointColor = options.pointColor || options.color || Cesium.Color.YELLOW;\r\n for (const corner of corners) {\r\n const pointEntity = viewer.entities.add({\r\n position: corner,\r\n point: {\r\n pixelSize: 8,\r\n color: pointColor,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.pointEntities.push(pointEntity);\r\n }\r\n const result = {\r\n entity: this.primitive,\r\n label: this.labelEntity,\r\n positions: [this.startPoint, this.secondPoint, thirdPoint],\r\n width,\r\n height,\r\n area,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n const pos = viewer.scene.pickPosition(movement.endPosition);\r\n if (!pos) return;\r\n if (this.startPoint && !this.secondPoint) {\r\n this.endPoint = pos;\r\n if (!this.previewEdgeEntity) {\r\n const solidColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor =\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED;\r\n this.previewEdgeEntity = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.startPoint || !this.endPoint) return [];\r\n return [this.startPoint, this.endPoint];\r\n }, false),\r\n width: options.width || 2,\r\n material: solidColor,\r\n clampToGround: false,\r\n arcType: Cesium.ArcType.NONE,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n const pointColor = options.pointColor || options.color || Cesium.Color.YELLOW;\r\n const basePoint = viewer.entities.add({\r\n position: this.startPoint,\r\n point: {\r\n pixelSize: 8,\r\n color: pointColor,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n const hoverPoint = viewer.entities.add({\r\n position: new Cesium.CallbackProperty(() => this.endPoint || this.startPoint, false),\r\n point: {\r\n pixelSize: 8,\r\n color: pointColor,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.previewPointEntities.push(basePoint, hoverPoint);\r\n }\r\n return;\r\n }\r\n if (!this.startPoint || !this.secondPoint) return;\r\n const rect = this.computeRectangle(this.startPoint, this.secondPoint, pos);\r\n if (!rect) return;\r\n const { corners, center, width, height, area } = rect;\r\n const surfacePositions = this.buildSurfaceRectanglePositions(corners);\r\n this.currentCorners = surfacePositions;\r\n const mc = Cesium.Cartographic.fromCartesian(center);\r\n const pid = this.previewLabelId || 'measure_rectangle_preview';\r\n this.previewLabelId = pid;\r\n const tPrev = options.labelText || { width: '宽', heightLabel: '高', area: '面积' };\r\n this.htmlLabelPool.add(\r\n { text: `${tPrev.width}:${width.toFixed(2)} m\\n${tPrev.heightLabel}:${height.toFixed(2)} m\\n${tPrev.area}:${area.toFixed(2)} m²` },\r\n {\r\n id: pid,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-rectangle',\r\n show: true,\r\n },\r\n );\r\n if (!this.previewEntity) {\r\n const color = options.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n this.previewEntity = viewer.entities.add({\r\n polygon: {\r\n hierarchy: new Cesium.CallbackProperty(() => {\r\n if (!this.startPoint || !this.secondPoint || !this.currentCorners.length) return undefined;\r\n return new Cesium.PolygonHierarchy(this.currentCorners);\r\n }, false),\r\n material: color,\r\n perPositionHeight: true,\r\n arcType: Cesium.ArcType.NONE,\r\n },\r\n });\r\n }\r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n if (this.entity) {\r\n this.viewer.entities.remove(this.entity);\r\n this.entity = null;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewEdgeEntity) {\r\n this.viewer.entities.remove(this.previewEdgeEntity);\r\n this.previewEdgeEntity = null;\r\n }\r\n if (this.previewPointEntities.length) {\r\n for (const p of this.previewPointEntities) {\r\n try {\r\n this.viewer.entities.remove(p);\r\n } catch {}\r\n }\r\n this.previewPointEntities = [];\r\n }\r\n if (this.edgeEntities.length) {\r\n for (const e of this.edgeEntities) {\r\n try {\r\n this.viewer.entities.remove(e);\r\n } catch {}\r\n }\r\n this.edgeEntities = [];\r\n }\r\n if (this.pointEntities.length) {\r\n for (const p of this.pointEntities) {\r\n try {\r\n this.viewer.entities.remove(p);\r\n } catch {}\r\n }\r\n this.pointEntities = [];\r\n }\r\n if (this.primitive) {\r\n this.viewer.scene.primitives.remove(this.primitive);\r\n this.primitive = null;\r\n }\r\n if (this.htmlLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\r\n this.htmlLabelId = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n if (this.segmentLabelIds.length && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice());\r\n }\r\n this.segmentLabelIds = [];\r\n this.startPoint = null;\r\n this.endPoint = null;\r\n this.secondPoint = null;\r\n this.currentCorners = [];\r\n }\r\n\r\n private buildSurfaceRectanglePositions(corners: any[]) {\r\n if (!corners || !corners.length) return [];\r\n return corners.slice();\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (posList.length < 3) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-rectangle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-rectangle-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n const rect = this.computeRectangle(posList[0], posList[1], posList[2]);\r\n if (!rect) return;\r\n const corners = rect.corners;\r\n const center = rect.center;\r\n const width = rect.width;\r\n const height = rect.height;\r\n const area = rect.area;\r\n const mc = Cesium.Cartographic.fromCartesian(center);\r\n const id = record.id + '_rectangle';\r\n const t = opts.labelText || { width: '宽', heightLabel: '高', area: '面积', side: '边长' };\r\n this.htmlLabelId = id;\r\n this.htmlLabelPool.add({ text: `${t.width}:${width.toFixed(2)} m\\n${t.heightLabel}:${height.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²` }, { id, lon: Cesium.Math.toDegrees(mc.longitude), lat: Cesium.Math.toDegrees(mc.latitude), height: mc.height || 0, theme: 'measure-rectangle', show: true });\r\n const edges: any[] = [\r\n [corners[0], corners[1]],\r\n [corners[1], corners[2]],\r\n [corners[2], corners[3]],\r\n [corners[3], corners[0]],\r\n ];\r\n for (let i = 0; i < edges.length; i++) {\r\n const [ep1, ep2] = edges[i];\r\n const d = i === 0 || i === 2 ? width : height;\r\n const mid = new Cesium.Cartesian3((ep1.x + ep2.x) / 2, (ep1.y + ep2.y) / 2, (ep1.z + ep2.z) / 2);\r\n const mc2 = Cesium.Cartographic.fromCartesian(mid);\r\n const sid = record.id + `_rectangle_seg_${i}`;\r\n this.segmentLabelIds.push(sid);\r\n this.htmlLabelPool.add({ text: `${t.side}:${Number(d).toFixed(2)} m` }, { id: sid, lon: Cesium.Math.toDegrees(mc2.longitude), lat: Cesium.Math.toDegrees(mc2.latitude), height: mc2.height || 0, theme: 'measure-rectangle-seg', show: true });\r\n }\r\n const hierarchy = new Cesium.PolygonHierarchy(corners);\r\n const geom = new Cesium.PolygonGeometry({\r\n polygonHierarchy: hierarchy,\r\n vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT,\r\n perPositionHeight: true,\r\n arcType: Cesium.ArcType.NONE,\r\n });\r\n const instance = new Cesium.GeometryInstance({ geometry: geom });\r\n const color = opts.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n const occludedColor = (opts.color && opts.color.withAlpha) ? opts.color.withAlpha(0.25) : Cesium.Color.RED.withAlpha(0.4);\r\n const primitive = new Cesium.Primitive({\r\n geometryInstances: instance,\r\n appearance: new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color }), translucent: true, closed: true }),\r\n depthFailAppearance: new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color: occludedColor }), translucent: true, closed: true }),\r\n });\r\n this.primitive = primitive;\r\n viewer.scene.primitives.add(this.primitive);\r\n\r\n const lineColor = opts.lineColor || color;\r\n const polylinePositions = [...corners, corners[0]];\r\n const lineEntity = viewer.entities.add({\r\n polyline: {\r\n positions: polylinePositions,\r\n width: opts.width || 2,\r\n material: lineColor,\r\n clampToGround: false,\r\n arcType: Cesium.ArcType.NONE,\r\n },\r\n });\r\n this.edgeEntities.push(lineEntity);\r\n const pointColor = opts.pointColor || color;\r\n for (const corner of corners) {\r\n const pointEntity = viewer.entities.add({\r\n position: corner,\r\n point: {\r\n pixelSize: 8,\r\n color: pointColor,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.pointEntities.push(pointEntity);\r\n }\r\n }\r\n\r\n private computeRectangle(p1: any, p2: any, p3: any) {\r\n const Cesium = this.Cesium;\r\n const plane = new Cesium.EllipsoidTangentPlane(p1, Cesium.Ellipsoid.WGS84);\r\n const pts2d = plane.projectPointsOntoPlane([p1, p2, p3]);\r\n if (!pts2d || pts2d.length < 3) return null;\r\n const a = pts2d[0];\r\n const b = pts2d[1];\r\n const c = pts2d[2];\r\n const vx = b.x - a.x;\r\n const vy = b.y - a.y;\r\n const baseLen = Math.sqrt(vx * vx + vy * vy);\r\n if (!baseLen) return null;\r\n const ux = vx / baseLen;\r\n const uy = vy / baseLen;\r\n const nx = -uy;\r\n const ny = ux;\r\n const wx = c.x - b.x;\r\n const wy = c.y - b.y;\r\n const s = wx * nx + wy * ny;\r\n if (!s) return null;\r\n const c2 = new Cesium.Cartesian2(b.x + nx * s, b.y + ny * s);\r\n const d2 = new Cesium.Cartesian2(a.x + nx * s, a.y + ny * s);\r\n const worldPoints = plane.projectPointsOntoEllipsoid([a, b, c2, d2]);\r\n if (!worldPoints || worldPoints.length < 4) return null;\r\n const corners = worldPoints;\r\n const p0 = corners[0];\r\n const p2w = corners[2];\r\n const width = Math.abs(baseLen);\r\n const height = Math.abs(s);\r\n const center = new Cesium.Cartesian3(\r\n (p0.x + p2w.x) / 2,\r\n (p0.y + p2w.y) / 2,\r\n (p0.z + p2w.z) / 2,\r\n );\r\n const planeCenter = new Cesium.EllipsoidTangentPlane(center, Cesium.Ellipsoid.WGS84);\r\n const rect2d = planeCenter.projectPointsOntoPlane(corners);\r\n let area2D = 0;\r\n for (let i = 0; i < rect2d.length; i++) {\r\n const j = (i + 1) % rect2d.length;\r\n area2D += rect2d[i].x * rect2d[j].y - rect2d[j].x * rect2d[i].y;\r\n }\r\n const area = Math.abs(area2D) / 2;\r\n return { corners, center, width, height, area };\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class RegularPolygonMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private entity: any = null;\r\n private positions: any[] = [];\r\n private labelEntity: any = null;\r\n private currentPoints: any[] = [];\r\n private primitive: any = null;\r\n private previewEntity: any = null;\r\n private edgeEntities: any[] = [];\r\n private pointEntities: any[] = [];\r\n private previewEdgeEntity: any = null;\r\n private previewPointEntities: any[] = [];\r\n private htmlLabelPool: any = null;\r\n private htmlLabelId: string | null = null;\r\n private segmentLabelIds: string[] = [];\r\n private previewLabelId: string | null = null;\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const sides = Math.max(options.sides || 6, 6);\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-regular', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-regular-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((click: any) => {\r\n const position = viewer.scene.pickPosition(click.position);\r\n if (!position) return;\r\n this.positions.push(position);\r\n if (this.positions.length === 2) {\r\n this.stop();\r\n const center = this.positions[0];\r\n const edge = this.positions[1];\r\n const radius = Cesium.Cartesian3.distance(center, edge);\r\n const points = this.buildRegularPolygonPoints(center, radius, sides);\r\n if (this.previewEntity) {\r\n viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.primitive) {\r\n viewer.scene.primitives.remove(this.primitive);\r\n this.primitive = null;\r\n }\r\n const hierarchy = new Cesium.PolygonHierarchy(points);\r\n const geom = new Cesium.PolygonGeometry({\r\n polygonHierarchy: hierarchy,\r\n vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT,\r\n perPositionHeight: true,\r\n arcType: Cesium.ArcType.NONE,\r\n });\r\n const instance = new Cesium.GeometryInstance({ geometry: geom });\r\n const color = options.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n const occludedColor = (options.color && options.color.withAlpha)\r\n ? options.color.withAlpha(0.25)\r\n : Cesium.Color.RED.withAlpha(0.4);\r\n this.primitive = new Cesium.Primitive({\r\n geometryInstances: instance,\r\n appearance: new Cesium.MaterialAppearance({\r\n material: Cesium.Material.fromType('Color', { color }),\r\n translucent: true,\r\n closed: true,\r\n }),\r\n depthFailAppearance: new Cesium.MaterialAppearance({\r\n material: Cesium.Material.fromType('Color', { color: occludedColor }),\r\n translucent: true,\r\n closed: true,\r\n }),\r\n });\r\n viewer.scene.primitives.add(this.primitive);\r\n const lineColor = options.lineColor || color;\r\n const dashColor =\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED;\r\n const polylinePositions = points.slice();\r\n const lineEntity = viewer.entities.add({\r\n polyline: {\r\n positions: polylinePositions,\r\n width: options.width || 2,\r\n material: lineColor,\r\n clampToGround: false,\r\n arcType: Cesium.ArcType.NONE,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n this.edgeEntities.push(lineEntity);\r\n const pointColor = options.pointColor || color;\r\n const uniquePoints = points.slice(0, points.length - 1);\r\n for (const p of uniquePoints) {\r\n const pointEntity = viewer.entities.add({\r\n position: p,\r\n point: {\r\n pixelSize: 8,\r\n color: pointColor,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.pointEntities.push(pointEntity);\r\n }\r\n const area = this.computeAreaByPlane(points);\r\n const cc = Cesium.Cartographic.fromCartesian(center);\r\n const id = this.htmlLabelId || `measure_regular_${Date.now()}`;\r\n this.htmlLabelId = id;\r\n const t = options.labelText || { sides: '边数', radius: '半径', circumference: '周长', area: '面积', side: '边长' };\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n let perimeter = 0;\r\n for (let i = 1; i < points.length; i++) {\r\n const p1 = points[i - 1];\r\n const p2 = points[i];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n perimeter += d;\r\n const mid = new Cesium.Cartesian3((p1.x + p2.x) / 2, (p1.y + p2.y) / 2, (p1.z + p2.z) / 2);\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const sid = `measure_regular_seg_${Date.now()}_${i - 1}`;\r\n this.segmentLabelIds.push(sid);\r\n this.htmlLabelPool.add(\r\n { text: `${t.side}:${d.toFixed(2)} m` },\r\n {\r\n id: sid,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-regular-seg',\r\n show: true,\r\n },\r\n );\r\n }\r\n this.htmlLabelPool.add(\r\n { text: `${t.sides}:${sides}\\n${t.radius}:${radius.toFixed(2)} m\\n${t.circumference}:${perimeter.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(cc.longitude),\r\n lat: Cesium.Math.toDegrees(cc.latitude),\r\n height: cc.height || 0,\r\n theme: 'measure-regular',\r\n show: true,\r\n },\r\n );\r\n const result = {\r\n entity: this.primitive,\r\n label: this.labelEntity,\r\n positions: points,\r\n radius,\r\n sides,\r\n perimeter,\r\n area,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n if (this.positions.length !== 1) return;\r\n const center = this.positions[0];\r\n const ray = viewer.camera.getPickRay(movement.endPosition);\r\n const edge = viewer.scene.globe.pick(ray, viewer.scene);\r\n if (!edge) return;\r\n const radius = Cesium.Cartesian3.distance(center, edge);\r\n this.currentPoints = this.buildRegularPolygonPoints(center, radius, sides);\r\n if (!this.previewEntity) {\r\n const color = options.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n this.previewEntity = viewer.entities.add({\r\n polygon: {\r\n hierarchy: new Cesium.CallbackProperty(() => {\r\n if (!this.currentPoints || this.currentPoints.length === 0) return undefined;\r\n return new Cesium.PolygonHierarchy(this.currentPoints);\r\n }, false),\r\n material: color,\r\n perPositionHeight: true,\r\n arcType: Cesium.ArcType.NONE,\r\n },\r\n });\r\n const lineColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor =\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED;\r\n this.previewEdgeEntity = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.currentPoints || this.currentPoints.length === 0) return [];\r\n return this.currentPoints.slice();\r\n }, false),\r\n width: options.width || 2,\r\n material: lineColor,\r\n clampToGround: false,\r\n arcType: Cesium.ArcType.NONE,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n const pointColor = options.pointColor || options.color || Cesium.Color.YELLOW;\r\n const basePoint = viewer.entities.add({\r\n position: center,\r\n point: {\r\n pixelSize: 8,\r\n color: pointColor,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n const hoverPoint = viewer.entities.add({\r\n position: new Cesium.CallbackProperty(() => edge || center, false),\r\n point: {\r\n pixelSize: 8,\r\n color: pointColor,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.previewPointEntities.push(basePoint, hoverPoint);\r\n }\r\n let perimeter = 0;\r\n for (let i = 1; i < this.currentPoints.length; i++) {\r\n const p1 = this.currentPoints[i - 1];\r\n const p2 = this.currentPoints[i];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n perimeter += geodesic.surfaceDistance;\r\n }\r\n const area = this.computeAreaByPlane(this.currentPoints);\r\n const cc = Cesium.Cartographic.fromCartesian(center);\r\n const pid = this.previewLabelId || 'measure_regular_preview';\r\n this.previewLabelId = pid;\r\n const t = options.labelText || { sides: '边数', radius: '半径', circumference: '周长', area: '面积' };\r\n this.htmlLabelPool.add(\r\n { text: `${t.sides}:${sides}\\n${t.radius}:${radius.toFixed(2)} m\\n${t.circumference}:${perimeter.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²` },\r\n {\r\n id: pid,\r\n lon: Cesium.Math.toDegrees(cc.longitude),\r\n lat: Cesium.Math.toDegrees(cc.latitude),\r\n height: cc.height || 0,\r\n theme: 'measure-regular',\r\n show: true,\r\n },\r\n );\r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n if (this.entity) {\r\n this.viewer.entities.remove(this.entity);\r\n this.entity = null;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewEdgeEntity) {\r\n this.viewer.entities.remove(this.previewEdgeEntity);\r\n this.previewEdgeEntity = null;\r\n }\r\n if (this.previewPointEntities.length) {\r\n for (const p of this.previewPointEntities) {\r\n try {\r\n this.viewer.entities.remove(p);\r\n } catch {}\r\n }\r\n this.previewPointEntities = [];\r\n }\r\n if (this.primitive) {\r\n this.viewer.scene.primitives.remove(this.primitive);\r\n this.primitive = null;\r\n }\r\n if (this.edgeEntities.length) {\r\n for (const e of this.edgeEntities) {\r\n try {\r\n this.viewer.entities.remove(e);\r\n } catch {}\r\n }\r\n this.edgeEntities = [];\r\n }\r\n if (this.pointEntities.length) {\r\n for (const p of this.pointEntities) {\r\n try {\r\n this.viewer.entities.remove(p);\r\n } catch {}\r\n }\r\n this.pointEntities = [];\r\n }\r\n if (this.labelEntity) {\r\n this.viewer.entities.remove(this.labelEntity);\r\n this.labelEntity = null;\r\n }\r\n if (this.htmlLabelPool && this.htmlLabelId) {\r\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\r\n this.htmlLabelId = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n if (this.segmentLabelIds.length && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice());\r\n }\r\n this.segmentLabelIds = [];\r\n this.positions = [];\r\n this.currentPoints = [];\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const sides = (record.data?.sides || opts.sides || 3);\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (posList.length < 2) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-regular', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-regular-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n let points: any[] = [];\r\n let center = posList[0];\r\n let radius = 0;\r\n if (posList.length >= 3) {\r\n points = posList.slice();\r\n center = new Cesium.Cartesian3(\r\n points.reduce((s: number, p: any) => s + p.x, 0) / points.length,\r\n points.reduce((s: number, p: any) => s + p.y, 0) / points.length,\r\n points.reduce((s: number, p: any) => s + p.z, 0) / points.length,\r\n );\r\n const c1 = points[0];\r\n const c2 = points[Math.floor(points.length / 2)] || points[1];\r\n radius = Cesium.Cartesian3.distance(center, c1);\r\n } else {\r\n const edge = posList[1];\r\n radius = Cesium.Cartesian3.distance(center, edge);\r\n points = this.buildRegularPolygonPoints(center, radius, Math.max(sides, 3));\r\n }\r\n const hierarchy = new Cesium.PolygonHierarchy(points);\r\n const geom = new Cesium.PolygonGeometry({ polygonHierarchy: hierarchy, vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT, perPositionHeight: true });\r\n const instance = new Cesium.GeometryInstance({ geometry: geom });\r\n const color = opts.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n const occludedColor = (opts.color && opts.color.withAlpha) ? opts.color.withAlpha(0.25) : Cesium.Color.RED.withAlpha(0.4);\r\n const primitive = new Cesium.Primitive({ geometryInstances: instance, appearance: new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color }), translucent: true, closed: true }), depthFailAppearance: new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color: occludedColor }), translucent: true, closed: true }) });\r\n viewer.scene.primitives.add(primitive);\r\n this.primitive = primitive;\r\n const area = this.computeAreaByPlane(points);\r\n const cc = Cesium.Cartographic.fromCartesian(center);\r\n const id = record.id + '_regular';\r\n this.htmlLabelId = id;\r\n const t = opts.labelText || { sides: '边数', radius: '半径', circumference: '周长', area: '面积', side: '边长' };\r\n let perimeter = 0;\r\n for (let i = 1; i < points.length; i++) {\r\n const p1 = points[i - 1];\r\n const p2 = points[i];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n perimeter += d;\r\n const mid = new Cesium.Cartesian3((p1.x + p2.x) / 2, (p1.y + p2.y) / 2, (p1.z + p2.z) / 2);\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const sid = record.id + `_regular_seg_${i - 1}`;\r\n this.segmentLabelIds.push(sid);\r\n this.htmlLabelPool.add({ text: `${t.side}:${d.toFixed(2)} m` }, { id: sid, lon: Cesium.Math.toDegrees(mc.longitude), lat: Cesium.Math.toDegrees(mc.latitude), height: mc.height || 0, theme: 'measure-regular-seg', show: true });\r\n }\r\n this.htmlLabelPool.add({ text: `${t.sides}:${Math.max(sides, 3)}\\n${t.radius}:${radius.toFixed(2)} m\\n${t.circumference}:${perimeter.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²` }, { id, lon: Cesium.Math.toDegrees(cc.longitude), lat: Cesium.Math.toDegrees(cc.latitude), height: cc.height || 0, theme: 'measure-regular', show: true });\r\n }\r\n\r\n private buildRegularPolygonPoints(center: any, radius: number, sides: number) {\r\n const Cesium = this.Cesium;\r\n const plane = new Cesium.EllipsoidTangentPlane(center, Cesium.Ellipsoid.WGS84);\r\n const step = (2 * Math.PI) / sides;\r\n const points2D: any[] = [];\r\n for (let i = 0; i < sides; i++) {\r\n const angle = i * step;\r\n const x = radius * Math.cos(angle);\r\n const y = radius * Math.sin(angle);\r\n points2D.push(new Cesium.Cartesian2(x, y));\r\n }\r\n const worldPoints = plane.projectPointsOntoEllipsoid(points2D);\r\n const points: any[] = worldPoints.slice();\r\n points.push(points[0]);\r\n return points;\r\n }\r\n\r\n private computeAreaByPlane(points: any[]) {\r\n const Cesium = this.Cesium;\r\n const center = new Cesium.Cartesian3(\r\n points.reduce((s: number, p: any) => s + p.x, 0) / points.length,\r\n points.reduce((s: number, p: any) => s + p.y, 0) / points.length,\r\n points.reduce((s: number, p: any) => s + p.z, 0) / points.length,\r\n );\r\n const plane = new Cesium.EllipsoidTangentPlane(center, Cesium.Ellipsoid.WGS84);\r\n const p2d = plane.projectPointsOntoPlane(points);\r\n let area = 0;\r\n for (let i = 0; i < p2d.length; i++) {\r\n const j = (i + 1) % p2d.length;\r\n area += p2d[i].x * p2d[j].y - p2d[j].x * p2d[i].y;\r\n }\r\n return Math.abs(area) / 2;\r\n }\r\n}\r\n","import {\r\n IMeasure,\r\n MeasurementOptions,\r\n MeasurementType,\r\n MeasurementRecord,\r\n MeasurementsConfig,\r\n} from './types';\r\nimport HorizontalMeasure from './handlers/HorizontalMeasure';\r\nimport VerticalMeasure from './handlers/VerticalMeasure';\r\nimport TriangleMeasure from './handlers/TriangleMeasure';\r\nimport SpaceMeasure from './handlers/SpaceMeasure';\r\nimport AreaMeasure from './handlers/AreaMeasure';\r\nimport CircleMeasure from './handlers/CircleMeasure';\r\nimport PolylineDistanceMeasure from './handlers/PolylineDistanceMeasure';\r\nimport TerrainHeightMeasure from './handlers/TerrainHeightMeasure';\r\nimport CoordinateMeasure from './handlers/CoordinateMeasure';\r\nimport RectangleMeasure from './handlers/RectangleMeasure';\r\nimport RegularPolygonMeasure from './handlers/RegularPolygonMeasure';\r\nimport { HtmlOverlayLabelPool } from '../HtmlOverlayLabelPool';\r\nimport { MarkerEventKey } from '../MarkerEvent';\r\n\r\nexport class MeasurementTool {\r\n private Cesium: any;\r\n private viewer: any;\r\n private actives: IMeasure[] = [];\r\n private measurements: MeasurementRecord[] = [];\r\n private htmlLabelPool: any = null;\r\n private recordHandlers: Map<string, IMeasure> = new Map();\r\n private specifiedClear: boolean = false;\r\n private deleteLabelPool: HtmlOverlayLabelPool | null = null;\r\n private deleteLabelIds: Map<string, string> = new Map();\r\n\r\n constructor({ Cesium, viewer }: { Cesium: any; viewer: any }) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\r\n }\r\n\r\n measure(type: MeasurementType, options: MeasurementOptions) {\r\n let handler: IMeasure | null = null;\r\n switch (type) {\r\n case 'horizontal':\r\n handler = new HorizontalMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'vertical':\r\n handler = new VerticalMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'triangle':\r\n handler = new TriangleMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'space':\r\n handler = new SpaceMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'area':\r\n handler = new AreaMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'circle':\r\n handler = new CircleMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'polyline':\r\n handler = new PolylineDistanceMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'terrainHeight':\r\n handler = new TerrainHeightMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'coordinate':\r\n handler = new CoordinateMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'rectangle':\r\n handler = new RectangleMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'regularPolygon':\r\n handler = new RegularPolygonMeasure(this.Cesium, this.viewer);\r\n break;\r\n default:\r\n throw new Error(`Unsupported measurement type: ${type}`);\r\n }\r\n if (!handler) return;\r\n this.actives.push(handler);\r\n const currentHandler = handler;\r\n const wrapped: MeasurementOptions = {\r\n ...options,\r\n onComplete: (result: any) => {\r\n const record: MeasurementRecord = {\r\n id: `m_${Date.now()}_${this.measurements.length}`,\r\n type,\r\n options: (() => {\r\n const o: any = { ...options };\r\n if ('onComplete' in o) {\r\n delete o.onComplete;\r\n }\r\n return o;\r\n })(),\r\n positions: (() => {\r\n if (Array.isArray(result?.positions)) {\r\n return result.positions.map((p: any) => [p.x, p.y, p.z]);\r\n }\r\n switch (type) {\r\n case 'terrainHeight': {\r\n const pos = (result as any)?.position;\r\n if (pos) return [[pos.x, pos.y, pos.z]];\r\n return undefined;\r\n }\r\n case 'coordinate': {\r\n const ll = (result as any)?.lnglat;\r\n if (ll && typeof ll.lng === 'number' && typeof ll.lat === 'number') {\r\n const c = this.Cesium.Cartesian3.fromDegrees(ll.lng, ll.lat, ll.height || 0);\r\n return [[c.x, c.y, c.z]];\r\n }\r\n return undefined;\r\n }\r\n default:\r\n return undefined;\r\n }\r\n })(),\r\n data: this._serializeMetrics(type, result),\r\n };\r\n this.measurements.push(record);\r\n if (currentHandler) {\r\n this.recordHandlers.set(record.id, currentHandler);\r\n }\r\n if (this.specifiedClear) {\r\n this._showDeleteLabels('html-label-container');\r\n }\r\n options.onComplete?.(result);\r\n const idx = this.actives.indexOf(currentHandler);\r\n if (idx >= 0) this.actives.splice(idx, 1);\r\n },\r\n };\r\n handler.start(wrapped);\r\n }\r\n\r\n clear() {\r\n const h = this.actives.pop();\r\n if (h) h.clear();\r\n this._removeAllDeleteLabels();\r\n this.specifiedClear = false;\r\n }\r\n\r\n cancel() {\r\n const h = this.actives.pop();\r\n if (h) h.stop();\r\n }\r\n\r\n disableDefaultSelection({ disableLeftClick = false, disableDoubleClick = true } = {}) {\r\n const handler = this.viewer?.cesiumWidget?.screenSpaceEventHandler;\r\n if (!handler) return;\r\n if (disableDoubleClick) {\r\n handler.removeInputAction(this.Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\r\n }\r\n if (disableLeftClick) {\r\n handler.removeInputAction(this.Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n }\r\n }\r\n\r\n clearAll() {\r\n while (this.actives.length) {\r\n const h = this.actives.pop();\r\n try {\r\n h?.clear();\r\n } catch {}\r\n }\r\n for (const [, handler] of this.recordHandlers) {\r\n try {\r\n handler.clear();\r\n } catch {}\r\n }\r\n this.recordHandlers.clear();\r\n this.measurements = [];\r\n this._removeAllDeleteLabels();\r\n this.specifiedClear = false;\r\n }\r\n\r\n public getMeasurementsConfig(): MeasurementsConfig {\r\n return {\r\n measurements: this.measurements.map((m) => ({\r\n ...m,\r\n options: m.options ? { ...(m.options as any) } : m.options,\r\n positions: m.positions ? m.positions.map((p) => [p[0], p[1], p[2]]) : m.positions,\r\n data: m.data ? { ...(m.data as any) } : m.data,\r\n })),\r\n };\r\n }\r\n\r\n public setMeasurementsConfig(config: MeasurementsConfig) {\r\n if (!config?.measurements?.length) return;\r\n for (const rec of config.measurements) {\r\n let handler: IMeasure | null = null;\r\n switch (rec.type) {\r\n case 'horizontal':\r\n handler = new HorizontalMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'vertical':\r\n handler = new VerticalMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'triangle':\r\n handler = new TriangleMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'space':\r\n handler = new SpaceMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'area':\r\n handler = new AreaMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'circle':\r\n handler = new CircleMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'polyline':\r\n handler = new PolylineDistanceMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'terrainHeight':\r\n handler = new TerrainHeightMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'coordinate':\r\n handler = new CoordinateMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'rectangle':\r\n handler = new RectangleMeasure(this.Cesium, this.viewer);\r\n break;\r\n case 'regularPolygon':\r\n handler = new RegularPolygonMeasure(this.Cesium, this.viewer);\r\n break;\r\n default:\r\n handler = null;\r\n }\r\n handler?.rehydrate?.(rec, undefined);\r\n if (handler && rec.id) {\r\n this.recordHandlers.set(rec.id, handler);\r\n }\r\n const exists = this.measurements.find((r) => r.id === rec.id);\r\n if (!exists) this.measurements.push(rec);\r\n }\r\n if (this.specifiedClear) {\r\n this._showDeleteLabels('html-label-container');\r\n }\r\n }\r\n\r\n private _serializeMetrics(type: MeasurementType, result: any) {\r\n switch (type) {\r\n case 'space':\r\n return { distance: result?.distance };\r\n case 'horizontal':\r\n return { distance: result?.distance };\r\n case 'vertical':\r\n return { vertical: result?.vertical };\r\n case 'polyline':\r\n return { distance: result?.distance };\r\n case 'area':\r\n return { area: result?.area };\r\n case 'circle':\r\n return { radius: result?.radius, area: result?.area, perimeter: result?.perimeter };\r\n case 'rectangle':\r\n return { width: result?.width, height: result?.height, area: result?.area };\r\n case 'regularPolygon':\r\n return {\r\n sides: result?.sides,\r\n radius: result?.radius,\r\n perimeter: result?.perimeter,\r\n area: result?.area,\r\n };\r\n case 'triangle':\r\n return { lengths: result?.lengths, angles: result?.angles };\r\n case 'terrainHeight':\r\n return {\r\n terrainHeight: result?.terrainHeight,\r\n difference: result?.difference,\r\n position: result?.position,\r\n zeroPosition: result?.zeroPosition,\r\n };\r\n case 'coordinate':\r\n return { lnglat: result?.lnglat };\r\n default:\r\n return {};\r\n }\r\n }\r\n\r\n private _toCartesian(arr: [number, number, number]) {\r\n const Cesium = this.Cesium;\r\n return new Cesium.Cartesian3(arr[0], arr[1], arr[2]);\r\n }\r\n\r\n private _removeRecordVisual(_rec: MeasurementRecord) {\r\n const viewer = this.viewer;\r\n const Cesium = this.Cesium;\r\n const entities = viewer.entities.values;\r\n for (let i = entities.length - 1; i >= 0; i--) {\r\n const e = entities[i];\r\n try {\r\n viewer.entities.remove(e);\r\n } catch {}\r\n }\r\n const primitives = viewer.scene.primitives;\r\n const arr: any[] = [];\r\n primitives._primitives && primitives._primitives.forEach((p: any) => arr.push(p));\r\n for (const p of arr) {\r\n try {\r\n viewer.scene.primitives.remove(p);\r\n } catch {}\r\n }\r\n if (this.htmlLabelPool) {\r\n this.htmlLabelPool.removeAll();\r\n }\r\n }\r\n\r\n public toggleSpecifiedClear(containerId?: string) {\r\n if (!this.specifiedClear) {\r\n this.specifiedClear = true;\r\n if (!this.deleteLabelPool) {\r\n const cid = containerId || 'html-label-container';\r\n this.deleteLabelPool = new HtmlOverlayLabelPool(this.Cesium, this.viewer, cid);\r\n this.deleteLabelPool.registerTheme('measure-delete-label', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = '删除';\r\n el.style.background = 'rgba(255,0,0,0.7)';\r\n el.style.color = '#fff';\r\n el.style.font = '12px sans-serif';\r\n el.style.padding = '2px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'nowrap';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.deleteLabelPool.eventBus.addListener(\r\n MarkerEventKey.Click,\r\n {\r\n name: 'measurement_delete_label_click',\r\n fn: (info: any) => {\r\n if (!info || info.theme !== 'measure-delete-label') return;\r\n const rid = info?.data?.recordId;\r\n if (rid) this.deleteMeasurement(rid);\r\n },\r\n },\r\n true,\r\n );\r\n }\r\n this._showDeleteLabels(containerId || 'html-label-container');\r\n } else {\r\n this._removeAllDeleteLabels();\r\n this.specifiedClear = false;\r\n }\r\n }\r\n\r\n public deleteMeasurement(recordId: string) {\r\n const handler = this.recordHandlers.get(recordId);\r\n if (handler) {\r\n try {\r\n handler.clear();\r\n } catch {}\r\n }\r\n this.recordHandlers.delete(recordId);\r\n this.measurements = this.measurements.filter((m) => m.id !== recordId);\r\n const did = this.deleteLabelIds.get(recordId);\r\n if (did && this.deleteLabelPool) {\r\n this.deleteLabelPool.removeByIds([did]);\r\n }\r\n this.deleteLabelIds.delete(recordId);\r\n }\r\n\r\n private _showDeleteLabels(containerId?: string) {\r\n if (!this.deleteLabelPool) return;\r\n const Cesium = this.Cesium;\r\n for (const rec of this.measurements) {\r\n const id = 'm_del_' + rec.id;\r\n if (this.deleteLabelIds.has(rec.id)) continue;\r\n const center = this._computeRecordCenter(rec);\r\n if (!center) continue;\r\n const carto = Cesium.Cartographic.fromCartesian(center);\r\n const lon = Cesium.Math.toDegrees(carto.longitude);\r\n const lat = Cesium.Math.toDegrees(carto.latitude);\r\n const h = carto.height || 0;\r\n this.deleteLabelPool.add(\r\n { recordId: rec.id },\r\n {\r\n id,\r\n lon,\r\n lat,\r\n height: h,\r\n theme: 'measure-delete-label',\r\n show: true,\r\n style: { zIndex: '1000' },\r\n },\r\n );\r\n this.deleteLabelIds.set(rec.id, id);\r\n }\r\n }\r\n\r\n private _removeAllDeleteLabels() {\r\n if (this.deleteLabelPool) {\r\n const ids = Array.from(this.deleteLabelIds.values());\r\n if (ids.length) this.deleteLabelPool.removeByIds(ids);\r\n }\r\n this.deleteLabelIds.clear();\r\n }\r\n\r\n private _computeRecordCenter(rec: MeasurementRecord) {\r\n const Cesium = this.Cesium;\r\n const posList = (rec.positions || []).map((p) => this._toCartesian(p));\r\n if (posList.length > 0) {\r\n const cx = posList.reduce((s, p) => s + p.x, 0) / posList.length;\r\n const cy = posList.reduce((s, p) => s + p.y, 0) / posList.length;\r\n const cz = posList.reduce((s, p) => s + p.z, 0) / posList.length;\r\n return new Cesium.Cartesian3(cx, cy, cz);\r\n }\r\n if (rec.type === 'coordinate' && rec.data?.lnglat) {\r\n const lng = rec.data.lnglat.lng;\r\n const lat = rec.data.lnglat.lat;\r\n const height = rec.data.lnglat.height || 0;\r\n return Cesium.Cartesian3.fromDegrees(lng, lat, height);\r\n }\r\n if (rec.type === 'terrainHeight' && rec.data?.position) {\r\n const p = rec.data.position;\r\n return new Cesium.Cartesian3(p.x, p.y, p.z);\r\n }\r\n return null;\r\n }\r\n}\r\n","import { PropType } from 'vue';\r\n\r\nexport const measurementProps = {\r\n Cesium: {\r\n type: Object as PropType<any>,\r\n required: false,\r\n },\r\n viewer: {\r\n type: Object as PropType<any>,\r\n required: false,\r\n },\r\n size: {\r\n type: String as PropType<'default' | 'small'>,\r\n default: 'small',\r\n },\r\n overlayContainerId: {\r\n type: String as PropType<string>,\r\n default: 'cx-measurement-overlay',\r\n },\r\n} as const;\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAQ9JREFUOE+dkjESAUEQRe0NOAEiIaEMERluQCYQcAKcACcgFLqBlQn3BsgFbsD7zKixdlbVTtWv7e3/+0937wY5z3lwXCrgJEkTkxIag6NC0MxqsDAG86wGoWk7vYP4vL69xPPq6rUDZ1574z+Pht2La6BioWXm9pmcIOpJBv9u/eE/I1iGUSLiPEQpyQ1eHRbhy5b//AeQTZIHMESw9RgMyG9AH81eGtdART1Qgrz75uGiC1yERtq3AUm1fAZriAnvM576icR9xaZmxrOM5mIN5iReSVABU8gOxe14zPvIvcwaqOVQbVG0JL4Sr1JijdtFUwgQDXjRYrQUfYUx2IFbSlyD0w6GMlBRVfNmONETek2ROovJNQ4AAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAATBJREFUOE+lk4FNw0AMRbkJgAlYASYgTABMQNigTECZgDIBHaGdgHYCygZsAEwQ3ot8p2uUFqRasnKO7X/+PjsdDaTrunN+XaMN6lnZoCt0mVLyXCTVBskT7Of4t45ETYEu0W90CshLzisAJC/i5iXfliCDi+A/wZhHzAL/rc4eoLr5HodBO4XYFucr+kDsLAXnd37I72ZfcvZFtVK6EmDK4RE9HZa9CyzofOF/EmDVc0mpGXC2GoHlbrn2qEjJ42Cz5gT4AnXAJ8ZZ/Njgvxj4Z9h3VvAfgA8A8kz0OOQJ0P5Fwf5IYbKPgkEHNdHSbORbHo6a69g5nrHB1xw+SPmGapR9LidybJSdQJ+3DN3YMtmT46CVN0+alvyDuky+QC9bAPE8BnuLCcN1dom21vkXc/+iuK1zLp4AAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAABHNCSVQICAgIfAhkiAAAAQBJREFUKFONk4EZwTAUhGUDG9AJsAETYAI1iZoEE6gJ2AAT6AjdoP6rpEKbtvm+95F7r5e7a2oG3iqKYs726mMN/xfGmJvDzR9BZvfHAEkMXkAQ1Qg4Xc0DtWYgbSJgZgV+prbMlIeUCmgM+XlRTxqyEVzMSv6EipjNHUECsKNmgI8Ogin9O7VnNjEwju3pJwDZ6Fw8I/mbUoXdyNsUgqzz6Y9lHSqlqQjkaWTl5z0Jvpl577701JPAZbZwIcrT0qpotWHlK8SLMnMEvYP8CZDMqptIw8kKvsomuz6BgpF8yQtlIXxGjXWJlNf/txCD6Tq3reoa1wgEWJlBAv9L1NAbCC98xCsG9JwAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAGZJREFUOE9j/A8EDEiAEQiQ+ehsDPUgAZgmZDYuQzDUowvgsx0mh2IhupOAihoJGFKP4mUQB2pII9DkBkIuAKoFqamHuQIcYKMGDPkwoHpeACYLQompASMpIwsQSokgebx5gdTsDADpy5nxGGvoWgAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABHNCSVQICAgIfAhkiAAAAMVJREFUKFOVkoENwiAQRWUCu4k6gbhBnaB0g47iBtYJdASdQLsJG+D7yUGw0agkP4Xj/7t/R92iWimlwLEDaws/+I7OuVOmOW0gNnzOwIMJXI2g88rOe4QxC0RQ1kDwMqvaqgq4c7dzZuNIQBleyFkIRyI56CVQ9gZy9l0XKHt46idKEK2x4S3TgvAObLt/BSFbWmJp86VCsRQg/t60slrjmnf/YaxKOHHn64fTSLdApTU5LQ80vRtoy8NV85Y9Yf5rjJnzBCCwZhr1an8TAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAQFJREFUOE+VUzsSAUEQtZEj2FsQysjIyIRKtCmRkgnJyIRCmZURIZRxC07Be6pnq3e2Z5WuejX9mf5OT/QGVRRFIC37fOE+Fc5J86Eghfu+oiy7s+US+iXh0gvYAQPhjziHwA14AkmuZQoS5CGGPs49QHkMnIE1cBf+irPnqvgOTAIwc/OH8wR2JjADMEurJDOdSRugalXA/k6Bsp3zCnbOJ7ECsOe20bN2pn0eamEJQ8cbmO/cgH0B1EItzNS0LWe+Cp91agU4SHl8tpAzW7gA9SyAsUgjmTYHRgeWzczkqeNSZRQZq5zC2gW2QAxwN8hTRzkurLJW6OghvvQv/PudP2fPqPEaEaVuAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAVCAYAAACg/AXsAAAABHNCSVQICAgIfAhkiAAAAPZJREFUOE/tk0EOwUAUhs0NLCyRLsTa2ooT4ATqRuICWhfA1ik4AYmtBCeo769OUq1pxk7ES740fW/eP2/+aU3NEUmSnCk1c+W2MUa5Upi/iL8nWom5Kx59DO24vFPeaeyPieBHnSPtoAs9fDm5fCl5QvOYxSOYwAUacIMjRIjFRbFUhMaAxxRCuMMcNrCwt5OJqz6AJcQI7tPboaiCkooZhcjuRE3TtMhJLA1yViTIhML8JBITV9AkW5p1DNusY2raIWgjHe05iV1U2ElialqDhPR+yBol8BJVf7FuR82BJvvodoq7+LxXfvY+Am898W3Mr/ueSR4JpmsW0RAzTwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAWCAYAAAAb+hYkAAAABHNCSVQICAgIfAhkiAAAAR1JREFUOE+tk6FywkAURVlZ1SIqcK2owCE6g+YLWhwSiQOJI6hKcJXF9R9QqcUEybSmOFyLw4VzmSSThF0SGHbmTjbknXff7lxM5YJl8kwYhg1++0B6+qhtjPlP19mgJQUPaIa6KABqOaHIJaBgTKHH+5R9n32muc3pl8JbJGCA1jAaNVmuM82puEffqFl4JrVjrA6PT1QHWKVdtD9yiiBdgG7wEUjjZtZVoR6t31ENp01ZJ93aBFXzl3DqTBdBQzq+nevkAYzQDePtyp7pAOXjE8O2RNzxcYGekKKkHBamfEbhK/pBzxEk52RlnIiPXP7iQt7V4AWnqhPSBwp9Hkq5umu8L6BuERT/YwVuUSOfP1f2NKbgZelEpEex7fdW8nMXLD81JwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAANCAYAAACtpZ5jAAAABHNCSVQICAgIfAhkiAAAAN9JREFUOE+1krENwjAUROMNGAEqWtLSkJIONgAmwB2MQAkTwAbABjBBwgYZIRuYd8gWIIHiFLZ0svX/3eX8Y5MlWiaRb5be2DnXJ/0E3I0xdexN0PXgzsADXRV0r8Q0C7YzEKkBK0iXNnMfpvQ60aU76RCMZaaUFuzBEOz+GIsbkm05j8ECLIFuPMC8CcaOwoGCJYWM121pP/oVuhydjI8g10iCseLrqzdQgCvN+S9zP9OR703ZN/4Gqun/SP9+FT6pmkqgkUQtdOIqRA2sxvBlHOXSgZT+HXcIE0VNlvgJ9ttGDjhkGwIAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAU5JREFUOE+dkjFLQzEURnsRRUW0uDkI3XQo0m6Odms3QRHHjk5SNzfd/Ac66iKKIm0nHf0HduncooibiLo5PM/3SCAvlmL74NDk3uTk3jSWG/FLkmSTLUeQhwMbcX8OQZ89H46FcQWvCGbBxhFssfEGvqCeEfzpz6wVt+jWNInXzOwhFmT7MysPEFwT24BlBD+x4JmE+puGSRYUQwGnzzF/g0tye8rFAtm34RtmYIWFqir9EOzycwUV4o8ZAckCgSdowz68wD0LtckLdCfrsEQ8iQUXBPRISjoV4SHjEygy77ry35mfMm94qQU3v0bw1p9IXPfQhw6xKvM643MoM++EAi3Sy1Lf8yQl8iXros6gBjq1QH7V59MW3NPsMdbbJm+lQDDBWP/MFCzCHfmdWKC+j52gwYLM4+EACdT7p9aEFaYVhLZB42EV/lcwtMJfrJ6SRKgz9VoAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAMZJREFUOE9jZACC////JwApeRCbSOAAVGcBxMsZgZpBnP1EakRX9h3ZAEdGRsYDUBf9B7IZsRkKtNAAKH4CiFmBuJskA6CaQa59CMQOQDs+EG0ANs0gF+IMA2Qv4NKMbgA8DJD9jk8zQQMIacZrADGacRpArGasBpCiGcMAoMAHaKoEJSIDYEw8IJRCkaOxEKi4HhS10ERygZBmmAsWABnxUMUfSdEMM+A/VDOINgI6myibYa4DeWEekBMHxHOAmjOIcTayGgDyvZQkMv2X2QAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAMFJREFUOE+Vk70NwjAQRnMVJekQHRvACBkBNqCkgw0IHV0yAiOxAaGkgg3MuyAjix/nztInpbj34thfpHCsEELFeEMWpCMrcfAFgjPzM3Iia3LxCgLQQURqZC3PW6/gATQiR7IjV7OAN9YAe3IjE4XJ0iRI4H776bkNCnKwirKCITgrsMB/BVb4p8AD94KPeuo9l7EslpaqIK3nBujOVU0tcNzBdz0xeAQdw2Oi3X7VU0T/NtOKZ6Dw/F1PEf0s03oC+SBfAKxisH4AAAAASUVORK5CYII=\"","<template>\n <div v-show=\"visible\" :class=\"[bem.b('box'), bem.is('small', props.size === 'small')]\">\n <div\n v-for=\"type in types\"\n :key=\"type.key\"\n :class=\"[bem.be('box', 'btn'), { active: activeType === type.key }]\"\n @click=\"handleMeasure(type.key)\"\n >\n <div :class=\"bem.be('box', 'icon')\">\n <img :src=\"type.icon\" :alt=\"type.label\" />\n </div>\n {{ type.label }}\n </div>\n <div :class=\"bem.be('box', 'btn')\" @click=\"handleSpecifiedClear\">\n <div :class=\"bem.be('box', 'icon')\">\n <img :src=\"iconClear\" alt=\"指定清除\" />\n </div>\n 指定清除\n </div>\n <div :class=\"bem.be('box', 'btn')\" @click=\"handleClear\">\n <div :class=\"bem.be('box', 'icon')\">\n <img :src=\"iconClear\" alt=\"清除\" />\n </div>\n 清除全部\n </div>\n </div>\n <div :id=\"overlayContainerId\" :class=\"bem.be('box', 'container')\"></div>\n</template>\n\n<script setup lang=\"ts\">\n import { ref, onMounted, onUnmounted, unref, inject, Ref, watch } from 'vue';\n import { createNamespace, prefix } from '../../../../../utils/create';\n import { measurementProps } from './measurement';\n import { MeasurementTool } from '../../../../../cesium-core/src';\n\n // Icons\n import iconClear from '../../../assets/icons/icon-001.png';\n import iconCoordinate from '../../../assets/icons/icon-002.png';\n import iconRegular from '../../../assets/icons/icon-003.png';\n import iconRectangle from '../../../assets/icons/icon-004.png';\n import iconCircle from '../../../assets/icons/icon-005.png';\n import iconArea from '../../../assets/icons/icon-006.png';\n import iconHeight from '../../../assets/icons/icon-007.png';\n import iconVertical from '../../../assets/icons/icon-008.png';\n import iconHorizontal from '../../../assets/icons/icon-009.png';\n import iconPolyline from '../../../assets/icons/icon-010.png';\n import iconTriangle from '../../../assets/icons/icon-011.png';\n import iconSpace from '../../../assets/icons/icon-012.png';\n\n defineOptions({ name: `${prefix}-measurement` });\n const props = defineProps(measurementProps);\n const bem = createNamespace('measurement');\n const overlayContainerId = props.overlayContainerId || 'cx-measurement-overlay';\n\n const types = [\n { key: 'horizontal', label: '水平测距', icon: iconHorizontal },\n { key: 'vertical', label: '垂直测距', icon: iconVertical },\n { key: 'space', label: '空间测距', icon: iconSpace },\n { key: 'triangle', label: '三角测量', icon: iconTriangle },\n { key: 'polyline', label: '折线测距', icon: iconPolyline },\n { key: 'area', label: '面积测量', icon: iconArea },\n { key: 'circle', label: '圆形测量', icon: iconCircle },\n { key: 'rectangle', label: '矩形测量', icon: iconRectangle },\n { key: 'regularPolygon', label: '正多边形', icon: iconRegular },\n { key: 'terrainHeight', label: '地形高度', icon: iconHeight },\n { key: 'coordinate', label: '坐标查询', icon: iconCoordinate },\n ];\n\n const activeType = ref('');\n const visible = ref(false);\n const tool = ref<MeasurementTool | null>(null);\n let cesiumInstance: any = null;\n const leitingMethods = inject('leitingMethods') as Ref<any>;\n const init = (Cesium: any, viewer: any) => {\n if (!Cesium || !viewer) return;\n cesiumInstance = Cesium;\n tool.value = new MeasurementTool({ Cesium, viewer });\n };\n\n const handleMeasure = (type: string) => {\n const methods = unref(leitingMethods) as any;\n if (!tool.value && methods) {\n const Cesium = methods.getCesium();\n const viewer = methods.getViewer();\n cesiumInstance = Cesium;\n tool.value = new MeasurementTool({ Cesium, viewer });\n }\n if (!tool.value || !cesiumInstance) return;\n\n if (type === 'clear') {\n handleClear();\n return;\n }\n // 同类型连续测量:保持选中状态,直接再次启动测量\n activeType.value = type;\n tool.value.measure(type as any, {\n overlayContainerId,\n color: cesiumInstance.Color.YELLOW.withAlpha(0.5),\n lineColor: cesiumInstance.Color.fromCssColorString('#51ff00'),\n dashLineColor: cesiumInstance.Color.RED,\n pointColor: cesiumInstance.Color.YELLOW,\n });\n };\n\n const handleClear = () => {\n if (tool.value) {\n tool.value.clearAll();\n activeType.value = '';\n }\n };\n\n const handleSpecifiedClear = () => {\n if (tool.value) {\n tool.value.toggleSpecifiedClear(overlayContainerId);\n }\n };\n\n const open = (val: boolean) => {\n visible.value = val;\n };\n\n function load() {\n if (tool.value) return tool.value;\n const methods = unref(leitingMethods) as any;\n const Cesium = methods?.getCesium?.();\n const viewer = methods?.getViewer?.();\n if (Cesium && viewer) {\n init(Cesium, viewer);\n } else if (props.Cesium && props.viewer) {\n init(Cesium, viewer);\n }\n }\n watch(\n () => leitingMethods?.value,\n (nv, ov) => {\n /* ... */\n load();\n },\n { deep: false },\n );\n onMounted(() => {\n load();\n });\n\n onUnmounted(() => {\n if (tool.value) {\n tool.value.clear();\n tool.value = null;\n }\n });\n\n defineExpose({\n init,\n open,\n tool,\n setMeasurementInfo(config: any) {\n if (tool.value) {\n config.measurements?.forEach((item: any) => {\n item.options = {\n overlayContainerId,\n color: cesiumInstance.Color.YELLOW,\n lineColor: cesiumInstance.Color.fromCssColorString('#51ff00'),\n dashLineColor: cesiumInstance.Color.RED,\n pointColor: cesiumInstance.Color.YELLOW,\n };\n });\n tool.value.setMeasurementsConfig(config);\n }\n },\n getMeasurementInfo() {\n if (tool.value) {\n let config = tool.value.getMeasurementsConfig();\n config.measurements?.forEach((item: any) => {\n delete item.options;\n });\n return config;\n }\n return {\n measurements: [],\n };\n },\n });\n</script>\n","import { withInstall } from '../../../../utils/with-install';\nimport _Measurement from './src/Measurement.vue';\nexport * from './src/measurement';\n\nconst CxMeasurement = withInstall(_Measurement);\nexport { CxMeasurement };\nexport default CxMeasurement;\n"],"names":["HorizontalMeasure","Cesium","viewer","options","containerId","HtmlOverlayLabelPool","el","ctx","movement","pos","carto","lng","lat","clampedPos","point","terrainHeight","groundPos","groundDashColor","groundLine","p1","p2","c1","c2","entity","d","mid","mc","id","total","i","geodesic","last","lc","result","e","p","record","htmlLabelPool","opts","lineColor","dashColor","width","posList","seg","sid","VerticalMeasure","ray0","cart","c0","base","basePoint","solidColor","ray","O","D","B","U","w0","a","b","c","den","s","second","solidColor2","dashColor2","secondPoint","vertical","pid","TriangleMeasure","h1","h2","low","high","cl","maxH","third","horizontal","hypotenuse","lenV","lenH","lenHyp","midV","midH","midHyp","mV","mH","mHyp","idV","idH","idHyp","vLowToHigh","vLowToThird","vHighToThird","vHighToLow","dotA","magA","dotB","magB","angleA","angleB","cLow","cHigh","idAngA","idAngB","ratio","markerLen","dirV","dirH","pOffV","pOffH","pCorner","rightMarkerSeg1","rightMarkerSeg2","pv","ph","phyp","pLow","pHigh","t","SpaceMeasure","p0","AreaMeasure","hierarchy","geom","instance","color","occludedColor","polylinePositions","lineEntity","pts","center","points2D","area2D","j","cc","all","pointColor","hoverPoint","lastPoint","p2d","prev","curr","next","v1x","v1y","v2x","v2y","len1","len2","dot","ang","pc","aid","primitive","CircleMeasure","text","click","position","edge","radius","area","perimeter","centerLabelPos","cartoCenter","h","PolylineDistanceMeasure","lastId","TerrainHeightMeasure","terrainPos","heightDiff","labelText","CoordinateMeasure","ll","RectangleMeasure","thirdPoint","rect","corners","height","edges","mc2","surfacePositions","corner","pointEntity","tPrev","ep1","ep2","p3","plane","pts2d","vx","vy","baseLen","ux","nx","ny","wx","wy","d2","worldPoints","p2w","rect2d","RegularPolygonMeasure","sides","points","uniquePoints","step","angle","x","y","MeasurementTool","type","handler","currentHandler","wrapped","o","idx","disableLeftClick","disableDoubleClick","m","config","rec","r","arr","_rec","entities","primitives","cid","MarkerEventKey","info","rid","recordId","did","lon","ids","cx","cy","cz","measurementProps","iconClear","iconCoordinate","iconRegular","iconRectangle","iconCircle","iconArea","iconHeight","iconVertical","iconHorizontal","iconPolyline","iconTriangle","iconSpace","props","__props","bem","createNamespace","overlayContainerId","types","activeType","ref","visible","tool","cesiumInstance","leitingMethods","inject","init","handleMeasure","methods","unref","handleClear","handleSpecifiedClear","open","val","load","watch","nv","ov","onMounted","onUnmounted","__expose","item","_createElementVNode","_normalizeClass","_unref","_createElementBlock","_Fragment","_renderList","$event","_toDisplayString","CxMeasurement","withInstall","_Measurement"],"mappings":"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"}
1
+ {"version":3,"file":"measurement.js","sources":["../../../cesium-core/src/components/measurement/handlers/HorizontalMeasure.ts","../../../cesium-core/src/components/measurement/handlers/VerticalMeasure.ts","../../../cesium-core/src/components/measurement/handlers/TriangleMeasure.ts","../../../cesium-core/src/components/measurement/handlers/SpaceMeasure.ts","../../../cesium-core/src/components/measurement/handlers/AreaMeasure.ts","../../../cesium-core/src/components/measurement/handlers/CircleMeasure.ts","../../../cesium-core/src/components/measurement/handlers/PolylineDistanceMeasure.ts","../../../cesium-core/src/components/measurement/handlers/TerrainHeightMeasure.ts","../../../cesium-core/src/components/measurement/handlers/CoordinateMeasure.ts","../../../cesium-core/src/components/measurement/handlers/RectangleMeasure.ts","../../../cesium-core/src/components/measurement/handlers/RegularPolygonMeasure.ts","../../../cesium-core/src/components/measurement/MeasurementTool.ts","../../src/components/measurement/src/measurement.ts","../../src/assets/icons/icon-001.png","../../src/assets/icons/icon-002.png","../../src/assets/icons/icon-003.png","../../src/assets/icons/icon-004.png","../../src/assets/icons/icon-005.png","../../src/assets/icons/icon-006.png","../../src/assets/icons/icon-007.png","../../src/assets/icons/icon-008.png","../../src/assets/icons/icon-009.png","../../src/assets/icons/icon-010.png","../../src/assets/icons/icon-011.png","../../src/assets/icons/icon-012.png","../../src/components/measurement/src/Measurement.vue","../../src/components/measurement/index.ts"],"sourcesContent":["import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class HorizontalMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private positions: any[] = [];\r\n private tempPoints: any[] = [];\r\n private segmentEntities: any[] = [];\r\n private segmentLabelIds: string[] = [];\r\n private previewEntity: any = null;\r\n private previewGroundEntity: any = null;\r\n private hoverPos: any = null;\r\n private htmlLabelPool: any = null;\r\n private totalLabelId: string | null = null;\r\n private previewLabelId: string | null = null;\r\n private labelEntity: any = null;\r\n private firstHeight: number | null = null;\r\n private groundLineEntities: any[] = [];\r\n private previewPos: any = null;\r\n private previewGroundPos: any = null;\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-horizontal-total', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-horizontal-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((movement: any) => {\r\n const pos = viewer.scene.pickPosition(movement.position);\r\n if (!pos) return;\r\n const carto = Cesium.Cartographic.fromCartesian(pos);\r\n const lng = Cesium.Math.toDegrees(carto.longitude);\r\n const lat = Cesium.Math.toDegrees(carto.latitude);\r\n if (this.positions.length === 0) {\r\n this.firstHeight = carto.height || 0;\r\n }\r\n const clampedPos = Cesium.Cartesian3.fromDegrees(lng, lat, this.firstHeight || 0);\r\n this.positions.push(clampedPos);\r\n const point = viewer.entities.add({\r\n position: clampedPos,\r\n point: {\r\n pixelSize: 8,\r\n color: options.pointColor || options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.tempPoints.push(point);\r\n const terrainHeight =\r\n viewer.scene.globe.getHeight(new Cesium.Cartographic(carto.longitude, carto.latitude, 0)) || 0;\r\n const groundPos = Cesium.Cartesian3.fromDegrees(lng, lat, terrainHeight);\r\n const groundDashColor =\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED;\r\n const groundLine = viewer.entities.add({\r\n polyline: {\r\n positions: [groundPos, clampedPos],\r\n width: options.width || 3,\r\n material: new Cesium.PolylineDashMaterialProperty({\r\n color: groundDashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n this.groundLineEntities.push(groundLine);\r\n if (this.positions.length >= 2) {\r\n const p1 = this.positions[this.positions.length - 2];\r\n const p2 = this.positions[this.positions.length - 1];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const entity = viewer.entities.add({\r\n polyline: {\r\n positions: [p1, p2],\r\n width: options.width || 3,\r\n material: options.lineColor || options.color || Cesium.Color.YELLOW,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color:\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n this.segmentEntities.push(entity);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n const mid = new Cesium.Cartesian3(\r\n (p1.x + p2.x) / 2,\r\n (p1.y + p2.y) / 2,\r\n (p1.z + p2.z) / 2,\r\n );\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const id = `measure_horizontal_seg_${this.segmentLabelIds.length}_${Date.now()}`;\r\n this.segmentLabelIds.push(id);\r\n this.htmlLabelPool.add(\r\n { text: `${d.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || (this.firstHeight || 0),\r\n theme: 'measure-horizontal-seg',\r\n show: true,\r\n },\r\n );\r\n }\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction(() => {\r\n if (this.positions.length < 2) {\r\n this.stop();\r\n return;\r\n }\r\n this.stop();\r\n if (this.previewLabelId) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n if (this.hoverPos) {\r\n this.hoverPos = null;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewGroundEntity) {\r\n this.viewer.entities.remove(this.previewGroundEntity);\r\n this.previewGroundEntity = null;\r\n }\r\n let total = 0;\r\n for (let i = 1; i < this.positions.length; i++) {\r\n const p1 = this.positions[i - 1];\r\n const p2 = this.positions[i];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n total += geodesic.surfaceDistance;\r\n }\r\n const last = this.positions[this.positions.length - 1];\r\n const lc = Cesium.Cartographic.fromCartesian(last);\r\n const id = this.totalLabelId || `measure_horizontal_total_${Date.now()}`;\r\n this.totalLabelId = id;\r\n this.htmlLabelPool.add(\r\n { text: `${total.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(lc.longitude),\r\n lat: Cesium.Math.toDegrees(lc.latitude),\r\n height: lc.height || (this.firstHeight || 0),\r\n theme: 'measure-horizontal-total',\r\n show: true,\r\n },\r\n );\r\n this.labelEntity = this.totalLabelId;\r\n const result = {\r\n entity: this.segmentEntities,\r\n label: this.labelEntity,\r\n segmentLabels: this.segmentLabelIds,\r\n positions: this.positions,\r\n distance: total,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n if (this.positions.length === 0) return;\r\n const pos = viewer.scene.pickPosition(movement.endPosition);\r\n if (!pos) return;\r\n this.hoverPos = pos;\r\n const carto = Cesium.Cartographic.fromCartesian(pos);\r\n const lng = Cesium.Math.toDegrees(carto.longitude);\r\n const lat = Cesium.Math.toDegrees(carto.latitude);\r\n const clampedPos = Cesium.Cartesian3.fromDegrees(lng, lat, this.firstHeight || 0);\r\n this.previewPos = clampedPos;\r\n const terrainHeight =\r\n viewer.scene.globe.getHeight(new Cesium.Cartographic(carto.longitude, carto.latitude, 0)) || 0;\r\n const groundPos = Cesium.Cartesian3.fromDegrees(lng, lat, terrainHeight);\r\n this.previewGroundPos = groundPos;\r\n const p1 = this.positions[this.positions.length - 1];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(clampedPos);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n const mid = new Cesium.Cartesian3(\r\n (p1.x + clampedPos.x) / 2,\r\n (p1.y + clampedPos.y) / 2,\r\n (p1.z + clampedPos.z) / 2,\r\n );\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const id = this.previewLabelId || 'measure_horizontal_preview';\r\n this.previewLabelId = id;\r\n this.htmlLabelPool.add(\r\n { text: `${d.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || (this.firstHeight || 0),\r\n theme: 'measure-horizontal-seg',\r\n show: true,\r\n },\r\n );\r\n const groundDashColor =\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED;\r\n if (!this.previewGroundEntity) {\r\n this.previewGroundEntity = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewPos || !this.previewGroundPos) return [];\r\n return [this.previewGroundPos, this.previewPos];\r\n }, false),\r\n width: options.width || 3,\r\n material: new Cesium.PolylineDashMaterialProperty({\r\n color: groundDashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n }\r\n if (!this.previewEntity) {\r\n this.previewEntity = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewPos || !this.positions.length) return [];\r\n const last = this.positions[this.positions.length - 1];\r\n return [last, this.previewPos];\r\n }, false),\r\n width: options.width || 3,\r\n material: options.lineColor || options.color || Cesium.Color.YELLOW,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color:\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n }\r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n this.segmentEntities.forEach((e) => this.viewer.entities.remove(e));\r\n this.segmentEntities = [];\r\n this.groundLineEntities.forEach((e) => this.viewer.entities.remove(e));\r\n this.groundLineEntities = [];\r\n this.tempPoints.forEach((p) => this.viewer.entities.remove(p));\r\n this.tempPoints = [];\r\n if (this.totalLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.totalLabelId]);\r\n this.totalLabelId = null;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewGroundEntity) {\r\n this.viewer.entities.remove(this.previewGroundEntity);\r\n this.previewGroundEntity = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n if (this.segmentLabelIds.length && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice());\r\n }\r\n this.segmentLabelIds = [];\r\n this.positions = [];\r\n this.hoverPos = null;\r\n this.labelEntity = null;\r\n this.firstHeight = null;\r\n this.previewPos = null;\r\n this.previewGroundPos = null;\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const lineColor = opts.lineColor || opts.color || Cesium.Color.YELLOW;\r\n const dashColor = (opts.dashLineColor || opts.lineColor || opts.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n const width = opts.width || 3;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (!posList.length) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-horizontal-total', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-horizontal-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n for (const pos of posList) {\r\n const point = viewer.entities.add({ position: pos, point: { pixelSize: 8, color: opts.pointColor || opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n this.tempPoints.push(point);\r\n const carto = Cesium.Cartographic.fromCartesian(pos);\r\n const lng = Cesium.Math.toDegrees(carto.longitude);\r\n const lat = Cesium.Math.toDegrees(carto.latitude);\r\n const terrainHeight = viewer.scene.globe.getHeight(new Cesium.Cartographic(carto.longitude, carto.latitude, 0)) || 0;\r\n const groundPos = Cesium.Cartesian3.fromDegrees(lng, lat, terrainHeight);\r\n const groundLine = viewer.entities.add({\r\n polyline: {\r\n positions: [groundPos, pos],\r\n width,\r\n material: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n this.groundLineEntities.push(groundLine);\r\n }\r\n for (let i = 1; i < posList.length; i++) {\r\n const p1 = posList[i - 1];\r\n const p2 = posList[i];\r\n const seg = viewer.entities.add({\r\n polyline: {\r\n positions: [p1, p2],\r\n width,\r\n material: lineColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n this.segmentEntities.push(seg);\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n const mid = new Cesium.Cartesian3((p1.x + p2.x) / 2, (p1.y + p2.y) / 2, (p1.z + p2.z) / 2);\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const sid = record.id + `_seg_${i - 1}`;\r\n this.segmentLabelIds.push(sid);\r\n this.htmlLabelPool.add({ text: `${d.toFixed(2)} m` }, {\r\n id: sid,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-horizontal-seg',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n });\r\n }\r\n let total = 0;\r\n for (let i = 1; i < posList.length; i++) {\r\n const c1 = Cesium.Cartographic.fromCartesian(posList[i - 1]);\r\n const c2 = Cesium.Cartographic.fromCartesian(posList[i]);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n total += geodesic.surfaceDistance;\r\n }\r\n const last = posList[posList.length - 1];\r\n const lc = Cesium.Cartographic.fromCartesian(last);\r\n const id = record.id + '_total';\r\n this.totalLabelId = id;\r\n this.htmlLabelPool.add({ text: `${total.toFixed(2)} m` }, {\r\n id,\r\n lon: Cesium.Math.toDegrees(lc.longitude),\r\n lat: Cesium.Math.toDegrees(lc.latitude),\r\n height: lc.height || 0,\r\n theme: 'measure-horizontal-total',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n });\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class VerticalMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private entity: any = null;\r\n private labelEntity: any = null;\r\n private positions: any[] = [];\r\n private htmlLabelPool: any = null;\r\n private htmlLabelId: string | null = null;\r\n private previewLabelId: string | null = null;\r\n private baseCarto: any = null;\r\n private baseUp: any = null;\r\n private tempPoints: any[] = [];\r\n private previewPointEntity: any = null;\r\n private previewEntity: any = null;\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-vertical', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((movement: any) => {\r\n const ray0 = viewer.camera.getPickRay(movement.position);\r\n let cart = ray0 ? viewer.scene.globe.pick(ray0, viewer.scene) : null;\r\n if (!cart) cart = viewer.camera.pickEllipsoid(movement.position, Cesium.Ellipsoid.WGS84);\r\n if (!cart) cart = viewer.scene.pickPosition(movement.position);\r\n if (!cart) return;\r\n if (this.positions.length === 0) {\r\n const c0 = Cesium.Cartographic.fromCartesian(cart);\r\n this.baseCarto = new Cesium.Cartographic(c0.longitude, c0.latitude, 0);\r\n const base = Cesium.Ellipsoid.WGS84.cartographicToCartesian(this.baseCarto);\r\n this.baseUp = Cesium.Ellipsoid.WGS84.geodeticSurfaceNormalCartographic(this.baseCarto);\r\n this.positions.push(base);\r\n const basePoint = viewer.entities.add({\r\n position: base,\r\n point: {\r\n pixelSize: 8,\r\n color: options.pointColor || options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.tempPoints.push(basePoint);\r\n const solidColor = options.lineColor || options.color || Cesium.Color.CYAN;\r\n const dashColor =\r\n (\r\n options.dashLineColor ||\r\n options.lineColor ||\r\n options.color ||\r\n Cesium.Color.RED\r\n ).withAlpha?.(0.9) || Cesium.Color.RED;\r\n this.previewEntity = viewer.entities.add({\r\n polyline: {\r\n positions: [base, base],\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n } else {\r\n if (!this.baseCarto || !this.baseUp) return;\r\n const base = this.positions[0];\r\n const ray = viewer.camera.getPickRay(movement.position);\r\n if (!ray) return;\r\n const O = ray.origin;\r\n const D = Cesium.Cartesian3.normalize(ray.direction, new Cesium.Cartesian3());\r\n const B = base;\r\n const U = this.baseUp;\r\n const w0 = Cesium.Cartesian3.subtract(O, B, new Cesium.Cartesian3());\r\n const a = Cesium.Cartesian3.dot(D, D);\r\n const b = -Cesium.Cartesian3.dot(D, U);\r\n const c = Cesium.Cartesian3.dot(U, U);\r\n const d = -Cesium.Cartesian3.dot(D, w0);\r\n const e = Cesium.Cartesian3.dot(U, w0);\r\n const den = a * c - b * b;\r\n if (Math.abs(den) < 1e-6) return;\r\n const s = (a * e - b * d) / den;\r\n const second = Cesium.Cartesian3.add(\r\n B,\r\n Cesium.Cartesian3.multiplyByScalar(U, s, new Cesium.Cartesian3()),\r\n new Cesium.Cartesian3(),\r\n );\r\n this.positions[1] = second;\r\n this.stop();\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewPointEntity) {\r\n this.viewer.entities.remove(this.previewPointEntity);\r\n this.previewPointEntity = null;\r\n }\r\n const solidColor2 = options.lineColor || options.color || Cesium.Color.CYAN;\r\n const dashColor2 = (\r\n options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED\r\n ).withAlpha?.(0.9) || Cesium.Color.RED;\r\n this.entity = viewer.entities.add({\r\n polyline: {\r\n positions: [base, second],\r\n width: options.width || 3,\r\n material: solidColor2,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor2,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n const secondPoint = viewer.entities.add({\r\n position: second,\r\n point: {\r\n pixelSize: 8,\r\n color: options.pointColor || options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.tempPoints.push(secondPoint);\r\n const c1 = this.baseCarto;\r\n const c2 = Cesium.Cartographic.fromCartesian(second);\r\n const vertical = Math.abs((c2.height || 0) - (c1.height || 0));\r\n const mid = new Cesium.Cartesian3(\r\n (this.positions[0].x + this.positions[1].x) / 2,\r\n (this.positions[0].y + this.positions[1].y) / 2,\r\n (this.positions[0].z + this.positions[1].z) / 2,\r\n );\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n const id = this.htmlLabelId || `measure_vertical_${Date.now()}`;\r\n this.htmlLabelId = id;\r\n this.htmlLabelPool.add(\r\n { text: `${vertical.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-vertical',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n },\r\n );\r\n const result = {\r\n entity: this.entity,\r\n label: this.labelEntity,\r\n positions: this.positions,\r\n vertical,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n if (this.positions.length < 1) return;\r\n if (!this.baseCarto || !this.baseUp) {\r\n const c0 = Cesium.Cartographic.fromCartesian(this.positions[0]);\r\n this.baseCarto = new Cesium.Cartographic(c0.longitude, c0.latitude, c0.height || 0);\r\n this.baseUp = Cesium.Ellipsoid.WGS84.geodeticSurfaceNormalCartographic(this.baseCarto);\r\n }\r\n const base = this.positions[0];\r\n const ray = viewer.camera.getPickRay(movement.endPosition);\r\n if (!ray) return;\r\n const O = ray.origin;\r\n const D = Cesium.Cartesian3.normalize(ray.direction, new Cesium.Cartesian3());\r\n const B = base;\r\n const U = this.baseUp;\r\n const w0 = Cesium.Cartesian3.subtract(O, B, new Cesium.Cartesian3());\r\n const a = Cesium.Cartesian3.dot(D, D);\r\n const b = -Cesium.Cartesian3.dot(D, U);\r\n const c = Cesium.Cartesian3.dot(U, U);\r\n const d = -Cesium.Cartesian3.dot(D, w0);\r\n const e = Cesium.Cartesian3.dot(U, w0);\r\n const den = a * c - b * b;\r\n if (Math.abs(den) < 1e-6) return;\r\n const s = (a * e - b * d) / den;\r\n const second = Cesium.Cartesian3.add(\r\n B,\r\n Cesium.Cartesian3.multiplyByScalar(U, s, new Cesium.Cartesian3()),\r\n new Cesium.Cartesian3(),\r\n );\r\n this.positions[1] = second;\r\n if (!this.previewEntity) {\r\n const solidColor = options.lineColor || options.color || Cesium.Color.CYAN;\r\n const dashColor =\r\n (\r\n options.dashLineColor ||\r\n options.lineColor ||\r\n options.color ||\r\n Cesium.Color.RED\r\n ).withAlpha?.(0.9) || Cesium.Color.RED;\r\n this.previewEntity = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (this.positions.length < 2) return [];\r\n return [this.positions[0], this.positions[1]];\r\n }, false),\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n }\r\n if (!this.previewPointEntity) {\r\n this.previewPointEntity = viewer.entities.add({\r\n position: second,\r\n point: {\r\n pixelSize: 8,\r\n color: options.pointColor || options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n } else {\r\n this.previewPointEntity.position = second;\r\n }\r\n const c1 = this.baseCarto;\r\n const c2 = Cesium.Cartographic.fromCartesian(second);\r\n const vertical = Math.abs((c2.height || 0) - (c1.height || 0));\r\n const mid = new Cesium.Cartesian3(\r\n (this.positions[0].x + second.x) / 2,\r\n (this.positions[0].y + second.y) / 2,\r\n (this.positions[0].z + second.z) / 2,\r\n );\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const pid = this.previewLabelId || 'measure_vertical_preview';\r\n this.previewLabelId = pid;\r\n this.htmlLabelPool.add(\r\n { text: `${vertical.toFixed(2)} m` },\r\n {\r\n id: pid,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-vertical',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n },\r\n );\r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n if (this.entity) {\r\n this.viewer.entities.remove(this.entity);\r\n this.entity = null;\r\n }\r\n if (this.labelEntity) {\r\n this.viewer.entities.remove(this.labelEntity);\r\n this.labelEntity = null;\r\n }\r\n this.tempPoints.forEach((p) => this.viewer.entities.remove(p));\r\n this.tempPoints = [];\r\n if (this.previewPointEntity) {\r\n this.viewer.entities.remove(this.previewPointEntity);\r\n this.previewPointEntity = null;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.htmlLabelPool && this.htmlLabelId) {\r\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\r\n this.htmlLabelId = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n this.positions = [];\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const lineColor = opts.lineColor || opts.color || Cesium.Color.CYAN;\r\n const dashColor = (opts.dashLineColor || opts.lineColor || opts.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n const width = opts.width || 3;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (posList.length < 2) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-vertical', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n const base = posList[0];\r\n const second = posList[1];\r\n const basePoint = viewer.entities.add({ position: base, point: { pixelSize: 8, color: opts.pointColor || opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n const secondPoint = viewer.entities.add({ position: second, point: { pixelSize: 8, color: opts.pointColor || opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n this.tempPoints.push(basePoint);\r\n this.tempPoints.push(secondPoint);\r\n this.entity = viewer.entities.add({ polyline: { positions: [base, second], width, material: lineColor, depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }) } });\r\n const c1 = Cesium.Cartographic.fromCartesian(base);\r\n const c2 = Cesium.Cartographic.fromCartesian(second);\r\n const vertical = Math.abs((c2.height || 0) - (c1.height || 0));\r\n const mid = new Cesium.Cartesian3((base.x + second.x) / 2, (base.y + second.y) / 2, (base.z + second.z) / 2);\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const id = record.id + '_label';\r\n this.htmlLabelId = id;\r\n this.htmlLabelPool.add({ text: `${vertical.toFixed(2)} m` }, {\r\n id,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-vertical',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n });\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class TriangleMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private positions: any[] = [];\r\n private htmlLabelPool: any = null;\r\n private htmlLabelId: string | null = null;\r\n private segmentEntities: any[] = [];\r\n private angleMarkerEntities: any[] = [];\r\n private pointEntities: any[] = [];\r\n private segmentLabelIds: string[] = [];\r\n private angleLabelIds: string[] = [];\r\n private previewLabelId: string | null = null;\r\n private previewSegmentEntities: any[] = [];\r\n private previewAngleMarkerEntities: any[] = [];\r\n private previewPointEntity: any = null;\r\n private previewLow: any = null;\r\n private previewHigh: any = null;\r\n private previewThird: any = null;\r\n private previewMarkerP1: any = null;\r\n private previewMarkerP2: any = null;\r\n private previewMarkerCorner: any = null;\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-triangle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-triangle-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-triangle-angle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((movement: any) => {\r\n const pos = viewer.scene.pickPosition(movement.position);\r\n if (!pos) return;\r\n this.positions.push(pos);\r\n const p = viewer.entities.add({\r\n position: pos,\r\n point: {\r\n pixelSize: 8,\r\n color: options.pointColor || options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.pointEntities.push(p);\r\n if (this.positions.length === 2) {\r\n this.stop();\r\n this.previewSegmentEntities.forEach((e) => viewer.entities.remove(e));\r\n this.previewSegmentEntities = [];\r\n this.previewAngleMarkerEntities.forEach((e) => viewer.entities.remove(e));\r\n this.previewAngleMarkerEntities = [];\r\n if (this.previewPointEntity) {\r\n viewer.entities.remove(this.previewPointEntity);\r\n this.previewPointEntity = null;\r\n }\r\n const c1 = Cesium.Cartographic.fromCartesian(this.positions[0]);\r\n const c2 = Cesium.Cartographic.fromCartesian(this.positions[1]);\r\n const h1 = c1.height || 0;\r\n const h2 = c2.height || 0;\r\n const low = h1 <= h2 ? this.positions[0] : this.positions[1];\r\n const high = h1 > h2 ? this.positions[0] : this.positions[1];\r\n const cl = Cesium.Cartographic.fromCartesian(low);\r\n const ch = Cesium.Cartographic.fromCartesian(high);\r\n const maxH = Math.max(h1, h2);\r\n const third = Cesium.Cartesian3.fromDegrees(\r\n Cesium.Math.toDegrees(cl.longitude),\r\n Cesium.Math.toDegrees(cl.latitude),\r\n maxH,\r\n );\r\n const solidColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor = (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n const vertical = viewer.entities.add({\r\n polyline: {\r\n positions: [low, third],\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n const horizontal = viewer.entities.add({\r\n polyline: {\r\n positions: [third, high],\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n const hypotenuse = viewer.entities.add({\r\n polyline: {\r\n positions: [low, high],\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n this.segmentEntities.push(vertical, horizontal, hypotenuse);\r\n const lenV = Cesium.Cartesian3.distance(low, third);\r\n const lenH = Cesium.Cartesian3.distance(third, high);\r\n const lenHyp = Cesium.Cartesian3.distance(low, high);\r\n const midV = new Cesium.Cartesian3((low.x + third.x) / 2, (low.y + third.y) / 2, (low.z + third.z) / 2);\r\n const midH = new Cesium.Cartesian3((third.x + high.x) / 2, (third.y + high.y) / 2, (third.z + high.z) / 2);\r\n const midHyp = new Cesium.Cartesian3((low.x + high.x) / 2, (low.y + high.y) / 2, (low.z + high.z) / 2);\r\n const mV = Cesium.Cartographic.fromCartesian(midV);\r\n const mH = Cesium.Cartographic.fromCartesian(midH);\r\n const mHyp = Cesium.Cartographic.fromCartesian(midHyp);\r\n const idV = 'measure_triangle_seg_v';\r\n const idH = 'measure_triangle_seg_h';\r\n const idHyp = 'measure_triangle_seg_hyp';\r\n this.segmentLabelIds = [idV, idH, idHyp];\r\n this.htmlLabelPool.add({ text: `${lenV.toFixed(2)} m` }, { id: idV, lon: Cesium.Math.toDegrees(mV.longitude), lat: Cesium.Math.toDegrees(mV.latitude), height: mV.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${lenH.toFixed(2)} m` }, { id: idH, lon: Cesium.Math.toDegrees(mH.longitude), lat: Cesium.Math.toDegrees(mH.latitude), height: mH.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${lenHyp.toFixed(2)} m` }, { id: idHyp, lon: Cesium.Math.toDegrees(mHyp.longitude), lat: Cesium.Math.toDegrees(mHyp.latitude), height: mHyp.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n const vLowToHigh = Cesium.Cartesian3.subtract(high, low, new Cesium.Cartesian3());\r\n const vLowToThird = Cesium.Cartesian3.subtract(third, low, new Cesium.Cartesian3());\r\n const vHighToThird = Cesium.Cartesian3.subtract(third, high, new Cesium.Cartesian3());\r\n const vHighToLow = Cesium.Cartesian3.subtract(low, high, new Cesium.Cartesian3());\r\n const dotA = Cesium.Cartesian3.dot(vLowToHigh, vLowToThird);\r\n const magA = Math.sqrt(Cesium.Cartesian3.dot(vLowToHigh, vLowToHigh)) * Math.sqrt(Cesium.Cartesian3.dot(vLowToThird, vLowToThird));\r\n const dotB = Cesium.Cartesian3.dot(vHighToThird, vHighToLow);\r\n const magB = Math.sqrt(Cesium.Cartesian3.dot(vHighToThird, vHighToThird)) * Math.sqrt(Cesium.Cartesian3.dot(vHighToLow, vHighToLow));\r\n const angleA = Math.acos(Math.min(Math.max(dotA / (magA || 1), -1), 1));\r\n const angleB = Math.acos(Math.min(Math.max(dotB / (magB || 1), -1), 1));\r\n const cLow = Cesium.Cartographic.fromCartesian(low);\r\n const cHigh = Cesium.Cartographic.fromCartesian(high);\r\n const idAngA = 'measure_triangle_angle_a';\r\n const idAngB = 'measure_triangle_angle_b';\r\n this.angleLabelIds = [idAngA, idAngB];\r\n this.htmlLabelPool.add({ text: `${(angleA * 180 / Math.PI).toFixed(2)}°` }, { id: idAngA, lon: Cesium.Math.toDegrees(cLow.longitude), lat: Cesium.Math.toDegrees(cLow.latitude), height: cLow.height || 0, theme: 'measure-triangle-angle', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${(angleB * 180 / Math.PI).toFixed(2)}°` }, { id: idAngB, lon: Cesium.Math.toDegrees(cHigh.longitude), lat: Cesium.Math.toDegrees(cHigh.latitude), height: cHigh.height || 0, theme: 'measure-triangle-angle', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n const ratio = Math.max(0.01, Math.min(0.5, options.angleMarkerRatio ?? 0.2));\r\n const markerLen = Math.min(lenV, lenH) * ratio;\r\n if (lenV > 0.001 && lenH > 0.001) {\r\n const dirV = Cesium.Cartesian3.normalize(\r\n Cesium.Cartesian3.subtract(low, third, new Cesium.Cartesian3()),\r\n new Cesium.Cartesian3(),\r\n );\r\n const dirH = Cesium.Cartesian3.normalize(\r\n Cesium.Cartesian3.subtract(high, third, new Cesium.Cartesian3()),\r\n new Cesium.Cartesian3(),\r\n );\r\n const pOffV = new Cesium.Cartesian3(\r\n third.x + dirV.x * markerLen,\r\n third.y + dirV.y * markerLen,\r\n third.z + dirV.z * markerLen,\r\n );\r\n const pOffH = new Cesium.Cartesian3(\r\n third.x + dirH.x * markerLen,\r\n third.y + dirH.y * markerLen,\r\n third.z + dirH.z * markerLen,\r\n );\r\n const pCorner = new Cesium.Cartesian3(\r\n third.x + dirV.x * markerLen + dirH.x * markerLen,\r\n third.y + dirV.y * markerLen + dirH.y * markerLen,\r\n third.z + dirV.z * markerLen + dirH.z * markerLen,\r\n );\r\n const rightMarkerSeg1 = viewer.entities.add({\r\n polyline: {\r\n positions: [pOffV, pCorner],\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n const rightMarkerSeg2 = viewer.entities.add({\r\n polyline: {\r\n positions: [pOffH, pCorner],\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n this.angleMarkerEntities.push(rightMarkerSeg1, rightMarkerSeg2);\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n const result = {\r\n entity: this.segmentEntities,\r\n positions: [low, high, third],\r\n lengths: { vertical: lenV, horizontal: lenH, hypotenuse: lenHyp },\r\n angles: { acuteA: angleA, acuteB: angleB },\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n if (this.positions.length !== 1) return;\r\n const pos = viewer.scene.pickPosition(movement.endPosition);\r\n if (!pos) return;\r\n const c1 = Cesium.Cartographic.fromCartesian(this.positions[0]);\r\n const c2 = Cesium.Cartographic.fromCartesian(pos);\r\n const h1 = c1.height || 0;\r\n const h2 = c2.height || 0;\r\n const low = h1 <= h2 ? this.positions[0] : pos;\r\n const high = h1 > h2 ? this.positions[0] : pos;\r\n const cl = Cesium.Cartographic.fromCartesian(low);\r\n const maxH = Math.max(h1, h2);\r\n const third = Cesium.Cartesian3.fromDegrees(\r\n this.Cesium.Math.toDegrees(cl.longitude),\r\n this.Cesium.Math.toDegrees(cl.latitude),\r\n maxH,\r\n );\r\n this.previewLow = low;\r\n this.previewHigh = high;\r\n this.previewThird = third;\r\n const solidColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor = (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n if (!this.previewPointEntity) {\r\n this.previewPointEntity = viewer.entities.add({\r\n position: pos,\r\n point: {\r\n pixelSize: 8,\r\n color: options.pointColor || options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n } else {\r\n this.previewPointEntity.position = pos;\r\n }\r\n if (!this.previewSegmentEntities.length) {\r\n const pv = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewLow || !this.previewThird) return [];\r\n return [this.previewLow, this.previewThird];\r\n }, false),\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n const ph = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewThird || !this.previewHigh) return [];\r\n return [this.previewThird, this.previewHigh];\r\n }, false),\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n const phyp = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewLow || !this.previewHigh) return [];\r\n return [this.previewLow, this.previewHigh];\r\n }, false),\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n this.previewSegmentEntities.push(pv, ph, phyp);\r\n }\r\n const lenV = Cesium.Cartesian3.distance(low, third);\r\n const lenH = Cesium.Cartesian3.distance(third, high);\r\n const lenHyp = Cesium.Cartesian3.distance(low, high);\r\n const vLowToHigh = Cesium.Cartesian3.subtract(high, low, new Cesium.Cartesian3());\r\n const vLowToThird = Cesium.Cartesian3.subtract(third, low, new Cesium.Cartesian3());\r\n const vHighToThird = Cesium.Cartesian3.subtract(third, high, new Cesium.Cartesian3());\r\n const vHighToLow = Cesium.Cartesian3.subtract(low, high, new Cesium.Cartesian3());\r\n const dotA = Cesium.Cartesian3.dot(vLowToHigh, vLowToThird);\r\n const magA = Math.sqrt(Cesium.Cartesian3.dot(vLowToHigh, vLowToHigh)) * Math.sqrt(Cesium.Cartesian3.dot(vLowToThird, vLowToThird));\r\n const dotB = Cesium.Cartesian3.dot(vHighToThird, vHighToLow);\r\n const magB = Math.sqrt(Cesium.Cartesian3.dot(vHighToThird, vHighToThird)) * Math.sqrt(Cesium.Cartesian3.dot(vHighToLow, vHighToLow));\r\n const angleA = Math.acos(Math.min(Math.max((dotA / (magA || 1)), -1), 1));\r\n const angleB = Math.acos(Math.min(Math.max((dotB / (magB || 1)), -1), 1));\r\n const midV = new Cesium.Cartesian3((low.x + third.x) / 2, (low.y + third.y) / 2, (low.z + third.z) / 2);\r\n const midH = new Cesium.Cartesian3((third.x + high.x) / 2, (third.y + high.y) / 2, (third.z + high.z) / 2);\r\n const midHyp = new Cesium.Cartesian3((low.x + high.x) / 2, (low.y + high.y) / 2, (low.z + high.z) / 2);\r\n const mV = Cesium.Cartographic.fromCartesian(midV);\r\n const mH = Cesium.Cartographic.fromCartesian(midH);\r\n const mHyp = Cesium.Cartographic.fromCartesian(midHyp);\r\n const cLow = Cesium.Cartographic.fromCartesian(low);\r\n const cHigh = Cesium.Cartographic.fromCartesian(high);\r\n const idV = 'measure_triangle_seg_v';\r\n const idH = 'measure_triangle_seg_h';\r\n const idHyp = 'measure_triangle_seg_hyp';\r\n const idAngA = 'measure_triangle_angle_a';\r\n const idAngB = 'measure_triangle_angle_b';\r\n if (this.segmentLabelIds.length === 0) {\r\n this.segmentLabelIds = [idV, idH, idHyp];\r\n }\r\n if (this.angleLabelIds.length === 0) {\r\n this.angleLabelIds = [idAngA, idAngB];\r\n }\r\n this.htmlLabelPool.add({ text: `${lenV.toFixed(2)} m` }, { id: idV, lon: Cesium.Math.toDegrees(mV.longitude), lat: Cesium.Math.toDegrees(mV.latitude), height: mV.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${lenH.toFixed(2)} m` }, { id: idH, lon: Cesium.Math.toDegrees(mH.longitude), lat: Cesium.Math.toDegrees(mH.latitude), height: mH.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${lenHyp.toFixed(2)} m` }, { id: idHyp, lon: Cesium.Math.toDegrees(mHyp.longitude), lat: Cesium.Math.toDegrees(mHyp.latitude), height: mHyp.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${(angleA * 180 / Math.PI).toFixed(2)}°` }, { id: idAngA, lon: Cesium.Math.toDegrees(cLow.longitude), lat: Cesium.Math.toDegrees(cLow.latitude), height: cLow.height || 0, theme: 'measure-triangle-angle', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${(angleB * 180 / Math.PI).toFixed(2)}°` }, { id: idAngB, lon: Cesium.Math.toDegrees(cHigh.longitude), lat: Cesium.Math.toDegrees(cHigh.latitude), height: cHigh.height || 0, theme: 'measure-triangle-angle', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n const ratio = Math.max(0.01, Math.min(0.5, options.angleMarkerRatio ?? 0.2));\r\n const markerLen = Math.min(lenV, lenH) * ratio;\r\n if (lenV > 0.001 && lenH > 0.001) {\r\n const dirV = Cesium.Cartesian3.normalize(\r\n Cesium.Cartesian3.subtract(low, third, new Cesium.Cartesian3()),\r\n new Cesium.Cartesian3(),\r\n );\r\n const dirH = Cesium.Cartesian3.normalize(\r\n Cesium.Cartesian3.subtract(high, third, new Cesium.Cartesian3()),\r\n new Cesium.Cartesian3(),\r\n );\r\n const pOffV = new Cesium.Cartesian3(\r\n third.x + dirV.x * markerLen,\r\n third.y + dirV.y * markerLen,\r\n third.z + dirV.z * markerLen,\r\n );\r\n const pOffH = new Cesium.Cartesian3(\r\n third.x + dirH.x * markerLen,\r\n third.y + dirH.y * markerLen,\r\n third.z + dirH.z * markerLen,\r\n );\r\n const pCorner = new Cesium.Cartesian3(\r\n third.x + dirV.x * markerLen + dirH.x * markerLen,\r\n third.y + dirV.y * markerLen + dirH.y * markerLen,\r\n third.z + dirV.z * markerLen + dirH.z * markerLen,\r\n );\r\n this.previewMarkerP1 = pOffV;\r\n this.previewMarkerP2 = pOffH;\r\n this.previewMarkerCorner = pCorner;\r\n if (!this.previewAngleMarkerEntities.length) {\r\n const rightMarkerSeg1 = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewMarkerP1 || !this.previewMarkerCorner) return [];\r\n return [this.previewMarkerP1, this.previewMarkerCorner];\r\n }, false),\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n const rightMarkerSeg2 = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewMarkerP2 || !this.previewMarkerCorner) return [];\r\n return [this.previewMarkerP2, this.previewMarkerCorner];\r\n }, false),\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n this.previewAngleMarkerEntities.push(rightMarkerSeg1, rightMarkerSeg2);\r\n }\r\n }\r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n this.segmentEntities.forEach((e) => this.viewer.entities.remove(e));\r\n this.segmentEntities = [];\r\n this.angleMarkerEntities.forEach((e) => this.viewer.entities.remove(e));\r\n this.angleMarkerEntities = [];\r\n this.pointEntities.forEach((e) => this.viewer.entities.remove(e));\r\n this.pointEntities = [];\r\n this.previewSegmentEntities.forEach((e) => this.viewer.entities.remove(e));\r\n this.previewSegmentEntities = [];\r\n this.previewAngleMarkerEntities.forEach((e) => this.viewer.entities.remove(e));\r\n this.previewAngleMarkerEntities = [];\r\n if (this.previewPointEntity) {\r\n this.viewer.entities.remove(this.previewPointEntity);\r\n this.previewPointEntity = null;\r\n }\r\n if (this.htmlLabelPool && this.htmlLabelId) {\r\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\r\n this.htmlLabelId = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n if (this.segmentLabelIds.length && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice());\r\n }\r\n if (this.angleLabelIds.length && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds(this.angleLabelIds.slice());\r\n }\r\n this.segmentLabelIds = [];\r\n this.angleLabelIds = [];\r\n this.positions = [];\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const lineColor = opts.lineColor || opts.color || Cesium.Color.YELLOW;\r\n const dashColor = (opts.dashLineColor || opts.lineColor || opts.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n const width = opts.width || 3;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (posList.length < 2) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-triangle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-triangle-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-triangle-angle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n const c1 = Cesium.Cartographic.fromCartesian(posList[0]);\r\n const c2 = Cesium.Cartographic.fromCartesian(posList[1]);\r\n const h1 = c1.height || 0;\r\n const h2 = c2.height || 0;\r\n const low = h1 <= h2 ? posList[0] : posList[1];\r\n const high = h1 > h2 ? posList[0] : posList[1];\r\n const pLow = viewer.entities.add({ position: low, point: { pixelSize: 8, color: opts.pointColor || opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n const pHigh = viewer.entities.add({ position: high, point: { pixelSize: 8, color: opts.pointColor || opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n this.pointEntities.push(pLow, pHigh);\r\n const cl = Cesium.Cartographic.fromCartesian(low);\r\n const maxH = Math.max(h1, h2);\r\n const third = Cesium.Cartesian3.fromDegrees(\r\n Cesium.Math.toDegrees(cl.longitude),\r\n Cesium.Math.toDegrees(cl.latitude),\r\n maxH,\r\n );\r\n const vertical = viewer.entities.add({\r\n polyline: { positions: [low, third], width, material: lineColor, depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }) },\r\n });\r\n const horizontal = viewer.entities.add({\r\n polyline: { positions: [third, high], width, material: lineColor, depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }) },\r\n });\r\n const hypotenuse = viewer.entities.add({\r\n polyline: { positions: [low, high], width, material: lineColor, depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }) },\r\n });\r\n this.segmentEntities.push(vertical, horizontal, hypotenuse);\r\n const lenV = Cesium.Cartesian3.distance(low, third);\r\n const lenH = Cesium.Cartesian3.distance(third, high);\r\n const lenHyp = Cesium.Cartesian3.distance(low, high);\r\n const midV = new Cesium.Cartesian3((low.x + third.x) / 2, (low.y + third.y) / 2, (low.z + third.z) / 2);\r\n const midH = new Cesium.Cartesian3((third.x + high.x) / 2, (third.y + high.y) / 2, (third.z + high.z) / 2);\r\n const midHyp = new Cesium.Cartesian3((low.x + high.x) / 2, (low.y + high.y) / 2, (low.z + high.z) / 2);\r\n const mV = Cesium.Cartographic.fromCartesian(midV);\r\n const mH = Cesium.Cartographic.fromCartesian(midH);\r\n const mHyp = Cesium.Cartographic.fromCartesian(midHyp);\r\n const idV = record.id + '_tri_v';\r\n const idH = record.id + '_tri_h';\r\n const idHyp = record.id + '_tri_hyp';\r\n this.segmentLabelIds = [idV, idH, idHyp];\r\n this.htmlLabelPool.add({ text: `${lenV.toFixed(2)} m` }, { id: idV, lon: Cesium.Math.toDegrees(mV.longitude), lat: Cesium.Math.toDegrees(mV.latitude), height: mV.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${lenH.toFixed(2)} m` }, { id: idH, lon: Cesium.Math.toDegrees(mH.longitude), lat: Cesium.Math.toDegrees(mH.latitude), height: mH.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${lenHyp.toFixed(2)} m` }, { id: idHyp, lon: Cesium.Math.toDegrees(mHyp.longitude), lat: Cesium.Math.toDegrees(mHyp.latitude), height: mHyp.height || 0, theme: 'measure-triangle-seg', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n const vLowToHigh = Cesium.Cartesian3.subtract(high, low, new Cesium.Cartesian3());\r\n const vLowToThird = Cesium.Cartesian3.subtract(third, low, new Cesium.Cartesian3());\r\n const vHighToThird = Cesium.Cartesian3.subtract(third, high, new Cesium.Cartesian3());\r\n const vHighToLow = Cesium.Cartesian3.subtract(low, high, new Cesium.Cartesian3());\r\n const dotA = Cesium.Cartesian3.dot(vLowToHigh, vLowToThird);\r\n const magA = Math.sqrt(Cesium.Cartesian3.dot(vLowToHigh, vLowToHigh)) * Math.sqrt(Cesium.Cartesian3.dot(vLowToThird, vLowToThird));\r\n const dotB = Cesium.Cartesian3.dot(vHighToThird, vHighToLow);\r\n const magB = Math.sqrt(Cesium.Cartesian3.dot(vHighToThird, vHighToThird)) * Math.sqrt(Cesium.Cartesian3.dot(vHighToLow, vHighToLow));\r\n const angleA = Math.acos(Math.min(Math.max(dotA / (magA || 1), -1), 1));\r\n const angleB = Math.acos(Math.min(Math.max(dotB / (magB || 1), -1), 1));\r\n const cLow = Cesium.Cartographic.fromCartesian(low);\r\n const cHigh = Cesium.Cartographic.fromCartesian(high);\r\n const t = opts.labelText || { angle: '角度' };\r\n const idAngA = record.id + '_tri_angA';\r\n const idAngB = record.id + '_tri_angB';\r\n this.angleLabelIds = [idAngA, idAngB];\r\n this.htmlLabelPool.add({ text: `${t.angle}:${(angleA * 180 / Math.PI).toFixed(2)}°` }, { id: idAngA, lon: Cesium.Math.toDegrees(cLow.longitude), lat: Cesium.Math.toDegrees(cLow.latitude), height: cLow.height || 0, theme: 'measure-triangle-angle', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n this.htmlLabelPool.add({ text: `${t.angle}:${(angleB * 180 / Math.PI).toFixed(2)}°` }, { id: idAngB, lon: Cesium.Math.toDegrees(cHigh.longitude), lat: Cesium.Math.toDegrees(cHigh.latitude), height: cHigh.height || 0, theme: 'measure-triangle-angle', show: true, style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' } });\r\n const ratio = Math.max(0.01, Math.min(0.5, opts.angleMarkerRatio ?? 0.2));\r\n const markerLen = Math.min(lenV, lenH) * ratio;\r\n if (lenV > 0.001 && lenH > 0.001) {\r\n const dirV = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(low, third, new Cesium.Cartesian3()), new Cesium.Cartesian3());\r\n const dirH = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(high, third, new Cesium.Cartesian3()), new Cesium.Cartesian3());\r\n const pOffV = new Cesium.Cartesian3(third.x + dirV.x * markerLen, third.y + dirV.y * markerLen, third.z + dirV.z * markerLen);\r\n const pOffH = new Cesium.Cartesian3(third.x + dirH.x * markerLen, third.y + dirH.y * markerLen, third.z + dirH.z * markerLen);\r\n const pCorner = new Cesium.Cartesian3(third.x + dirV.x * markerLen + dirH.x * markerLen, third.y + dirV.y * markerLen + dirH.y * markerLen, third.z + dirV.z * markerLen + dirH.z * markerLen);\r\n const rightMarkerSeg1 = viewer.entities.add({ polyline: { positions: [pOffV, pCorner], width, material: lineColor, depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }) } });\r\n const rightMarkerSeg2 = viewer.entities.add({ polyline: { positions: [pOffH, pCorner], width, material: lineColor, depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }) } });\r\n this.angleMarkerEntities.push(rightMarkerSeg1, rightMarkerSeg2);\r\n }\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class SpaceMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private entity: any = null;\r\n private labelEntity: any = null;\r\n private positions: any[] = [];\r\n private tempPoints: any[] = [];\r\n private htmlLabelPool: any = null;\r\n private htmlLabelId: string | null = null;\r\n private previewEntity: any = null;\r\n private previewPos: any = null;\r\n private previewLabelId: string | null = null;\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-space', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((movement: any) => {\r\n const pos = viewer.scene.pickPosition(movement.position);\r\n if (!pos) return;\r\n this.positions.push(pos);\r\n const point = viewer.entities.add({\r\n position: pos,\r\n point: {\r\n pixelSize: 8,\r\n color: options.pointColor || options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.tempPoints.push(point);\r\n if (this.positions.length === 2) {\r\n this.stop();\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n const p1 = this.positions[0];\r\n const p2 = this.positions[1];\r\n const solidColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor = (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n this.entity = viewer.entities.add({\r\n polyline: {\r\n positions: [p1, p2],\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n const total = Cesium.Cartesian3.distance(p1, p2);\r\n const last = p2;\r\n const lc = Cesium.Cartographic.fromCartesian(last);\r\n const id = this.htmlLabelId || `measure_space_${Date.now()}`;\r\n this.htmlLabelId = id;\r\n this.htmlLabelPool.add(\r\n { text: `${total.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(lc.longitude),\r\n lat: Cesium.Math.toDegrees(lc.latitude),\r\n height: lc.height || 0,\r\n theme: 'measure-space',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n },\r\n );\r\n const result = {\r\n entity: this.entity,\r\n label: this.labelEntity,\r\n positions: this.positions,\r\n distance: total,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n if (this.positions.length !== 1) return;\r\n const pos = viewer.scene.pickPosition(movement.endPosition);\r\n if (!pos) return;\r\n this.previewPos = pos;\r\n const p1 = this.positions[0];\r\n const d = Cesium.Cartesian3.distance(p1, pos);\r\n const mid = new Cesium.Cartesian3(\r\n (p1.x + pos.x) / 2,\r\n (p1.y + pos.y) / 2,\r\n (p1.z + pos.z) / 2,\r\n );\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const pid = this.previewLabelId || 'measure_space_preview';\r\n this.previewLabelId = pid;\r\n this.htmlLabelPool.add(\r\n { text: `${d.toFixed(2)} m` },\r\n {\r\n id: pid,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-space',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n },\r\n );\r\n const solidColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor = (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n if (!this.previewEntity) {\r\n this.previewEntity = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewPos || !this.positions.length) return [];\r\n const first = this.positions[0];\r\n return [first, this.previewPos];\r\n }, false),\r\n width: options.width || 3,\r\n material: solidColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n }\r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n \r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n if (this.entity) {\r\n this.viewer.entities.remove(this.entity);\r\n this.entity = null;\r\n }\r\n if (this.labelEntity) {\r\n this.viewer.entities.remove(this.labelEntity);\r\n this.labelEntity = null;\r\n }\r\n if (this.htmlLabelPool && this.htmlLabelId) {\r\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\r\n this.htmlLabelId = null;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n this.tempPoints.forEach((p) => this.viewer.entities.remove(p));\r\n this.tempPoints = [];\r\n this.positions = [];\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const lineColor = opts.lineColor || opts.color || Cesium.Color.YELLOW;\r\n const dashColor = (opts.dashLineColor || opts.lineColor || opts.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n const width = opts.width || 3;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (!posList.length) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-space', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n if (posList.length >= 1) {\r\n const p0 = viewer.entities.add({ position: posList[0], point: { pixelSize: 8, color: opts.pointColor || opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n this.tempPoints.push(p0);\r\n }\r\n if (posList.length >= 2) {\r\n const p1 = viewer.entities.add({ position: posList[1], point: { pixelSize: 8, color: opts.pointColor || opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n this.tempPoints.push(p1);\r\n this.entity = viewer.entities.add({\r\n polyline: {\r\n positions: [posList[0], posList[1]],\r\n width,\r\n material: lineColor,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }),\r\n },\r\n });\r\n const total = Cesium.Cartesian3.distance(posList[0], posList[1]);\r\n const lc = Cesium.Cartographic.fromCartesian(posList[1]);\r\n const id = record.id + '_label';\r\n this.htmlLabelId = id;\r\n this.htmlLabelPool.add({ text: `${total.toFixed(2)} m` }, {\r\n id,\r\n lon: Cesium.Math.toDegrees(lc.longitude),\r\n lat: Cesium.Math.toDegrees(lc.latitude),\r\n height: lc.height || 0,\r\n theme: 'measure-space',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n });\r\n }\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class AreaMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private entity: any = null;\r\n private labelEntity: any = null;\r\n private positions: any[] = [];\r\n private tempPoints: any[] = [];\r\n private primitive: any = null;\r\n private previewEntity: any = null;\r\n private previewPos: any = null;\r\n private edgeEntities: any[] = [];\r\n private pointEntities: any[] = [];\r\n private previewEdgeEntity: any = null;\r\n private previewPointEntities: any[] = [];\r\n private htmlLabelPool: any = null;\r\n private htmlLabelId: string | null = null;\r\n private previewLabelId: string | null = null;\r\n private segmentLabelIds: string[] = [];\r\n private angleLabelIds: string[] = [];\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-area', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-area-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-area-angle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((movement: any) => {\r\n const pos = viewer.scene.pickPosition(movement.position);\r\n if (!pos) return;\r\n this.positions.push(pos);\r\n const point = viewer.entities.add({\r\n position: pos,\r\n point: {\r\n pixelSize: 8,\r\n color: options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.tempPoints.push(point);\r\n if (this.primitive) {\r\n viewer.scene.primitives.remove(this.primitive);\r\n this.primitive = null;\r\n }\r\n const hierarchy = new Cesium.PolygonHierarchy(this.positions.slice());\r\n const geom = new Cesium.PolygonGeometry({\r\n polygonHierarchy: hierarchy,\r\n vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT,\r\n perPositionHeight: true,\r\n arcType: Cesium.ArcType.NONE,\r\n });\r\n const instance = new Cesium.GeometryInstance({ geometry: geom });\r\n const color = options.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n const occludedColor = (options.color && options.color.withAlpha)\r\n ? options.color.withAlpha(0.25)\r\n : Cesium.Color.RED.withAlpha(0.4);\r\n this.primitive = new Cesium.Primitive({\r\n geometryInstances: instance,\r\n appearance: new Cesium.MaterialAppearance({\r\n material: Cesium.Material.fromType('Color', { color }),\r\n translucent: true,\r\n closed: true,\r\n }),\r\n depthFailAppearance: new Cesium.MaterialAppearance({\r\n material: Cesium.Material.fromType('Color', { color: occludedColor }),\r\n translucent: true,\r\n closed: true,\r\n }),\r\n });\r\n viewer.scene.primitives.add(this.primitive);\r\n if (this.positions.length >= 2) {\r\n if (this.edgeEntities.length) {\r\n for (const e of this.edgeEntities) {\r\n try {\r\n viewer.entities.remove(e);\r\n } catch {}\r\n }\r\n this.edgeEntities = [];\r\n }\r\n const lineColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor =\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED;\r\n const polylinePositions = this.positions.concat([this.positions[0]]);\r\n const lineEntity = viewer.entities.add({\r\n polyline: {\r\n positions: polylinePositions,\r\n width: options.width || 2,\r\n material: lineColor,\r\n clampToGround: false,\r\n arcType: Cesium.ArcType.NONE,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n this.edgeEntities.push(lineEntity);\r\n }\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n if (this.positions.length === 0) return;\r\n const pos = viewer.scene.pickPosition(movement.endPosition);\r\n if (!pos) return;\r\n this.previewPos = pos;\r\n const pts = this.positions.concat([pos]);\r\n const center = new Cesium.Cartesian3(\r\n pts.reduce((s: number, p: any) => s + p.x, 0) / pts.length,\r\n pts.reduce((s: number, p: any) => s + p.y, 0) / pts.length,\r\n pts.reduce((s: number, p: any) => s + p.z, 0) / pts.length,\r\n );\r\n const plane = new Cesium.EllipsoidTangentPlane(center, Cesium.Ellipsoid.WGS84);\r\n const points2D = plane.projectPointsOntoPlane(pts);\r\n let area2D = 0;\r\n for (let i = 0; i < points2D.length; i++) {\r\n const j = (i + 1) % points2D.length;\r\n area2D += points2D[i].x * points2D[j].y - points2D[j].x * points2D[i].y;\r\n }\r\n area2D = Math.abs(area2D) / 2;\r\n const cc = Cesium.Cartographic.fromCartesian(center);\r\n const pid = this.previewLabelId || 'measure_area_preview';\r\n this.previewLabelId = pid;\r\n const t = options.labelText || { area: '面积' };\r\n this.htmlLabelPool.add(\r\n { text: `${t.area}:${area2D.toFixed(2)} m²` },\r\n {\r\n id: pid,\r\n lon: Cesium.Math.toDegrees(cc.longitude),\r\n lat: Cesium.Math.toDegrees(cc.latitude),\r\n height: cc.height || 0,\r\n theme: 'measure-area',\r\n show: true,\r\n },\r\n );\r\n if (!this.previewEntity) {\r\n const color = options.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n this.previewEntity = viewer.entities.add({\r\n polygon: {\r\n hierarchy: new Cesium.CallbackProperty(() => {\r\n if (!this.previewPos || !this.positions.length) return undefined;\r\n const all = this.positions.concat([this.previewPos]);\r\n return new Cesium.PolygonHierarchy(all);\r\n }, false),\r\n material: color,\r\n perPositionHeight: true,\r\n arcType: Cesium.ArcType.NONE,\r\n },\r\n });\r\n const lineColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor =\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED;\r\n this.previewEdgeEntity = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewPos || !this.positions.length) return [];\r\n const all = this.positions.concat([this.previewPos, this.positions[0]]);\r\n return all;\r\n }, false),\r\n width: options.width || 2,\r\n material: lineColor,\r\n clampToGround: false,\r\n arcType: Cesium.ArcType.NONE,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n const pointColor = options.pointColor || options.color || Cesium.Color.YELLOW;\r\n const hoverPoint = viewer.entities.add({\r\n position: new Cesium.CallbackProperty(() => this.previewPos || this.positions[this.positions.length - 1], false),\r\n point: {\r\n pixelSize: 8,\r\n color: pointColor,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.previewPointEntities.push(hoverPoint);\r\n }\r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n this.handler.setInputAction(() => {\r\n if (this.positions.length < 3) {\r\n this.stop();\r\n return;\r\n }\r\n if (this.positions.length >= 3) {\r\n this.positions.pop();\r\n const lastPoint = this.tempPoints.pop();\r\n if (lastPoint) this.viewer.entities.remove(lastPoint);\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewEdgeEntity) {\r\n this.viewer.entities.remove(this.previewEdgeEntity);\r\n this.previewEdgeEntity = null;\r\n }\r\n if (this.previewPointEntities.length) {\r\n for (const p of this.previewPointEntities) {\r\n try {\r\n this.viewer.entities.remove(p);\r\n } catch {}\r\n }\r\n this.previewPointEntities = [];\r\n }\r\n this.previewPos = null;\r\n this.stop();\r\n const center = new Cesium.Cartesian3(\r\n this.positions.reduce((s: number, p: any) => s + p.x, 0) / this.positions.length,\r\n this.positions.reduce((s: number, p: any) => s + p.y, 0) / this.positions.length,\r\n this.positions.reduce((s: number, p: any) => s + p.z, 0) / this.positions.length,\r\n );\r\n const plane = new Cesium.EllipsoidTangentPlane(center, Cesium.Ellipsoid.WGS84);\r\n const points2D = plane.projectPointsOntoPlane(this.positions);\r\n let area2D = 0;\r\n for (let i = 0; i < points2D.length; i++) {\r\n const j = (i + 1) % points2D.length;\r\n area2D += points2D[i].x * points2D[j].y - points2D[j].x * points2D[i].y;\r\n }\r\n area2D = Math.abs(area2D) / 2;\r\n const cc = Cesium.Cartographic.fromCartesian(center);\r\n const id = this.htmlLabelId || `measure_area_${Date.now()}`;\r\n this.htmlLabelId = id;\r\n const t = options.labelText || { area: '面积', side: '边长', angle: '角度' };\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n this.htmlLabelPool.add(\r\n { text: `${t.area}:${area2D.toFixed(2)} m²` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(cc.longitude),\r\n lat: Cesium.Math.toDegrees(cc.latitude),\r\n height: cc.height || 0,\r\n theme: 'measure-area',\r\n show: true,\r\n },\r\n );\r\n this.labelEntity = this.htmlLabelId;\r\n for (let i = 0; i < this.positions.length; i++) {\r\n const j = (i + 1) % this.positions.length;\r\n const p1 = this.positions[i];\r\n const p2 = this.positions[j];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n const mid = new Cesium.Cartesian3((p1.x + p2.x) / 2, (p1.y + p2.y) / 2, (p1.z + p2.z) / 2);\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const sid = `measure_area_seg_${Date.now()}_${i}`;\r\n this.segmentLabelIds.push(sid);\r\n this.htmlLabelPool.add(\r\n { text: `${t.side}:${d.toFixed(2)} m` },\r\n {\r\n id: sid,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-area-seg',\r\n show: true,\r\n },\r\n );\r\n }\r\n const p2d = points2D;\r\n for (let i = 0; i < p2d.length; i++) {\r\n const prev = p2d[(i - 1 + p2d.length) % p2d.length];\r\n const curr = p2d[i];\r\n const next = p2d[(i + 1) % p2d.length];\r\n const v1x = prev.x - curr.x;\r\n const v1y = prev.y - curr.y;\r\n const v2x = next.x - curr.x;\r\n const v2y = next.y - curr.y;\r\n const len1 = Math.sqrt(v1x * v1x + v1y * v1y);\r\n const len2 = Math.sqrt(v2x * v2x + v2y * v2y);\r\n if (!len1 || !len2) continue;\r\n const dot = (v1x / len1) * (v2x / len2) + (v1y / len1) * (v2y / len2);\r\n const ang = Math.acos(Math.min(1, Math.max(-1, dot))) * (180 / Math.PI);\r\n const pc = Cesium.Cartographic.fromCartesian(this.positions[i]);\r\n const aid = `measure_area_angle_${Date.now()}_${i}`;\r\n this.angleLabelIds.push(aid);\r\n this.htmlLabelPool.add(\r\n { text: `${t.angle}:${ang.toFixed(2)} °` },\r\n {\r\n id: aid,\r\n lon: Cesium.Math.toDegrees(pc.longitude),\r\n lat: Cesium.Math.toDegrees(pc.latitude),\r\n height: pc.height || 0,\r\n theme: 'measure-area-angle',\r\n show: true,\r\n },\r\n );\r\n }\r\n const result = {\r\n entity: this.primitive,\r\n label: this.labelEntity,\r\n positions: this.positions,\r\n area: area2D,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n if (this.entity) {\r\n this.viewer.entities.remove(this.entity);\r\n this.entity = null;\r\n }\r\n if (this.primitive) {\r\n this.viewer.scene.primitives.remove(this.primitive);\r\n this.primitive = null;\r\n }\r\n if (this.edgeEntities.length) {\r\n for (const e of this.edgeEntities) {\r\n try {\r\n this.viewer.entities.remove(e);\r\n } catch {}\r\n }\r\n this.edgeEntities = [];\r\n }\r\n if (this.pointEntities.length) {\r\n for (const p of this.pointEntities) {\r\n try {\r\n this.viewer.entities.remove(p);\r\n } catch {}\r\n }\r\n this.pointEntities = [];\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n this.previewPos = null;\r\n }\r\n if (this.previewEdgeEntity) {\r\n this.viewer.entities.remove(this.previewEdgeEntity);\r\n this.previewEdgeEntity = null;\r\n }\r\n if (this.previewPointEntities.length) {\r\n for (const p of this.previewPointEntities) {\r\n try {\r\n this.viewer.entities.remove(p);\r\n } catch {}\r\n }\r\n this.previewPointEntities = [];\r\n }\r\n if (this.labelEntity) {\r\n this.viewer.entities.remove(this.labelEntity);\r\n this.labelEntity = null;\r\n }\r\n if (this.htmlLabelPool && this.htmlLabelId) {\r\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\r\n this.htmlLabelId = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n if (this.segmentLabelIds.length && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice());\r\n }\r\n if (this.angleLabelIds.length && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds(this.angleLabelIds.slice());\r\n }\r\n this.segmentLabelIds = [];\r\n this.angleLabelIds = [];\r\n this.tempPoints.forEach((p) => this.viewer.entities.remove(p));\r\n this.tempPoints = [];\r\n this.positions = [];\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (posList.length < 3) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-area', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-area-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-area-angle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n for (const pos of posList) {\r\n const point = viewer.entities.add({ position: pos, point: { pixelSize: 8, color: opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n this.tempPoints.push(point);\r\n }\r\n const center = new Cesium.Cartesian3(\r\n posList.reduce((s: number, p: any) => s + p.x, 0) / posList.length,\r\n posList.reduce((s: number, p: any) => s + p.y, 0) / posList.length,\r\n posList.reduce((s: number, p: any) => s + p.z, 0) / posList.length,\r\n );\r\n const plane = new Cesium.EllipsoidTangentPlane(center, Cesium.Ellipsoid.WGS84);\r\n const points2D = plane.projectPointsOntoPlane(posList);\r\n let area2D = 0;\r\n for (let i = 0; i < points2D.length; i++) {\r\n const j = (i + 1) % points2D.length;\r\n area2D += points2D[i].x * points2D[j].y - points2D[j].x * points2D[i].y;\r\n }\r\n area2D = Math.abs(area2D) / 2;\r\n const cc = Cesium.Cartographic.fromCartesian(center);\r\n const id = record.id + '_area';\r\n this.htmlLabelId = id;\r\n const t = opts.labelText || { area: '面积', side: '边长', angle: '角度' };\r\n this.htmlLabelPool.add({ text: `${t.area}:${area2D.toFixed(2)} m²` }, {\r\n id,\r\n lon: Cesium.Math.toDegrees(cc.longitude),\r\n lat: Cesium.Math.toDegrees(cc.latitude),\r\n height: cc.height || 0,\r\n theme: 'measure-area',\r\n show: true,\r\n });\r\n const hierarchy = new Cesium.PolygonHierarchy(posList);\r\n const geom = new Cesium.PolygonGeometry({ polygonHierarchy: hierarchy, vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT, perPositionHeight: true });\r\n const instance = new Cesium.GeometryInstance({ geometry: geom });\r\n const color = opts.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n const occludedColor = (opts.color && opts.color.withAlpha) ? opts.color.withAlpha(0.25) : Cesium.Color.RED.withAlpha(0.4);\r\n const primitive = new Cesium.Primitive({\r\n geometryInstances: instance,\r\n appearance: new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color }), translucent: true, closed: true }),\r\n depthFailAppearance: new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color: occludedColor }), translucent: true, closed: true }),\r\n });\r\n viewer.scene.primitives.add(primitive);\r\n this.primitive = primitive;\r\n for (let i = 0; i < posList.length; i++) {\r\n const j = (i + 1) % posList.length;\r\n const p1 = posList[i];\r\n const p2 = posList[j];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n const mid = new Cesium.Cartesian3((p1.x + p2.x) / 2, (p1.y + p2.y) / 2, (p1.z + p2.z) / 2);\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const sid = record.id + `_area_seg_${i}`;\r\n this.segmentLabelIds.push(sid);\r\n this.htmlLabelPool.add({ text: `${t.side}:${d.toFixed(2)} m` }, { id: sid, lon: Cesium.Math.toDegrees(mc.longitude), lat: Cesium.Math.toDegrees(mc.latitude), height: mc.height || 0, theme: 'measure-area-seg', show: true });\r\n }\r\n const p2d = points2D;\r\n for (let i = 0; i < p2d.length; i++) {\r\n const prev = p2d[(i - 1 + p2d.length) % p2d.length];\r\n const curr = p2d[i];\r\n const next = p2d[(i + 1) % p2d.length];\r\n const v1x = prev.x - curr.x;\r\n const v1y = prev.y - curr.y;\r\n const v2x = next.x - curr.x;\r\n const v2y = next.y - curr.y;\r\n const len1 = Math.sqrt(v1x * v1x + v1y * v1y);\r\n const len2 = Math.sqrt(v2x * v2x + v2y * v2y);\r\n if (!len1 || !len2) continue;\r\n const dot = (v1x / len1) * (v2x / len2) + (v1y / len1) * (v2y / len2);\r\n const ang = Math.acos(Math.min(1, Math.max(-1, dot))) * (180 / Math.PI);\r\n const pc = Cesium.Cartographic.fromCartesian(posList[i]);\r\n const aid = record.id + `_area_angle_${i}`;\r\n this.angleLabelIds.push(aid);\r\n this.htmlLabelPool.add({ text: `${t.angle}:${ang.toFixed(2)} °` }, { id: aid, lon: Cesium.Math.toDegrees(pc.longitude), lat: Cesium.Math.toDegrees(pc.latitude), height: pc.height || 0, theme: 'measure-area-angle', show: true });\r\n }\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class CircleMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private entity: any = null;\r\n private positions: any[] = [];\r\n private currentRadius: number = 0;\r\n private labelEntity: any = null;\r\n private previewLabel: any = null;\r\n private ellipsePrimitive: any = null;\r\n private previewEntity: any = null;\r\n private isPrimitive: boolean = false;\r\n private htmlLabelPool: any = null;\r\n private htmlLabelId: string | null = null;\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-circle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n const text = ctx?.data?.text || '';\r\n el.innerHTML = String(text);\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((click: any) => {\r\n const position = viewer.scene.pickPosition(click.position);\r\n if (!position) return;\r\n this.positions.push(position);\r\n if (this.positions.length === 2) {\r\n this.stop();\r\n const center = this.positions[0];\r\n const edge = this.positions[1];\r\n const radius = Cesium.Cartesian3.distance(center, edge);\r\n const area = Math.PI * radius * radius;\r\n const perimeter = 2 * Math.PI * radius;\r\n const t = options.labelText || { radius: '半径', area: '面积', circumference: '周长' };\r\n const centerLabelPos = center;\r\n if (!this.labelEntity) {\r\n this.labelEntity = viewer.entities.add({\r\n position: centerLabelPos,\r\n label: {\r\n text: `${t.radius}:${radius.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²\\n${t.circumference}:${perimeter.toFixed(2)} m`,\r\n font: '14px sans-serif',\r\n fillColor: Cesium.Color.WHITE,\r\n outlineColor: Cesium.Color.BLACK,\r\n outlineWidth: 2,\r\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\r\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\r\n pixelOffset: new Cesium.Cartesian2(0, -10),\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n eyeOffset: new Cesium.Cartesian3(0, 0, -1000),\r\n showBackground: true,\r\n backgroundColor: Cesium.Color.BLACK.withAlpha(0.6),\r\n show: false,\r\n },\r\n });\r\n } else {\r\n this.labelEntity.position = centerLabelPos;\r\n this.labelEntity.label.text = `${t.radius}:${radius.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²\\n${t.circumference}:${perimeter.toFixed(2)} m`;\r\n }\r\n if (this.previewEntity) {\r\n viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n const cartoCenter = Cesium.Cartographic.fromCartesian(center);\r\n const geom = new Cesium.EllipseGeometry({\r\n center,\r\n semiMajorAxis: radius,\r\n semiMinorAxis: radius,\r\n height: cartoCenter.height || 0,\r\n vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT,\r\n });\r\n const instance = new Cesium.GeometryInstance({ geometry: geom });\r\n const color = options.color || Cesium.Color.YELLOW.withAlpha(0.5);\r\n const occludedColor = (options.color && options.color.withAlpha)\r\n ? options.color.withAlpha(0.25)\r\n : Cesium.Color.RED.withAlpha(0.4);\r\n if (this.ellipsePrimitive) {\r\n viewer.scene.primitives.remove(this.ellipsePrimitive);\r\n this.ellipsePrimitive = null;\r\n }\r\n this.ellipsePrimitive = new Cesium.Primitive({\r\n geometryInstances: instance,\r\n appearance: new Cesium.MaterialAppearance({\r\n material: Cesium.Material.fromType('Color', { color }),\r\n translucent: true,\r\n closed: true,\r\n }),\r\n depthFailAppearance: new Cesium.MaterialAppearance({\r\n material: Cesium.Material.fromType('Color', { color: occludedColor }),\r\n translucent: true,\r\n closed: true,\r\n }),\r\n });\r\n viewer.scene.primitives.add(this.ellipsePrimitive);\r\n this.entity = this.ellipsePrimitive;\r\n this.isPrimitive = true;\r\n const c = Cesium.Cartographic.fromCartesian(center);\r\n const lng = Cesium.Math.toDegrees(c.longitude);\r\n const lat = Cesium.Math.toDegrees(c.latitude);\r\n const h = c.height || 0;\r\n const id = this.htmlLabelId || `measure_circle_${Date.now()}`;\r\n this.htmlLabelId = id;\r\n const text = `${t.radius}:${radius.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²\\n${t.circumference}:${perimeter.toFixed(2)} m`;\r\n this.htmlLabelPool.add({ text }, { id, lon: lng, lat, height: h, theme: 'measure-circle', show: true });\r\n const result = {\r\n entity: this.entity,\r\n label: this.labelEntity,\r\n positions: this.positions,\r\n radius,\r\n area,\r\n perimeter,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n if (this.positions.length !== 1) return;\r\n const center = this.positions[0];\r\n const ray = viewer.camera.getPickRay(movement.endPosition);\r\n const edge = viewer.scene.globe.pick(ray, viewer.scene);\r\n if (!edge) return;\r\n const radius = Cesium.Cartesian3.distance(center, edge);\r\n this.currentRadius = radius;\r\n const cartoCenter = Cesium.Cartographic.fromCartesian(center);\r\n const area = Math.PI * radius * radius;\r\n const perimeter = 2 * Math.PI * radius;\r\n const t = options.labelText || { radius: '半径', area: '面积', circumference: '周长' };\r\n const centerLabelPos = center;\r\n if (!this.labelEntity) {\r\n this.labelEntity = viewer.entities.add({\r\n position: centerLabelPos,\r\n label: {\r\n text: `${t.radius}:${radius.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²\\n${t.circumference}:${perimeter.toFixed(2)} m`,\r\n font: '14px sans-serif',\r\n fillColor: Cesium.Color.WHITE,\r\n outlineColor: Cesium.Color.BLACK,\r\n outlineWidth: 2,\r\n style: Cesium.LabelStyle.FILL_AND_OUTLINE,\r\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\r\n pixelOffset: new Cesium.Cartesian2(0, -10),\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n eyeOffset: new Cesium.Cartesian3(0, 0, -1000),\r\n showBackground: true,\r\n backgroundColor: Cesium.Color.BLACK.withAlpha(0.6),\r\n show: false,\r\n },\r\n });\r\n } else {\r\n this.labelEntity.position = centerLabelPos;\r\n this.labelEntity.label.text = `${t.radius}:${radius.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²\\n${t.circumference}:${perimeter.toFixed(2)} m`;\r\n }\r\n const c = Cesium.Cartographic.fromCartesian(center);\r\n const lng = Cesium.Math.toDegrees(c.longitude);\r\n const lat = Cesium.Math.toDegrees(c.latitude);\r\n const h = c.height || 0;\r\n const id = this.htmlLabelId || `measure_circle_${Date.now()}`;\r\n this.htmlLabelId = id;\r\n const text = `${t.radius}:${radius.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²\\n${t.circumference}:${perimeter.toFixed(2)} m`;\r\n this.htmlLabelPool.add({ text }, { id, lon: lng, lat, height: h, theme: 'measure-circle', show: true });\r\n if (!this.previewEntity) {\r\n const color = options.color || Cesium.Color.YELLOW.withAlpha(0.5);\r\n this.previewEntity = viewer.entities.add({\r\n position: center,\r\n ellipse: {\r\n semiMajorAxis: new Cesium.CallbackProperty(() => this.currentRadius, false),\r\n semiMinorAxis: new Cesium.CallbackProperty(() => this.currentRadius, false),\r\n height: cartoCenter.height || 0,\r\n material: color,\r\n },\r\n });\r\n }\r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n if (this.entity) {\r\n if (this.isPrimitive) {\r\n this.viewer.scene.primitives.remove(this.entity);\r\n } else {\r\n this.viewer.entities.remove(this.entity);\r\n }\r\n this.entity = null;\r\n this.isPrimitive = false;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.labelEntity) {\r\n this.viewer.entities.remove(this.labelEntity);\r\n this.labelEntity = null;\r\n }\r\n if (this.previewLabel) {\r\n this.viewer.entities.remove(this.previewLabel);\r\n this.previewLabel = null;\r\n }\r\n if (this.ellipsePrimitive) {\r\n this.viewer.scene.primitives.remove(this.ellipsePrimitive);\r\n this.ellipsePrimitive = null;\r\n }\r\n if (this.htmlLabelPool && this.htmlLabelId) {\r\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\r\n this.htmlLabelId = null;\r\n }\r\n this.positions = [];\r\n this.currentRadius = 0;\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (posList.length < 2) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-circle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n const text = ctx?.data?.text || '';\r\n el.innerHTML = String(text);\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n const center = posList[0];\r\n const edge = posList[1];\r\n const radius = Cesium.Cartesian3.distance(center, edge);\r\n const area = Math.PI * radius * radius;\r\n const perimeter = 2 * Math.PI * radius;\r\n const cartoCenter = Cesium.Cartographic.fromCartesian(center);\r\n const geom = new Cesium.EllipseGeometry({ center, semiMajorAxis: radius, semiMinorAxis: radius, height: cartoCenter.height || 0, vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT });\r\n const instance = new Cesium.GeometryInstance({ geometry: geom });\r\n const color = opts.color || Cesium.Color.YELLOW.withAlpha(0.5);\r\n const occludedColor = (opts.color && opts.color.withAlpha) ? opts.color.withAlpha(0.25) : Cesium.Color.RED.withAlpha(0.4);\r\n const primitive = new Cesium.Primitive({\r\n geometryInstances: instance,\r\n appearance: new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color }), translucent: true, closed: true }),\r\n depthFailAppearance: new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color: occludedColor }), translucent: true, closed: true }),\r\n });\r\n viewer.scene.primitives.add(primitive);\r\n this.ellipsePrimitive = primitive;\r\n this.entity = primitive;\r\n this.isPrimitive = true;\r\n const c = Cesium.Cartographic.fromCartesian(center);\r\n const id = record.id + '_circle';\r\n this.htmlLabelId = id;\r\n const t = opts.labelText || { radius: '半径', area: '面积', circumference: '周长' };\r\n const text = `${t.radius}:${radius.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²\\n${t.circumference}:${perimeter.toFixed(2)} m`;\r\n this.htmlLabelPool.add({ text }, { id, lon: Cesium.Math.toDegrees(c.longitude), lat: Cesium.Math.toDegrees(c.latitude), height: c.height || 0, theme: 'measure-circle', show: true });\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class PolylineDistanceMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private entity: any = null;\r\n private labelEntity: any = null;\r\n private positions: any[] = [];\r\n private tempPoints: any[] = [];\r\n private segmentLabels: any[] = [];\r\n private hoverPos: any = null;\r\n private previewPos: any = null;\r\n private previewLabel: any = null;\r\n private previewEntity: any = null;\r\n private htmlLabelPool: any = null;\r\n private totalLabelId: string | null = null;\r\n private segmentLabelIds: string[] = [];\r\n private previewLabelId: string | null = null;\r\n \r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-polyline-total', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-polyline-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((movement: any) => {\r\n const pos = viewer.scene.pickPosition(movement.position);\r\n if (!pos) return;\r\n this.positions.push(pos);\r\n const point = viewer.entities.add({\r\n position: pos,\r\n point: {\r\n pixelSize: 8,\r\n color: options.pointColor || options.color || Cesium.Color.YELLOW,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.tempPoints.push(point);\r\n if (!this.entity) {\r\n this.entity = viewer.entities.add({\r\n polyline: {\r\n positions: this.positions.slice(),\r\n width: options.width || 3,\r\n material: options.lineColor || options.color || Cesium.Color.YELLOW,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n } else {\r\n this.entity.polyline.positions = this.positions.slice();\r\n }\r\n if (this.positions.length >= 2) {\r\n const p1 = this.positions[this.positions.length - 2];\r\n const p2 = this.positions[this.positions.length - 1];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n const mid = new Cesium.Cartesian3(\r\n (p1.x + p2.x) / 2,\r\n (p1.y + p2.y) / 2,\r\n (p1.z + p2.z) / 2,\r\n );\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const id = `measure_polyline_seg_${this.segmentLabelIds.length}_${Date.now()}`;\r\n this.segmentLabelIds.push(id);\r\n this.htmlLabelPool.add(\r\n { text: `${d.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-polyline-seg',\r\n show: true,\r\n },\r\n );\r\n }\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction(() => {\r\n if (this.positions.length < 2) {\r\n this.stop();\r\n return;\r\n }\r\n this.stop();\r\n if (this.previewLabelId) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n if (this.hoverPos) {\r\n this.hoverPos = null;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.positions.length >= 2 && this.tempPoints.length >= 2) {\r\n const lastPoint = this.tempPoints[this.tempPoints.length - 1];\r\n this.viewer.entities.remove(lastPoint);\r\n this.tempPoints.pop();\r\n }\r\n if (this.segmentLabelIds.length >= 1) {\r\n const lastId = this.segmentLabelIds[this.segmentLabelIds.length - 1];\r\n if (lastId) {\r\n this.htmlLabelPool.removeByIds([lastId]);\r\n this.segmentLabelIds.pop();\r\n }\r\n }\r\n if (this.positions.length >= 2) {\r\n this.positions.pop();\r\n }\r\n let total = 0;\r\n for (let i = 1; i < this.positions.length; i++) {\r\n const p1 = this.positions[i - 1];\r\n const p2 = this.positions[i];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n total += d;\r\n }\r\n const last = this.positions[this.positions.length - 1];\r\n if (this.entity && this.entity.polyline) {\r\n this.entity.polyline.positions = this.positions;\r\n }\r\n const lc = Cesium.Cartographic.fromCartesian(last);\r\n const id = this.totalLabelId || `measure_polyline_total_${Date.now()}`;\r\n this.totalLabelId = id;\r\n this.htmlLabelPool.add(\r\n { text: `${total.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(lc.longitude),\r\n lat: Cesium.Math.toDegrees(lc.latitude),\r\n height: lc.height || 0,\r\n theme: 'measure-polyline-total',\r\n show: true,\r\n },\r\n );\r\n this.labelEntity = this.totalLabelId;\r\n const result = {\r\n entity: this.entity,\r\n label: this.labelEntity,\r\n segmentLabels: this.segmentLabelIds,\r\n positions: this.positions,\r\n distance: total,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n if (this.positions.length === 0) return;\r\n const pos = viewer.scene.pickPosition(movement.endPosition);\r\n if (!pos) return;\r\n this.hoverPos = pos;\r\n this.previewPos = pos;\r\n const p1 = this.positions[this.positions.length - 1];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(pos);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n const mid = new Cesium.Cartesian3(\r\n (p1.x + pos.x) / 2,\r\n (p1.y + pos.y) / 2,\r\n (p1.z + pos.z) / 2,\r\n );\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const id = this.previewLabelId || 'measure_polyline_preview';\r\n this.previewLabelId = id;\r\n this.htmlLabelPool.add(\r\n { text: `${d.toFixed(2)} m` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-polyline-seg',\r\n show: true,\r\n },\r\n );\r\n\r\n if (!this.previewEntity) {\r\n this.previewEntity = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.previewPos || !this.positions.length) return [];\r\n const last = this.positions[this.positions.length - 1];\r\n return [last, this.previewPos];\r\n }, false),\r\n width: options.width || 3,\r\n material: options.lineColor || options.color || Cesium.Color.YELLOW,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n }\r\n\r\n \r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n if (this.entity) {\r\n this.viewer.entities.remove(this.entity);\r\n this.entity = null;\r\n }\r\n if (this.totalLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.totalLabelId]);\r\n this.totalLabelId = null;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n this.hoverPos = null;\r\n if (this.segmentLabelIds.length && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice());\r\n }\r\n this.segmentLabelIds = [];\r\n this.tempPoints.forEach((p) => this.viewer.entities.remove(p));\r\n this.tempPoints = [];\r\n this.positions = [];\r\n }\r\n \r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const lineColor = opts.lineColor || opts.color || Cesium.Color.YELLOW;\r\n const dashColor = (opts.dashLineColor || opts.lineColor || opts.color || Cesium.Color.RED).withAlpha?.(0.9) || Cesium.Color.RED;\r\n const width = opts.width || 3;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (posList.length < 2) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-polyline-total', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-polyline-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n for (const pos of posList) {\r\n const point = viewer.entities.add({ position: pos, point: { pixelSize: 8, color: opts.pointColor || opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\r\n this.tempPoints.push(point);\r\n }\r\n this.entity = viewer.entities.add({ polyline: { positions: posList, width, material: lineColor, depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: dashColor, dashLength: 12, dashPattern: 255 }) } });\r\n let total = 0;\r\n for (let i = 1; i < posList.length; i++) {\r\n const c1 = Cesium.Cartographic.fromCartesian(posList[i - 1]);\r\n const c2 = Cesium.Cartographic.fromCartesian(posList[i]);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n total += geodesic.surfaceDistance;\r\n const p1 = posList[i - 1];\r\n const p2 = posList[i];\r\n const mid = new Cesium.Cartesian3((p1.x + p2.x) / 2, (p1.y + p2.y) / 2, (p1.z + p2.z) / 2);\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const sid = record.id + `_seg_${i - 1}`;\r\n this.segmentLabelIds.push(sid);\r\n this.htmlLabelPool.add({ text: `${geodesic.surfaceDistance.toFixed(2)} m` }, {\r\n id: sid,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-polyline-seg',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n });\r\n }\r\n const last = posList[posList.length - 1];\r\n const lc = Cesium.Cartographic.fromCartesian(last);\r\n const id = record.id + '_total';\r\n this.totalLabelId = id;\r\n this.htmlLabelPool.add({ text: `${total.toFixed(2)} m` }, {\r\n id,\r\n lon: Cesium.Math.toDegrees(lc.longitude),\r\n lat: Cesium.Math.toDegrees(lc.latitude),\r\n height: lc.height || 0,\r\n theme: 'measure-polyline-total',\r\n show: true,\r\n style: { pointerEvents: 'none', userSelect: 'none', cursor: 'default' },\r\n });\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\n\nexport default class TerrainHeightMeasure implements IMeasure {\n private Cesium: any;\n private viewer: any;\n private handler: any = null;\n private labelEntity: any = null;\n private htmlLabelPool: any = null;\n private htmlLabelId: string | null = null;\n private topPoint: any = null;\n private zeroPoint: any = null;\n private lineEntity: any = null;\n\n constructor(Cesium: any, viewer: any) {\n this.Cesium = Cesium;\n this.viewer = viewer;\n }\n\n start(options: MeasurementOptions) {\n this.clear();\n const Cesium = this.Cesium;\n const viewer = this.viewer;\n if (!this.htmlLabelPool) {\n const containerId = options.overlayContainerId || 'html-label-container';\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\n this.htmlLabelPool.registerTheme('measure-terrainHeight', {\n createElement: (el: HTMLDivElement, ctx: any) => {\n el.innerHTML = String(ctx?.data?.text || '');\n el.style.background = 'rgba(0,0,0,0.6)';\n el.style.color = '#fff';\n el.style.font = '14px sans-serif';\n el.style.padding = '4px 6px';\n el.style.borderRadius = '4px';\n el.style.whiteSpace = 'pre';\n },\n options: { offset: { x: 0, y: -10 } },\n });\n }\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\n this.handler.setInputAction((movement: any) => {\n const position = viewer.scene.pickPosition(movement.position);\n if (!position) return;\n const carto = Cesium.Cartographic.fromCartesian(position);\n const terrainHeight = viewer.scene.globe.getHeight(\n new Cesium.Cartographic(carto.longitude, carto.latitude, 0),\n ) || 0;\n const lng = Cesium.Math.toDegrees(carto.longitude);\n const lat = Cesium.Math.toDegrees(carto.latitude);\n const terrainPos = Cesium.Cartesian3.fromDegrees(lng, lat, terrainHeight);\n this.topPoint = viewer.entities.add({\n position,\n point: {\n pixelSize: 8,\n color: options.color || Cesium.Color.YELLOW,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n },\n });\n this.zeroPoint = viewer.entities.add({\n position: terrainPos,\n point: {\n pixelSize: 8,\n color: Cesium.Color.YELLOW,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n },\n });\n this.lineEntity = viewer.entities.add({\n polyline: {\n positions: [terrainPos, position],\n width: options.width || 3,\n material: options.color || Cesium.Color.YELLOW,\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\n color: Cesium.Color.RED,\n dashLength: 12,\n dashPattern: 255,\n }),\n },\n });\n const t = options.labelText || { height: '高差' };\n const heightDiff = (carto.height || 0) - terrainHeight;\n const labelText = `${t.height}:${heightDiff.toFixed(2)} m`;\n const id = this.htmlLabelId || `measure_terrain_${Date.now()}`;\n this.htmlLabelId = id;\n this.htmlLabelPool.add(\n { text: labelText },\n {\n id,\n lon: lng,\n lat: lat,\n height: carto.height || 0,\n theme: 'measure-terrainHeight',\n show: true,\n },\n );\n this.labelEntity = this.htmlLabelId;\n const result = {\n label: this.labelEntity,\n position,\n zeroPosition: terrainPos,\n line: this.lineEntity,\n terrainHeight,\n difference: heightDiff,\n clear: () => this.clear(),\n };\n options.onComplete?.(result);\n this.stop();\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\n }\n\n stop() {\n if (this.handler) {\n this.handler.destroy();\n this.handler = null;\n }\n }\n\n clear() {\n this.stop();\n if (this.lineEntity) {\n this.viewer.entities.remove(this.lineEntity);\n this.lineEntity = null;\n }\n if (this.topPoint) {\n this.viewer.entities.remove(this.topPoint);\n this.topPoint = null;\n }\n if (this.zeroPoint) {\n this.viewer.entities.remove(this.zeroPoint);\n this.zeroPoint = null;\n }\n if (this.htmlLabelId && this.htmlLabelPool) {\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\n this.htmlLabelId = null;\n }\n }\n\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\n const Cesium = this.Cesium;\n const viewer = this.viewer;\n const opts = (record.options || {}) as MeasurementOptions;\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\n if (posList.length < 1) {\n const data: any = record.data || {};\n const p = data.position;\n if (p) {\n if (Array.isArray(p) && p.length === 3) {\n posList.push(new Cesium.Cartesian3(p[0], p[1], p[2]));\n } else if (typeof p === 'object' && p && 'x' in p && 'y' in p && 'z' in p) {\n posList.push(new Cesium.Cartesian3(p.x, p.y, p.z));\n }\n }\n }\n if (posList.length < 1) return;\n if (!this.htmlLabelPool) {\n const containerId = opts.overlayContainerId || 'html-label-container';\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\n this.htmlLabelPool.registerTheme('measure-terrainHeight', {\n createElement: (el: HTMLDivElement, ctx: any) => {\n el.innerHTML = String(ctx?.data?.text || '');\n el.style.background = 'rgba(0,0,0,0.6)';\n el.style.color = '#fff';\n el.style.font = '14px sans-serif';\n el.style.padding = '4px 6px';\n el.style.borderRadius = '4px';\n el.style.whiteSpace = 'pre';\n },\n options: { offset: { x: 0, y: -10 } },\n });\n }\n const position = posList[0];\n const carto = Cesium.Cartographic.fromCartesian(position);\n const terrainHeight = viewer.scene.globe.getHeight(new Cesium.Cartographic(carto.longitude, carto.latitude, 0)) || 0;\n const lng = Cesium.Math.toDegrees(carto.longitude);\n const lat = Cesium.Math.toDegrees(carto.latitude);\n const terrainPos = Cesium.Cartesian3.fromDegrees(lng, lat, terrainHeight);\n this.topPoint = viewer.entities.add({ position, point: { pixelSize: 8, color: opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\n this.zeroPoint = viewer.entities.add({ position: terrainPos, point: { pixelSize: 8, color: Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\n this.lineEntity = viewer.entities.add({ polyline: { positions: [terrainPos, position], width: opts.width || 3, material: opts.color || Cesium.Color.YELLOW, depthFailMaterial: new Cesium.PolylineDashMaterialProperty({ color: Cesium.Color.RED, dashLength: 12, dashPattern: 255 }) } });\n const t = opts.labelText || { height: '高差' };\n const heightDiff = (carto.height || 0) - terrainHeight;\n const id = record.id + '_terrain';\n this.htmlLabelId = id;\n this.htmlLabelPool.add({ text: `${t.height}:${heightDiff.toFixed(2)} m` }, { id, lon: lng, lat, height: carto.height || 0, theme: 'measure-terrainHeight', show: true });\n }\n}\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\n\nexport default class CoordinateMeasure implements IMeasure {\n private Cesium: any;\n private viewer: any;\n private handler: any = null;\n private entity: any = null;\n private labelEntity: any = null;\n private htmlLabelPool: any = null;\n private htmlLabelId: string | null = null;\n\n constructor(Cesium: any, viewer: any) {\n this.Cesium = Cesium;\n this.viewer = viewer;\n }\n\n start(options: MeasurementOptions) {\n this.clear();\n const Cesium = this.Cesium;\n const viewer = this.viewer;\n if (!this.htmlLabelPool) {\n const containerId = options.overlayContainerId || 'html-label-container';\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\n this.htmlLabelPool.registerTheme('measure-coordinate', {\n createElement: (el: HTMLDivElement, ctx: any) => {\n el.innerHTML = String(ctx?.data?.text || '');\n el.style.background = 'rgba(0,0,0,0.6)';\n el.style.color = '#fff';\n el.style.font = '14px sans-serif';\n el.style.padding = '4px 6px';\n el.style.borderRadius = '4px';\n el.style.whiteSpace = 'pre';\n },\n options: { offset: { x: 0, y: -10 } },\n });\n }\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\n this.handler.setInputAction((movement: any) => {\n const position = viewer.scene.pickPosition(movement.position);\n if (!position) return;\n const carto = Cesium.Cartographic.fromCartesian(position);\n const lng = Cesium.Math.toDegrees(carto.longitude);\n const lat = Cesium.Math.toDegrees(carto.latitude);\n const h = carto.height || 0;\n this.entity = viewer.entities.add({\n position,\n point: {\n pixelSize: 10,\n color: options.color || Cesium.Color.YELLOW,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n },\n });\n const id = this.htmlLabelId || `measure_coordinate_${Date.now()}`;\n this.htmlLabelId = id;\n const t = options.labelText || { lng: '经', lat: '纬', height: '高' };\n this.htmlLabelPool.add(\n { text: `${t.lng}:${lng.toFixed(6)}\\n${t.lat}:${lat.toFixed(6)}\\n${t.height}:${h.toFixed(2)} m` },\n {\n id,\n lon: lng,\n lat,\n height: h,\n theme: 'measure-coordinate',\n show: true,\n },\n );\n this.labelEntity = this.htmlLabelId;\n const result = {\n entity: this.entity,\n label: this.labelEntity,\n lnglat: { lng, lat, height: h },\n clear: () => this.clear(),\n };\n options.onComplete?.(result);\n this.stop();\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\n }\n\n stop() {\n if (this.handler) {\n this.handler.destroy();\n this.handler = null;\n }\n }\n\n clear() {\n this.stop();\n if (this.entity) {\n this.viewer.entities.remove(this.entity);\n this.entity = null;\n }\n if (this.htmlLabelId && this.htmlLabelPool) {\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\n this.htmlLabelId = null;\n }\n }\n\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\n const Cesium = this.Cesium;\n const viewer = this.viewer;\n const opts = (record.options || {}) as MeasurementOptions;\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\n if (!posList.length) {\n const ll = (record.data as any)?.lnglat;\n if (ll && typeof ll.lng === 'number' && typeof ll.lat === 'number') {\n const c = Cesium.Cartesian3.fromDegrees(ll.lng, ll.lat, ll.height || 0);\n posList.push(c);\n }\n }\n if (!posList.length) return;\n if (!this.htmlLabelPool) {\n const containerId = opts.overlayContainerId || 'html-label-container';\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\n this.htmlLabelPool.registerTheme('measure-coordinate', {\n createElement: (el: HTMLDivElement, ctx: any) => {\n el.innerHTML = String(ctx?.data?.text || '');\n el.style.background = 'rgba(0,0,0,0.6)';\n el.style.color = '#fff';\n el.style.font = '14px sans-serif';\n el.style.padding = '4px 6px';\n el.style.borderRadius = '4px';\n el.style.whiteSpace = 'pre';\n },\n options: { offset: { x: 0, y: -10 } },\n });\n }\n const position = posList[0];\n const carto = Cesium.Cartographic.fromCartesian(position);\n const lng = Cesium.Math.toDegrees(carto.longitude);\n const lat = Cesium.Math.toDegrees(carto.latitude);\n const h = carto.height || 0;\n this.entity = viewer.entities.add({ position, point: { pixelSize: 10, color: opts.color || Cesium.Color.YELLOW, disableDepthTestDistance: Number.POSITIVE_INFINITY } });\n const id = record.id + '_coord';\n this.htmlLabelId = id;\n const t = opts.labelText || { lng: '经', lat: '纬', height: '高' };\n this.htmlLabelPool.add({ text: `${t.lng}:${lng.toFixed(6)}\\n${t.lat}:${lat.toFixed(6)}\\n${t.height}:${h.toFixed(2)} m` }, { id, lon: lng, lat, height: h, theme: 'measure-coordinate', show: true });\n }\n}\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class RectangleMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private startPoint: any = null;\r\n private endPoint: any = null;\r\n private secondPoint: any = null;\r\n private currentCorners: any[] = [];\r\n private edgeEntities: any[] = [];\r\n private pointEntities: any[] = [];\r\n private previewEdgeEntity: any = null;\r\n private previewPointEntities: any[] = [];\r\n private entity: any = null;\r\n private labelEntity: any = null;\r\n private primitive: any = null;\r\n private previewEntity: any = null;\r\n private htmlLabelPool: any = null;\r\n private htmlLabelId: string | null = null;\r\n private segmentLabelIds: string[] = [];\r\n private previewLabelId: string | null = null;\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-rectangle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-rectangle-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((movement: any) => {\r\n const pos = viewer.scene.pickPosition(movement.position);\r\n if (!pos) return;\r\n if (!this.startPoint) {\r\n this.startPoint = pos;\r\n return;\r\n }\r\n if (!this.secondPoint) {\r\n this.secondPoint = pos;\r\n this.endPoint = pos;\r\n return;\r\n }\r\n const thirdPoint = pos;\r\n const rect = this.computeRectangle(this.startPoint, this.secondPoint, thirdPoint);\r\n if (!rect) {\r\n this.stop();\r\n return;\r\n }\r\n this.stop();\r\n const { corners, center, width, height, area } = rect;\r\n if (this.previewEntity) {\r\n viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.primitive) {\r\n viewer.scene.primitives.remove(this.primitive);\r\n this.primitive = null;\r\n }\r\n if (this.entity) {\r\n viewer.entities.remove(this.entity);\r\n this.entity = null;\r\n }\r\n const id = this.htmlLabelId || `measure_rectangle_${Date.now()}`;\r\n this.htmlLabelId = id;\r\n const mc = Cesium.Cartographic.fromCartesian(center);\r\n const t = options.labelText || { width: '宽', heightLabel: '高', area: '面积', side: '边长' };\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n this.htmlLabelPool.add(\r\n { text: `${t.width}:${width.toFixed(2)} m\\n${t.heightLabel}:${height.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-rectangle',\r\n show: true,\r\n },\r\n );\r\n const edges = [\r\n [corners[0], corners[1]],\r\n [corners[1], corners[2]],\r\n [corners[2], corners[3]],\r\n [corners[3], corners[0]],\r\n ];\r\n for (let i = 0; i < edges.length; i++) {\r\n const [p1, p2] = edges[i];\r\n const d = i === 0 || i === 2 ? width : height;\r\n const mid = new Cesium.Cartesian3((p1.x + p2.x) / 2, (p1.y + p2.y) / 2, (p1.z + p2.z) / 2);\r\n const mc2 = Cesium.Cartographic.fromCartesian(mid);\r\n const sid = `measure_rectangle_seg_${Date.now()}_${i}`;\r\n this.segmentLabelIds.push(sid);\r\n this.htmlLabelPool.add(\r\n { text: `${t.side}:${Number(d).toFixed(2)} m` },\r\n {\r\n id: sid,\r\n lon: Cesium.Math.toDegrees(mc2.longitude),\r\n lat: Cesium.Math.toDegrees(mc2.latitude),\r\n height: mc2.height || 0,\r\n theme: 'measure-rectangle-seg',\r\n show: true,\r\n },\r\n );\r\n }\r\n const surfacePositions = this.buildSurfaceRectanglePositions(corners);\r\n const hierarchy = new Cesium.PolygonHierarchy(surfacePositions);\r\n const geom = new Cesium.PolygonGeometry({\r\n polygonHierarchy: hierarchy,\r\n vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT,\r\n perPositionHeight: true,\r\n arcType: Cesium.ArcType.NONE,\r\n });\r\n const instance = new Cesium.GeometryInstance({ geometry: geom });\r\n const color = options.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n const occludedColor = (options.color && options.color.withAlpha)\r\n ? options.color.withAlpha(0.25)\r\n : Cesium.Color.RED.withAlpha(0.4);\r\n this.primitive = new Cesium.Primitive({\r\n geometryInstances: instance,\r\n appearance: new Cesium.MaterialAppearance({\r\n material: Cesium.Material.fromType('Color', { color }),\r\n translucent: true,\r\n closed: true,\r\n }),\r\n depthFailAppearance: new Cesium.MaterialAppearance({\r\n material: Cesium.Material.fromType('Color', { color: occludedColor }),\r\n translucent: true,\r\n closed: true,\r\n }),\r\n });\r\n viewer.scene.primitives.add(this.primitive);\r\n const lineColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor =\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED;\r\n const polylinePositions = [...surfacePositions, surfacePositions[0]];\r\n const lineEntity = viewer.entities.add({\r\n polyline: {\r\n positions: polylinePositions,\r\n width: options.width || 2,\r\n material: lineColor,\r\n clampToGround: false,\r\n arcType: Cesium.ArcType.NONE,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n this.edgeEntities.push(lineEntity);\r\n const pointColor = options.pointColor || options.color || Cesium.Color.YELLOW;\r\n for (const corner of corners) {\r\n const pointEntity = viewer.entities.add({\r\n position: corner,\r\n point: {\r\n pixelSize: 8,\r\n color: pointColor,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.pointEntities.push(pointEntity);\r\n }\r\n const result = {\r\n entity: this.primitive,\r\n label: this.labelEntity,\r\n positions: [this.startPoint, this.secondPoint, thirdPoint],\r\n width,\r\n height,\r\n area,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n const pos = viewer.scene.pickPosition(movement.endPosition);\r\n if (!pos) return;\r\n if (this.startPoint && !this.secondPoint) {\r\n this.endPoint = pos;\r\n if (!this.previewEdgeEntity) {\r\n const solidColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor =\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED;\r\n this.previewEdgeEntity = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.startPoint || !this.endPoint) return [];\r\n return [this.startPoint, this.endPoint];\r\n }, false),\r\n width: options.width || 2,\r\n material: solidColor,\r\n clampToGround: false,\r\n arcType: Cesium.ArcType.NONE,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n const pointColor = options.pointColor || options.color || Cesium.Color.YELLOW;\r\n const basePoint = viewer.entities.add({\r\n position: this.startPoint,\r\n point: {\r\n pixelSize: 8,\r\n color: pointColor,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n const hoverPoint = viewer.entities.add({\r\n position: new Cesium.CallbackProperty(() => this.endPoint || this.startPoint, false),\r\n point: {\r\n pixelSize: 8,\r\n color: pointColor,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.previewPointEntities.push(basePoint, hoverPoint);\r\n }\r\n return;\r\n }\r\n if (!this.startPoint || !this.secondPoint) return;\r\n const rect = this.computeRectangle(this.startPoint, this.secondPoint, pos);\r\n if (!rect) return;\r\n const { corners, center, width, height, area } = rect;\r\n const surfacePositions = this.buildSurfaceRectanglePositions(corners);\r\n this.currentCorners = surfacePositions;\r\n const mc = Cesium.Cartographic.fromCartesian(center);\r\n const pid = this.previewLabelId || 'measure_rectangle_preview';\r\n this.previewLabelId = pid;\r\n const tPrev = options.labelText || { width: '宽', heightLabel: '高', area: '面积' };\r\n this.htmlLabelPool.add(\r\n { text: `${tPrev.width}:${width.toFixed(2)} m\\n${tPrev.heightLabel}:${height.toFixed(2)} m\\n${tPrev.area}:${area.toFixed(2)} m²` },\r\n {\r\n id: pid,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-rectangle',\r\n show: true,\r\n },\r\n );\r\n if (!this.previewEntity) {\r\n const color = options.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n this.previewEntity = viewer.entities.add({\r\n polygon: {\r\n hierarchy: new Cesium.CallbackProperty(() => {\r\n if (!this.startPoint || !this.secondPoint || !this.currentCorners.length) return undefined;\r\n return new Cesium.PolygonHierarchy(this.currentCorners);\r\n }, false),\r\n material: color,\r\n perPositionHeight: true,\r\n arcType: Cesium.ArcType.NONE,\r\n },\r\n });\r\n }\r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n if (this.entity) {\r\n this.viewer.entities.remove(this.entity);\r\n this.entity = null;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewEdgeEntity) {\r\n this.viewer.entities.remove(this.previewEdgeEntity);\r\n this.previewEdgeEntity = null;\r\n }\r\n if (this.previewPointEntities.length) {\r\n for (const p of this.previewPointEntities) {\r\n try {\r\n this.viewer.entities.remove(p);\r\n } catch {}\r\n }\r\n this.previewPointEntities = [];\r\n }\r\n if (this.edgeEntities.length) {\r\n for (const e of this.edgeEntities) {\r\n try {\r\n this.viewer.entities.remove(e);\r\n } catch {}\r\n }\r\n this.edgeEntities = [];\r\n }\r\n if (this.pointEntities.length) {\r\n for (const p of this.pointEntities) {\r\n try {\r\n this.viewer.entities.remove(p);\r\n } catch {}\r\n }\r\n this.pointEntities = [];\r\n }\r\n if (this.primitive) {\r\n this.viewer.scene.primitives.remove(this.primitive);\r\n this.primitive = null;\r\n }\r\n if (this.htmlLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\r\n this.htmlLabelId = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n if (this.segmentLabelIds.length && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice());\r\n }\r\n this.segmentLabelIds = [];\r\n this.startPoint = null;\r\n this.endPoint = null;\r\n this.secondPoint = null;\r\n this.currentCorners = [];\r\n }\r\n\r\n private buildSurfaceRectanglePositions(corners: any[]) {\r\n if (!corners || !corners.length) return [];\r\n return corners.slice();\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (posList.length < 3) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-rectangle', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-rectangle-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n const rect = this.computeRectangle(posList[0], posList[1], posList[2]);\r\n if (!rect) return;\r\n const corners = rect.corners;\r\n const center = rect.center;\r\n const width = rect.width;\r\n const height = rect.height;\r\n const area = rect.area;\r\n const mc = Cesium.Cartographic.fromCartesian(center);\r\n const id = record.id + '_rectangle';\r\n const t = opts.labelText || { width: '宽', heightLabel: '高', area: '面积', side: '边长' };\r\n this.htmlLabelId = id;\r\n this.htmlLabelPool.add({ text: `${t.width}:${width.toFixed(2)} m\\n${t.heightLabel}:${height.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²` }, { id, lon: Cesium.Math.toDegrees(mc.longitude), lat: Cesium.Math.toDegrees(mc.latitude), height: mc.height || 0, theme: 'measure-rectangle', show: true });\r\n const edges: any[] = [\r\n [corners[0], corners[1]],\r\n [corners[1], corners[2]],\r\n [corners[2], corners[3]],\r\n [corners[3], corners[0]],\r\n ];\r\n for (let i = 0; i < edges.length; i++) {\r\n const [ep1, ep2] = edges[i];\r\n const d = i === 0 || i === 2 ? width : height;\r\n const mid = new Cesium.Cartesian3((ep1.x + ep2.x) / 2, (ep1.y + ep2.y) / 2, (ep1.z + ep2.z) / 2);\r\n const mc2 = Cesium.Cartographic.fromCartesian(mid);\r\n const sid = record.id + `_rectangle_seg_${i}`;\r\n this.segmentLabelIds.push(sid);\r\n this.htmlLabelPool.add({ text: `${t.side}:${Number(d).toFixed(2)} m` }, { id: sid, lon: Cesium.Math.toDegrees(mc2.longitude), lat: Cesium.Math.toDegrees(mc2.latitude), height: mc2.height || 0, theme: 'measure-rectangle-seg', show: true });\r\n }\r\n const hierarchy = new Cesium.PolygonHierarchy(corners);\r\n const geom = new Cesium.PolygonGeometry({\r\n polygonHierarchy: hierarchy,\r\n vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT,\r\n perPositionHeight: true,\r\n arcType: Cesium.ArcType.NONE,\r\n });\r\n const instance = new Cesium.GeometryInstance({ geometry: geom });\r\n const color = opts.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n const occludedColor = (opts.color && opts.color.withAlpha) ? opts.color.withAlpha(0.25) : Cesium.Color.RED.withAlpha(0.4);\r\n const primitive = new Cesium.Primitive({\r\n geometryInstances: instance,\r\n appearance: new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color }), translucent: true, closed: true }),\r\n depthFailAppearance: new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color: occludedColor }), translucent: true, closed: true }),\r\n });\r\n this.primitive = primitive;\r\n viewer.scene.primitives.add(this.primitive);\r\n\r\n const lineColor = opts.lineColor || color;\r\n const polylinePositions = [...corners, corners[0]];\r\n const lineEntity = viewer.entities.add({\r\n polyline: {\r\n positions: polylinePositions,\r\n width: opts.width || 2,\r\n material: lineColor,\r\n clampToGround: false,\r\n arcType: Cesium.ArcType.NONE,\r\n },\r\n });\r\n this.edgeEntities.push(lineEntity);\r\n const pointColor = opts.pointColor || color;\r\n for (const corner of corners) {\r\n const pointEntity = viewer.entities.add({\r\n position: corner,\r\n point: {\r\n pixelSize: 8,\r\n color: pointColor,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.pointEntities.push(pointEntity);\r\n }\r\n }\r\n\r\n private computeRectangle(p1: any, p2: any, p3: any) {\r\n const Cesium = this.Cesium;\r\n const plane = new Cesium.EllipsoidTangentPlane(p1, Cesium.Ellipsoid.WGS84);\r\n const pts2d = plane.projectPointsOntoPlane([p1, p2, p3]);\r\n if (!pts2d || pts2d.length < 3) return null;\r\n const a = pts2d[0];\r\n const b = pts2d[1];\r\n const c = pts2d[2];\r\n const vx = b.x - a.x;\r\n const vy = b.y - a.y;\r\n const baseLen = Math.sqrt(vx * vx + vy * vy);\r\n if (!baseLen) return null;\r\n const ux = vx / baseLen;\r\n const uy = vy / baseLen;\r\n const nx = -uy;\r\n const ny = ux;\r\n const wx = c.x - b.x;\r\n const wy = c.y - b.y;\r\n const s = wx * nx + wy * ny;\r\n if (!s) return null;\r\n const c2 = new Cesium.Cartesian2(b.x + nx * s, b.y + ny * s);\r\n const d2 = new Cesium.Cartesian2(a.x + nx * s, a.y + ny * s);\r\n const worldPoints = plane.projectPointsOntoEllipsoid([a, b, c2, d2]);\r\n if (!worldPoints || worldPoints.length < 4) return null;\r\n const corners = worldPoints;\r\n const p0 = corners[0];\r\n const p2w = corners[2];\r\n const width = Math.abs(baseLen);\r\n const height = Math.abs(s);\r\n const center = new Cesium.Cartesian3(\r\n (p0.x + p2w.x) / 2,\r\n (p0.y + p2w.y) / 2,\r\n (p0.z + p2w.z) / 2,\r\n );\r\n const planeCenter = new Cesium.EllipsoidTangentPlane(center, Cesium.Ellipsoid.WGS84);\r\n const rect2d = planeCenter.projectPointsOntoPlane(corners);\r\n let area2D = 0;\r\n for (let i = 0; i < rect2d.length; i++) {\r\n const j = (i + 1) % rect2d.length;\r\n area2D += rect2d[i].x * rect2d[j].y - rect2d[j].x * rect2d[i].y;\r\n }\r\n const area = Math.abs(area2D) / 2;\r\n return { corners, center, width, height, area };\r\n }\r\n}\r\n","import { IMeasure, MeasurementOptions, MeasurementRecord } from '../types';\r\nimport { HtmlOverlayLabelPool } from '../../HtmlOverlayLabelPool';\r\n\r\nexport default class RegularPolygonMeasure implements IMeasure {\r\n private Cesium: any;\r\n private viewer: any;\r\n private handler: any = null;\r\n private entity: any = null;\r\n private positions: any[] = [];\r\n private labelEntity: any = null;\r\n private currentPoints: any[] = [];\r\n private primitive: any = null;\r\n private previewEntity: any = null;\r\n private edgeEntities: any[] = [];\r\n private pointEntities: any[] = [];\r\n private previewEdgeEntity: any = null;\r\n private previewPointEntities: any[] = [];\r\n private htmlLabelPool: any = null;\r\n private htmlLabelId: string | null = null;\r\n private segmentLabelIds: string[] = [];\r\n private previewLabelId: string | null = null;\r\n\r\n constructor(Cesium: any, viewer: any) {\r\n this.Cesium = Cesium;\r\n this.viewer = viewer;\r\n }\r\n\r\n start(options: MeasurementOptions) {\r\n this.clear();\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const sides = Math.max(options.sides || 6, 6);\r\n if (!this.htmlLabelPool) {\r\n const containerId = options.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-regular', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-regular-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);\r\n this.handler.setInputAction((click: any) => {\r\n const position = viewer.scene.pickPosition(click.position);\r\n if (!position) return;\r\n this.positions.push(position);\r\n if (this.positions.length === 2) {\r\n this.stop();\r\n const center = this.positions[0];\r\n const edge = this.positions[1];\r\n const radius = Cesium.Cartesian3.distance(center, edge);\r\n const points = this.buildRegularPolygonPoints(center, radius, sides);\r\n if (this.previewEntity) {\r\n viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.primitive) {\r\n viewer.scene.primitives.remove(this.primitive);\r\n this.primitive = null;\r\n }\r\n const hierarchy = new Cesium.PolygonHierarchy(points);\r\n const geom = new Cesium.PolygonGeometry({\r\n polygonHierarchy: hierarchy,\r\n vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT,\r\n perPositionHeight: true,\r\n arcType: Cesium.ArcType.NONE,\r\n });\r\n const instance = new Cesium.GeometryInstance({ geometry: geom });\r\n const color = options.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n const occludedColor = (options.color && options.color.withAlpha)\r\n ? options.color.withAlpha(0.25)\r\n : Cesium.Color.RED.withAlpha(0.4);\r\n this.primitive = new Cesium.Primitive({\r\n geometryInstances: instance,\r\n appearance: new Cesium.MaterialAppearance({\r\n material: Cesium.Material.fromType('Color', { color }),\r\n translucent: true,\r\n closed: true,\r\n }),\r\n depthFailAppearance: new Cesium.MaterialAppearance({\r\n material: Cesium.Material.fromType('Color', { color: occludedColor }),\r\n translucent: true,\r\n closed: true,\r\n }),\r\n });\r\n viewer.scene.primitives.add(this.primitive);\r\n const lineColor = options.lineColor || color;\r\n const dashColor =\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED;\r\n const polylinePositions = points.slice();\r\n const lineEntity = viewer.entities.add({\r\n polyline: {\r\n positions: polylinePositions,\r\n width: options.width || 2,\r\n material: lineColor,\r\n clampToGround: false,\r\n arcType: Cesium.ArcType.NONE,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n this.edgeEntities.push(lineEntity);\r\n const pointColor = options.pointColor || color;\r\n const uniquePoints = points.slice(0, points.length - 1);\r\n for (const p of uniquePoints) {\r\n const pointEntity = viewer.entities.add({\r\n position: p,\r\n point: {\r\n pixelSize: 8,\r\n color: pointColor,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.pointEntities.push(pointEntity);\r\n }\r\n const area = this.computeAreaByPlane(points);\r\n const cc = Cesium.Cartographic.fromCartesian(center);\r\n const id = this.htmlLabelId || `measure_regular_${Date.now()}`;\r\n this.htmlLabelId = id;\r\n const t = options.labelText || { sides: '边数', radius: '半径', circumference: '周长', area: '面积', side: '边长' };\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n let perimeter = 0;\r\n for (let i = 1; i < points.length; i++) {\r\n const p1 = points[i - 1];\r\n const p2 = points[i];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n perimeter += d;\r\n const mid = new Cesium.Cartesian3((p1.x + p2.x) / 2, (p1.y + p2.y) / 2, (p1.z + p2.z) / 2);\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const sid = `measure_regular_seg_${Date.now()}_${i - 1}`;\r\n this.segmentLabelIds.push(sid);\r\n this.htmlLabelPool.add(\r\n { text: `${t.side}:${d.toFixed(2)} m` },\r\n {\r\n id: sid,\r\n lon: Cesium.Math.toDegrees(mc.longitude),\r\n lat: Cesium.Math.toDegrees(mc.latitude),\r\n height: mc.height || 0,\r\n theme: 'measure-regular-seg',\r\n show: true,\r\n },\r\n );\r\n }\r\n this.htmlLabelPool.add(\r\n { text: `${t.sides}:${sides}\\n${t.radius}:${radius.toFixed(2)} m\\n${t.circumference}:${perimeter.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²` },\r\n {\r\n id,\r\n lon: Cesium.Math.toDegrees(cc.longitude),\r\n lat: Cesium.Math.toDegrees(cc.latitude),\r\n height: cc.height || 0,\r\n theme: 'measure-regular',\r\n show: true,\r\n },\r\n );\r\n const result = {\r\n entity: this.primitive,\r\n label: this.labelEntity,\r\n positions: points,\r\n radius,\r\n sides,\r\n perimeter,\r\n area,\r\n clear: () => this.clear(),\r\n };\r\n options.onComplete?.(result);\r\n }\r\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\r\n this.handler.setInputAction((movement: any) => {\r\n if (this.positions.length !== 1) return;\r\n const center = this.positions[0];\r\n const ray = viewer.camera.getPickRay(movement.endPosition);\r\n const edge = viewer.scene.globe.pick(ray, viewer.scene);\r\n if (!edge) return;\r\n const radius = Cesium.Cartesian3.distance(center, edge);\r\n this.currentPoints = this.buildRegularPolygonPoints(center, radius, sides);\r\n if (!this.previewEntity) {\r\n const color = options.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n this.previewEntity = viewer.entities.add({\r\n polygon: {\r\n hierarchy: new Cesium.CallbackProperty(() => {\r\n if (!this.currentPoints || this.currentPoints.length === 0) return undefined;\r\n return new Cesium.PolygonHierarchy(this.currentPoints);\r\n }, false),\r\n material: color,\r\n perPositionHeight: true,\r\n arcType: Cesium.ArcType.NONE,\r\n },\r\n });\r\n const lineColor = options.lineColor || options.color || Cesium.Color.YELLOW;\r\n const dashColor =\r\n (options.dashLineColor || options.lineColor || options.color || Cesium.Color.RED).withAlpha?.(0.9) ||\r\n Cesium.Color.RED;\r\n this.previewEdgeEntity = viewer.entities.add({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n if (!this.currentPoints || this.currentPoints.length === 0) return [];\r\n return this.currentPoints.slice();\r\n }, false),\r\n width: options.width || 2,\r\n material: lineColor,\r\n clampToGround: false,\r\n arcType: Cesium.ArcType.NONE,\r\n depthFailMaterial: new Cesium.PolylineDashMaterialProperty({\r\n color: dashColor,\r\n dashLength: 12,\r\n dashPattern: 255,\r\n }),\r\n },\r\n });\r\n const pointColor = options.pointColor || options.color || Cesium.Color.YELLOW;\r\n const basePoint = viewer.entities.add({\r\n position: center,\r\n point: {\r\n pixelSize: 8,\r\n color: pointColor,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n const hoverPoint = viewer.entities.add({\r\n position: new Cesium.CallbackProperty(() => edge || center, false),\r\n point: {\r\n pixelSize: 8,\r\n color: pointColor,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n },\r\n });\r\n this.previewPointEntities.push(basePoint, hoverPoint);\r\n }\r\n let perimeter = 0;\r\n for (let i = 1; i < this.currentPoints.length; i++) {\r\n const p1 = this.currentPoints[i - 1];\r\n const p2 = this.currentPoints[i];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n perimeter += geodesic.surfaceDistance;\r\n }\r\n const area = this.computeAreaByPlane(this.currentPoints);\r\n const cc = Cesium.Cartographic.fromCartesian(center);\r\n const pid = this.previewLabelId || 'measure_regular_preview';\r\n this.previewLabelId = pid;\r\n const t = options.labelText || { sides: '边数', radius: '半径', circumference: '周长', area: '面积' };\r\n this.htmlLabelPool.add(\r\n { text: `${t.sides}:${sides}\\n${t.radius}:${radius.toFixed(2)} m\\n${t.circumference}:${perimeter.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²` },\r\n {\r\n id: pid,\r\n lon: Cesium.Math.toDegrees(cc.longitude),\r\n lat: Cesium.Math.toDegrees(cc.latitude),\r\n height: cc.height || 0,\r\n theme: 'measure-regular',\r\n show: true,\r\n },\r\n );\r\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\r\n }\r\n\r\n stop() {\r\n if (this.handler) {\r\n this.handler.destroy();\r\n this.handler = null;\r\n }\r\n }\r\n\r\n clear() {\r\n this.stop();\r\n if (this.entity) {\r\n this.viewer.entities.remove(this.entity);\r\n this.entity = null;\r\n }\r\n if (this.previewEntity) {\r\n this.viewer.entities.remove(this.previewEntity);\r\n this.previewEntity = null;\r\n }\r\n if (this.previewEdgeEntity) {\r\n this.viewer.entities.remove(this.previewEdgeEntity);\r\n this.previewEdgeEntity = null;\r\n }\r\n if (this.previewPointEntities.length) {\r\n for (const p of this.previewPointEntities) {\r\n try {\r\n this.viewer.entities.remove(p);\r\n } catch {}\r\n }\r\n this.previewPointEntities = [];\r\n }\r\n if (this.primitive) {\r\n this.viewer.scene.primitives.remove(this.primitive);\r\n this.primitive = null;\r\n }\r\n if (this.edgeEntities.length) {\r\n for (const e of this.edgeEntities) {\r\n try {\r\n this.viewer.entities.remove(e);\r\n } catch {}\r\n }\r\n this.edgeEntities = [];\r\n }\r\n if (this.pointEntities.length) {\r\n for (const p of this.pointEntities) {\r\n try {\r\n this.viewer.entities.remove(p);\r\n } catch {}\r\n }\r\n this.pointEntities = [];\r\n }\r\n if (this.labelEntity) {\r\n this.viewer.entities.remove(this.labelEntity);\r\n this.labelEntity = null;\r\n }\r\n if (this.htmlLabelPool && this.htmlLabelId) {\r\n this.htmlLabelPool.removeByIds([this.htmlLabelId]);\r\n this.htmlLabelId = null;\r\n }\r\n if (this.previewLabelId && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds([this.previewLabelId]);\r\n this.previewLabelId = null;\r\n }\r\n if (this.segmentLabelIds.length && this.htmlLabelPool) {\r\n this.htmlLabelPool.removeByIds(this.segmentLabelIds.slice());\r\n }\r\n this.segmentLabelIds = [];\r\n this.positions = [];\r\n this.currentPoints = [];\r\n }\r\n\r\n rehydrate(record: MeasurementRecord, htmlLabelPool?: HtmlOverlayLabelPool) {\r\n const Cesium = this.Cesium;\r\n const viewer = this.viewer;\r\n const opts = (record.options || {}) as MeasurementOptions;\r\n const sides = (record.data?.sides || opts.sides || 3);\r\n const posList = (record.positions || []).map((p) => new Cesium.Cartesian3(p[0], p[1], p[2]));\r\n if (posList.length < 2) return;\r\n if (!this.htmlLabelPool) {\r\n const containerId = opts.overlayContainerId || 'html-label-container';\r\n this.htmlLabelPool = htmlLabelPool || new HtmlOverlayLabelPool(Cesium, viewer, containerId);\r\n this.htmlLabelPool.registerTheme('measure-regular', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n this.htmlLabelPool.registerTheme('measure-regular-seg', {\r\n createElement: (el: HTMLDivElement, ctx: any) => {\r\n el.innerHTML = String(ctx?.data?.text || '');\r\n el.style.background = 'rgba(0,0,0,0.6)';\r\n el.style.color = '#fff';\r\n el.style.font = '14px sans-serif';\r\n el.style.padding = '4px 6px';\r\n el.style.borderRadius = '4px';\r\n el.style.whiteSpace = 'pre';\r\n },\r\n options: { offset: { x: 0, y: -10 } },\r\n });\r\n }\r\n let points: any[] = [];\r\n let center = posList[0];\r\n let radius = 0;\r\n if (posList.length >= 3) {\r\n points = posList.slice();\r\n center = new Cesium.Cartesian3(\r\n points.reduce((s: number, p: any) => s + p.x, 0) / points.length,\r\n points.reduce((s: number, p: any) => s + p.y, 0) / points.length,\r\n points.reduce((s: number, p: any) => s + p.z, 0) / points.length,\r\n );\r\n const c1 = points[0];\r\n const c2 = points[Math.floor(points.length / 2)] || points[1];\r\n radius = Cesium.Cartesian3.distance(center, c1);\r\n } else {\r\n const edge = posList[1];\r\n radius = Cesium.Cartesian3.distance(center, edge);\r\n points = this.buildRegularPolygonPoints(center, radius, Math.max(sides, 3));\r\n }\r\n const hierarchy = new Cesium.PolygonHierarchy(points);\r\n const geom = new Cesium.PolygonGeometry({ polygonHierarchy: hierarchy, vertexFormat: Cesium.MaterialAppearance.VERTEX_FORMAT, perPositionHeight: true });\r\n const instance = new Cesium.GeometryInstance({ geometry: geom });\r\n const color = opts.color || Cesium.Color.YELLOW.withAlpha(0.4);\r\n const occludedColor = (opts.color && opts.color.withAlpha) ? opts.color.withAlpha(0.25) : Cesium.Color.RED.withAlpha(0.4);\r\n const primitive = new Cesium.Primitive({ geometryInstances: instance, appearance: new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color }), translucent: true, closed: true }), depthFailAppearance: new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color: occludedColor }), translucent: true, closed: true }) });\r\n viewer.scene.primitives.add(primitive);\r\n this.primitive = primitive;\r\n const area = this.computeAreaByPlane(points);\r\n const cc = Cesium.Cartographic.fromCartesian(center);\r\n const id = record.id + '_regular';\r\n this.htmlLabelId = id;\r\n const t = opts.labelText || { sides: '边数', radius: '半径', circumference: '周长', area: '面积', side: '边长' };\r\n let perimeter = 0;\r\n for (let i = 1; i < points.length; i++) {\r\n const p1 = points[i - 1];\r\n const p2 = points[i];\r\n const c1 = Cesium.Cartographic.fromCartesian(p1);\r\n const c2 = Cesium.Cartographic.fromCartesian(p2);\r\n const geodesic = new Cesium.EllipsoidGeodesic(c1, c2);\r\n const d = geodesic.surfaceDistance;\r\n perimeter += d;\r\n const mid = new Cesium.Cartesian3((p1.x + p2.x) / 2, (p1.y + p2.y) / 2, (p1.z + p2.z) / 2);\r\n const mc = Cesium.Cartographic.fromCartesian(mid);\r\n const sid = record.id + `_regular_seg_${i - 1}`;\r\n this.segmentLabelIds.push(sid);\r\n this.htmlLabelPool.add({ text: `${t.side}:${d.toFixed(2)} m` }, { id: sid, lon: Cesium.Math.toDegrees(mc.longitude), lat: Cesium.Math.toDegrees(mc.latitude), height: mc.height || 0, theme: 'measure-regular-seg', show: true });\r\n }\r\n this.htmlLabelPool.add({ text: `${t.sides}:${Math.max(sides, 3)}\\n${t.radius}:${radius.toFixed(2)} m\\n${t.circumference}:${perimeter.toFixed(2)} m\\n${t.area}:${area.toFixed(2)} m²` }, { id, lon: Cesium.Math.toDegrees(cc.longitude), lat: Cesium.Math.toDegrees(cc.latitude), height: cc.height || 0, theme: 'measure-regular', show: true });\r\n }\r\n\r\n private buildRegularPolygonPoints(center: any, radius: number, sides: number) {\r\n const Cesium = this.Cesium;\r\n const plane = new Cesium.EllipsoidTangentPlane(center, Cesium.Ellipsoid.WGS84);\r\n const step = (2 * Math.PI) / sides;\r\n const points2D: any[] = [];\r\n for (let i = 0; i < sides; i++) {\r\n const angle = i * step;\r\n const x = radius * Math.cos(angle);\r\n const y = radius * Math.sin(angle);\r\n points2D.push(new Cesium.Cartesian2(x, y));\r\n }\r\n const worldPoints = plane.projectPointsOntoEllipsoid(points2D);\r\n const points: any[] = worldPoints.slice();\r\n points.push(points[0]);\r\n return points;\r\n }\r\n\r\n private computeAreaByPlane(points: any[]) {\r\n const Cesium = this.Cesium;\r\n const center = new Cesium.Cartesian3(\r\n points.reduce((s: number, p: any) => s + p.x, 0) / points.length,\r\n points.reduce((s: number, p: any) => s + p.y, 0) / points.length,\r\n points.reduce((s: number, p: any) => s + p.z, 0) / points.length,\r\n );\r\n const plane = new Cesium.EllipsoidTangentPlane(center, Cesium.Ellipsoid.WGS84);\r\n const p2d = plane.projectPointsOntoPlane(points);\r\n let area = 0;\r\n for (let i = 0; i < p2d.length; i++) {\r\n const j = (i + 1) % p2d.length;\r\n area += p2d[i].x * p2d[j].y - p2d[j].x * p2d[i].y;\r\n }\r\n return Math.abs(area) / 2;\r\n }\r\n}\r\n","import {\n IMeasure,\n MeasurementOptions,\n MeasurementType,\n MeasurementRecord,\n MeasurementsConfig,\n} from './types';\nimport HorizontalMeasure from './handlers/HorizontalMeasure';\nimport VerticalMeasure from './handlers/VerticalMeasure';\nimport TriangleMeasure from './handlers/TriangleMeasure';\nimport SpaceMeasure from './handlers/SpaceMeasure';\nimport AreaMeasure from './handlers/AreaMeasure';\nimport CircleMeasure from './handlers/CircleMeasure';\nimport PolylineDistanceMeasure from './handlers/PolylineDistanceMeasure';\nimport TerrainHeightMeasure from './handlers/TerrainHeightMeasure';\nimport CoordinateMeasure from './handlers/CoordinateMeasure';\nimport RectangleMeasure from './handlers/RectangleMeasure';\nimport RegularPolygonMeasure from './handlers/RegularPolygonMeasure';\nimport { HtmlOverlayLabelPool } from '../HtmlOverlayLabelPool';\nimport { MarkerEventKey } from '../MarkerEvent';\n\nexport class MeasurementTool {\n private Cesium: any;\n private viewer: any;\n private actives: IMeasure[] = [];\n private measurements: MeasurementRecord[] = [];\n private htmlLabelPool: any = null;\n private recordHandlers: Map<string, IMeasure> = new Map();\n private specifiedClear: boolean = false;\n private deleteLabelPool: HtmlOverlayLabelPool | null = null;\n private deleteLabelIds: Map<string, string> = new Map();\n\n constructor({ Cesium, viewer }: { Cesium: any; viewer: any }) {\n this.Cesium = Cesium;\n this.viewer = viewer;\n viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\n }\n\n measure(type: MeasurementType, options: MeasurementOptions) {\n let handler: IMeasure | null = null;\n switch (type) {\n case 'horizontal':\n handler = new HorizontalMeasure(this.Cesium, this.viewer);\n break;\n case 'vertical':\n handler = new VerticalMeasure(this.Cesium, this.viewer);\n break;\n case 'triangle':\n handler = new TriangleMeasure(this.Cesium, this.viewer);\n break;\n case 'space':\n handler = new SpaceMeasure(this.Cesium, this.viewer);\n break;\n case 'area':\n handler = new AreaMeasure(this.Cesium, this.viewer);\n break;\n case 'circle':\n handler = new CircleMeasure(this.Cesium, this.viewer);\n break;\n case 'polyline':\n handler = new PolylineDistanceMeasure(this.Cesium, this.viewer);\n break;\n case 'terrainHeight':\n handler = new TerrainHeightMeasure(this.Cesium, this.viewer);\n break;\n case 'coordinate':\n handler = new CoordinateMeasure(this.Cesium, this.viewer);\n break;\n case 'rectangle':\n handler = new RectangleMeasure(this.Cesium, this.viewer);\n break;\n case 'regularPolygon':\n handler = new RegularPolygonMeasure(this.Cesium, this.viewer);\n break;\n default:\n throw new Error(`Unsupported measurement type: ${type}`);\n }\n if (!handler) return;\n this.actives.push(handler);\n const currentHandler = handler;\n const wrapped: MeasurementOptions = {\n ...options,\n onComplete: (result: any) => {\n const record: MeasurementRecord = {\n id: `m_${Date.now()}_${this.measurements.length}`,\n type,\n options: (() => {\n const o: any = { ...options };\n if ('onComplete' in o) {\n delete o.onComplete;\n }\n return o;\n })(),\n positions: (() => {\n if (Array.isArray(result?.positions)) {\n return result.positions.map((p: any) => [p.x, p.y, p.z]);\n }\n switch (type) {\n case 'terrainHeight': {\n const pos = (result as any)?.position;\n if (pos) return [[pos.x, pos.y, pos.z]];\n return undefined;\n }\n case 'coordinate': {\n const ll = (result as any)?.lnglat;\n if (ll && typeof ll.lng === 'number' && typeof ll.lat === 'number') {\n const c = this.Cesium.Cartesian3.fromDegrees(ll.lng, ll.lat, ll.height || 0);\n return [[c.x, c.y, c.z]];\n }\n return undefined;\n }\n default:\n return undefined;\n }\n })(),\n data: this._serializeMetrics(type, result),\n };\n this.measurements.push(record);\n if (currentHandler) {\n this.recordHandlers.set(record.id, currentHandler);\n }\n if (this.specifiedClear) {\n this._showDeleteLabels('html-label-container');\n }\n options.onComplete?.(result);\n const idx = this.actives.indexOf(currentHandler);\n if (idx >= 0) this.actives.splice(idx, 1);\n },\n };\n handler.start(wrapped);\n }\n\n clear() {\n const h = this.actives.pop();\n if (h) h.clear();\n this._removeAllDeleteLabels();\n this.specifiedClear = false;\n }\n\n cancel() {\n const h = this.actives.pop();\n if (h) h.stop();\n }\n\n disableDefaultSelection({ disableLeftClick = false, disableDoubleClick = true } = {}) {\n const handler = this.viewer?.cesiumWidget?.screenSpaceEventHandler;\n if (!handler) return;\n if (disableDoubleClick) {\n handler.removeInputAction(this.Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\n }\n if (disableLeftClick) {\n handler.removeInputAction(this.Cesium.ScreenSpaceEventType.LEFT_CLICK);\n }\n }\n\n clearAll() {\n while (this.actives.length) {\n const h = this.actives.pop();\n try {\n h?.clear();\n } catch {}\n }\n for (const [, handler] of this.recordHandlers) {\n try {\n handler.clear();\n } catch {}\n }\n this.recordHandlers.clear();\n this.measurements = [];\n this._removeAllDeleteLabels();\n this.specifiedClear = false;\n }\n\n public getMeasurementsConfig(): MeasurementsConfig {\n return {\n measurements: this.measurements.map((m) => ({\n ...m,\n options: m.options ? { ...(m.options as any) } : m.options,\n positions: m.positions ? m.positions.map((p) => [p[0], p[1], p[2]]) : m.positions,\n data: m.data ? { ...(m.data as any) } : m.data,\n })),\n };\n }\n\n public setMeasurementsConfig(config: MeasurementsConfig) {\n if (!config?.measurements?.length) return;\n for (const rec of config.measurements) {\n let handler: IMeasure | null = null;\n switch (rec.type) {\n case 'horizontal':\n handler = new HorizontalMeasure(this.Cesium, this.viewer);\n break;\n case 'vertical':\n handler = new VerticalMeasure(this.Cesium, this.viewer);\n break;\n case 'triangle':\n handler = new TriangleMeasure(this.Cesium, this.viewer);\n break;\n case 'space':\n handler = new SpaceMeasure(this.Cesium, this.viewer);\n break;\n case 'area':\n handler = new AreaMeasure(this.Cesium, this.viewer);\n break;\n case 'circle':\n handler = new CircleMeasure(this.Cesium, this.viewer);\n break;\n case 'polyline':\n handler = new PolylineDistanceMeasure(this.Cesium, this.viewer);\n break;\n case 'terrainHeight':\n handler = new TerrainHeightMeasure(this.Cesium, this.viewer);\n break;\n case 'coordinate':\n handler = new CoordinateMeasure(this.Cesium, this.viewer);\n break;\n case 'rectangle':\n handler = new RectangleMeasure(this.Cesium, this.viewer);\n break;\n case 'regularPolygon':\n handler = new RegularPolygonMeasure(this.Cesium, this.viewer);\n break;\n default:\n handler = null;\n }\n handler?.rehydrate?.(rec, undefined);\n if (handler && rec.id) {\n this.recordHandlers.set(rec.id, handler);\n }\n const exists = this.measurements.find((r) => r.id === rec.id);\n if (!exists) this.measurements.push(rec);\n }\n if (this.specifiedClear) {\n this._showDeleteLabels('html-label-container');\n }\n }\n\n private _serializeMetrics(type: MeasurementType, result: any) {\n switch (type) {\n case 'space':\n return { distance: result?.distance };\n case 'horizontal':\n return { distance: result?.distance };\n case 'vertical':\n return { vertical: result?.vertical };\n case 'polyline':\n return { distance: result?.distance };\n case 'area':\n return { area: result?.area };\n case 'circle':\n return { radius: result?.radius, area: result?.area, perimeter: result?.perimeter };\n case 'rectangle':\n return { width: result?.width, height: result?.height, area: result?.area };\n case 'regularPolygon':\n return {\n sides: result?.sides,\n radius: result?.radius,\n perimeter: result?.perimeter,\n area: result?.area,\n };\n case 'triangle':\n return { lengths: result?.lengths, angles: result?.angles };\n case 'terrainHeight':\n return {\n terrainHeight: result?.terrainHeight,\n difference: result?.difference,\n position: result?.position,\n zeroPosition: result?.zeroPosition,\n };\n case 'coordinate':\n return { lnglat: result?.lnglat };\n default:\n return {};\n }\n }\n\n private _toCartesian(arr: [number, number, number]) {\n const Cesium = this.Cesium;\n return new Cesium.Cartesian3(arr[0], arr[1], arr[2]);\n }\n\n private _removeRecordVisual(_rec: MeasurementRecord) {\n const viewer = this.viewer;\n const Cesium = this.Cesium;\n const entities = viewer.entities.values;\n for (let i = entities.length - 1; i >= 0; i--) {\n const e = entities[i];\n try {\n viewer.entities.remove(e);\n } catch {}\n }\n const primitives = viewer.scene.primitives;\n const arr: any[] = [];\n primitives._primitives && primitives._primitives.forEach((p: any) => arr.push(p));\n for (const p of arr) {\n try {\n viewer.scene.primitives.remove(p);\n } catch {}\n }\n if (this.htmlLabelPool) {\n this.htmlLabelPool.removeAll();\n }\n }\n\n public toggleSpecifiedClear(containerId?: string) {\n if (!this.specifiedClear) {\n this.specifiedClear = true;\n if (!this.deleteLabelPool) {\n const cid = containerId || 'html-label-container';\n this.deleteLabelPool = new HtmlOverlayLabelPool(this.Cesium, this.viewer, cid);\n this.deleteLabelPool.registerTheme('measure-delete-label', {\n createElement: (el: HTMLDivElement, ctx: any) => {\n el.innerHTML = '删除';\n el.style.background = 'rgba(255,0,0,0.7)';\n el.style.color = '#fff';\n el.style.font = '12px sans-serif';\n el.style.padding = '2px 6px';\n el.style.borderRadius = '4px';\n el.style.whiteSpace = 'nowrap';\n },\n options: { offset: { x: 0, y: -10 } },\n });\n this.deleteLabelPool.eventBus.addListener(\n MarkerEventKey.Click,\n {\n name: 'measurement_delete_label_click',\n fn: (info: any) => {\n if (!info || info.theme !== 'measure-delete-label') return;\n const rid = info?.data?.recordId;\n if (rid) this.deleteMeasurement(rid);\n },\n },\n true,\n );\n }\n this._showDeleteLabels(containerId || 'html-label-container');\n } else {\n this._removeAllDeleteLabels();\n this.specifiedClear = false;\n }\n }\n\n public deleteMeasurement(recordId: string) {\n const handler = this.recordHandlers.get(recordId);\n if (handler) {\n try {\n handler.clear();\n } catch {}\n }\n this.recordHandlers.delete(recordId);\n this.measurements = this.measurements.filter((m) => m.id !== recordId);\n const did = this.deleteLabelIds.get(recordId);\n if (did && this.deleteLabelPool) {\n this.deleteLabelPool.removeByIds([did]);\n }\n this.deleteLabelIds.delete(recordId);\n }\n\n private _showDeleteLabels(containerId?: string) {\n if (!this.deleteLabelPool) return;\n const Cesium = this.Cesium;\n for (const rec of this.measurements) {\n const id = 'm_del_' + rec.id;\n if (this.deleteLabelIds.has(rec.id)) continue;\n const center = this._computeRecordCenter(rec);\n if (!center) continue;\n const carto = Cesium.Cartographic.fromCartesian(center);\n const lon = Cesium.Math.toDegrees(carto.longitude);\n const lat = Cesium.Math.toDegrees(carto.latitude);\n const h = carto.height || 0;\n this.deleteLabelPool.add(\n { recordId: rec.id },\n {\n id,\n lon,\n lat,\n height: h,\n theme: 'measure-delete-label',\n show: true,\n style: { zIndex: '1000' },\n },\n );\n this.deleteLabelIds.set(rec.id, id);\n }\n }\n\n private _removeAllDeleteLabels() {\n if (this.deleteLabelPool) {\n const ids = Array.from(this.deleteLabelIds.values());\n if (ids.length) this.deleteLabelPool.removeByIds(ids);\n }\n this.deleteLabelIds.clear();\n }\n\n private _computeRecordCenter(rec: MeasurementRecord) {\n const Cesium = this.Cesium;\n const posList = (rec.positions || []).map((p) => this._toCartesian(p));\n if (posList.length > 0) {\n const cx = posList.reduce((s, p) => s + p.x, 0) / posList.length;\n const cy = posList.reduce((s, p) => s + p.y, 0) / posList.length;\n const cz = posList.reduce((s, p) => s + p.z, 0) / posList.length;\n return new Cesium.Cartesian3(cx, cy, cz);\n }\n if (rec.type === 'coordinate' && rec.data?.lnglat) {\n const lng = rec.data.lnglat.lng;\n const lat = rec.data.lnglat.lat;\n const height = rec.data.lnglat.height || 0;\n return Cesium.Cartesian3.fromDegrees(lng, lat, height);\n }\n if (rec.type === 'terrainHeight' && rec.data?.position) {\n const p = rec.data.position;\n return new Cesium.Cartesian3(p.x, p.y, p.z);\n }\n return null;\n }\n}\n","import { PropType } from 'vue';\n\nexport const measurementProps = {\n Cesium: {\n type: Object as PropType<any>,\n required: false,\n },\n viewer: {\n type: Object as PropType<any>,\n required: false,\n },\n size: {\n type: String as PropType<'default' | 'small'>,\n default: 'small',\n },\n overlayContainerId: {\n type: String as PropType<string>,\n default: 'cx-measurement-overlay',\n },\n} as const;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAQ9JREFUOE+dkjESAUEQRe0NOAEiIaEMERluQCYQcAKcACcgFLqBlQn3BsgFbsD7zKixdlbVTtWv7e3/+0937wY5z3lwXCrgJEkTkxIag6NC0MxqsDAG86wGoWk7vYP4vL69xPPq6rUDZ1574z+Pht2La6BioWXm9pmcIOpJBv9u/eE/I1iGUSLiPEQpyQ1eHRbhy5b//AeQTZIHMESw9RgMyG9AH81eGtdART1Qgrz75uGiC1yERtq3AUm1fAZriAnvM576icR9xaZmxrOM5mIN5iReSVABU8gOxe14zPvIvcwaqOVQbVG0JL4Sr1JijdtFUwgQDXjRYrQUfYUx2IFbSlyD0w6GMlBRVfNmONETek2ROovJNQ4AAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAATBJREFUOE+lk4FNw0AMRbkJgAlYASYgTABMQNigTECZgDIBHaGdgHYCygZsAEwQ3ot8p2uUFqRasnKO7X/+PjsdDaTrunN+XaMN6lnZoCt0mVLyXCTVBskT7Of4t45ETYEu0W90CshLzisAJC/i5iXfliCDi+A/wZhHzAL/rc4eoLr5HodBO4XYFucr+kDsLAXnd37I72ZfcvZFtVK6EmDK4RE9HZa9CyzofOF/EmDVc0mpGXC2GoHlbrn2qEjJ42Cz5gT4AnXAJ8ZZ/Njgvxj4Z9h3VvAfgA8A8kz0OOQJ0P5Fwf5IYbKPgkEHNdHSbORbHo6a69g5nrHB1xw+SPmGapR9LidybJSdQJ+3DN3YMtmT46CVN0+alvyDuky+QC9bAPE8BnuLCcN1dom21vkXc/+iuK1zLp4AAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAABHNCSVQICAgIfAhkiAAAAQBJREFUKFONk4EZwTAUhGUDG9AJsAETYAI1iZoEE6gJ2AAT6AjdoP6rpEKbtvm+95F7r5e7a2oG3iqKYs726mMN/xfGmJvDzR9BZvfHAEkMXkAQ1Qg4Xc0DtWYgbSJgZgV+prbMlIeUCmgM+XlRTxqyEVzMSv6EipjNHUECsKNmgI8Ogin9O7VnNjEwju3pJwDZ6Fw8I/mbUoXdyNsUgqzz6Y9lHSqlqQjkaWTl5z0Jvpl577701JPAZbZwIcrT0qpotWHlK8SLMnMEvYP8CZDMqptIw8kKvsomuz6BgpF8yQtlIXxGjXWJlNf/txCD6Tq3reoa1wgEWJlBAv9L1NAbCC98xCsG9JwAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAGZJREFUOE9j/A8EDEiAEQiQ+ehsDPUgAZgmZDYuQzDUowvgsx0mh2IhupOAihoJGFKP4mUQB2pII9DkBkIuAKoFqamHuQIcYKMGDPkwoHpeACYLQompASMpIwsQSokgebx5gdTsDADpy5nxGGvoWgAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABHNCSVQICAgIfAhkiAAAAMVJREFUKFOVkoENwiAQRWUCu4k6gbhBnaB0g47iBtYJdASdQLsJG+D7yUGw0agkP4Xj/7t/R92iWimlwLEDaws/+I7OuVOmOW0gNnzOwIMJXI2g88rOe4QxC0RQ1kDwMqvaqgq4c7dzZuNIQBleyFkIRyI56CVQ9gZy9l0XKHt46idKEK2x4S3TgvAObLt/BSFbWmJp86VCsRQg/t60slrjmnf/YaxKOHHn64fTSLdApTU5LQ80vRtoy8NV85Y9Yf5rjJnzBCCwZhr1an8TAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAQFJREFUOE+VUzsSAUEQtZEj2FsQysjIyIRKtCmRkgnJyIRCmZURIZRxC07Be6pnq3e2Z5WuejX9mf5OT/QGVRRFIC37fOE+Fc5J86Eghfu+oiy7s+US+iXh0gvYAQPhjziHwA14AkmuZQoS5CGGPs49QHkMnIE1cBf+irPnqvgOTAIwc/OH8wR2JjADMEurJDOdSRugalXA/k6Bsp3zCnbOJ7ECsOe20bN2pn0eamEJQ8cbmO/cgH0B1EItzNS0LWe+Cp91agU4SHl8tpAzW7gA9SyAsUgjmTYHRgeWzczkqeNSZRQZq5zC2gW2QAxwN8hTRzkurLJW6OghvvQv/PudP2fPqPEaEaVuAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAVCAYAAACg/AXsAAAABHNCSVQICAgIfAhkiAAAAPZJREFUOE/tk0EOwUAUhs0NLCyRLsTa2ooT4ATqRuICWhfA1ik4AYmtBCeo769OUq1pxk7ES740fW/eP2/+aU3NEUmSnCk1c+W2MUa5Upi/iL8nWom5Kx59DO24vFPeaeyPieBHnSPtoAs9fDm5fCl5QvOYxSOYwAUacIMjRIjFRbFUhMaAxxRCuMMcNrCwt5OJqz6AJcQI7tPboaiCkooZhcjuRE3TtMhJLA1yViTIhML8JBITV9AkW5p1DNusY2raIWgjHe05iV1U2ElialqDhPR+yBol8BJVf7FuR82BJvvodoq7+LxXfvY+Am898W3Mr/ueSR4JpmsW0RAzTwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAWCAYAAAAb+hYkAAAABHNCSVQICAgIfAhkiAAAAR1JREFUOE+tk6FywkAURVlZ1SIqcK2owCE6g+YLWhwSiQOJI6hKcJXF9R9QqcUEybSmOFyLw4VzmSSThF0SGHbmTjbknXff7lxM5YJl8kwYhg1++0B6+qhtjPlP19mgJQUPaIa6KABqOaHIJaBgTKHH+5R9n32muc3pl8JbJGCA1jAaNVmuM82puEffqFl4JrVjrA6PT1QHWKVdtD9yiiBdgG7wEUjjZtZVoR6t31ENp01ZJ93aBFXzl3DqTBdBQzq+nevkAYzQDePtyp7pAOXjE8O2RNzxcYGekKKkHBamfEbhK/pBzxEk52RlnIiPXP7iQt7V4AWnqhPSBwp9Hkq5umu8L6BuERT/YwVuUSOfP1f2NKbgZelEpEex7fdW8nMXLD81JwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAANCAYAAACtpZ5jAAAABHNCSVQICAgIfAhkiAAAAN9JREFUOE+1krENwjAUROMNGAEqWtLSkJIONgAmwB2MQAkTwAbABjBBwgYZIRuYd8gWIIHiFLZ0svX/3eX8Y5MlWiaRb5be2DnXJ/0E3I0xdexN0PXgzsADXRV0r8Q0C7YzEKkBK0iXNnMfpvQ60aU76RCMZaaUFuzBEOz+GIsbkm05j8ECLIFuPMC8CcaOwoGCJYWM121pP/oVuhydjI8g10iCseLrqzdQgCvN+S9zP9OR703ZN/4Gqun/SP9+FT6pmkqgkUQtdOIqRA2sxvBlHOXSgZT+HXcIE0VNlvgJ9ttGDjhkGwIAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAU5JREFUOE+dkjFLQzEURnsRRUW0uDkI3XQo0m6Odms3QRHHjk5SNzfd/Ac66iKKIm0nHf0HduncooibiLo5PM/3SCAvlmL74NDk3uTk3jSWG/FLkmSTLUeQhwMbcX8OQZ89H46FcQWvCGbBxhFssfEGvqCeEfzpz6wVt+jWNInXzOwhFmT7MysPEFwT24BlBD+x4JmE+puGSRYUQwGnzzF/g0tye8rFAtm34RtmYIWFqir9EOzycwUV4o8ZAckCgSdowz68wD0LtckLdCfrsEQ8iQUXBPRISjoV4SHjEygy77ry35mfMm94qQU3v0bw1p9IXPfQhw6xKvM643MoM++EAi3Sy1Lf8yQl8iXros6gBjq1QH7V59MW3NPsMdbbJm+lQDDBWP/MFCzCHfmdWKC+j52gwYLM4+EACdT7p9aEFaYVhLZB42EV/lcwtMJfrJ6SRKgz9VoAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAMZJREFUOE9jZACC////JwApeRCbSOAAVGcBxMsZgZpBnP1EakRX9h3ZAEdGRsYDUBf9B7IZsRkKtNAAKH4CiFmBuJskA6CaQa59CMQOQDs+EG0ANs0gF+IMA2Qv4NKMbgA8DJD9jk8zQQMIacZrADGacRpArGasBpCiGcMAoMAHaKoEJSIDYEw8IJRCkaOxEKi4HhS10ERygZBmmAsWABnxUMUfSdEMM+A/VDOINgI6myibYa4DeWEekBMHxHOAmjOIcTayGgDyvZQkMv2X2QAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAMFJREFUOE+Vk70NwjAQRnMVJekQHRvACBkBNqCkgw0IHV0yAiOxAaGkgg3MuyAjix/nztInpbj34thfpHCsEELFeEMWpCMrcfAFgjPzM3Iia3LxCgLQQURqZC3PW6/gATQiR7IjV7OAN9YAe3IjE4XJ0iRI4H776bkNCnKwirKCITgrsMB/BVb4p8AD94KPeuo9l7EslpaqIK3nBujOVU0tcNzBdz0xeAQdw2Oi3X7VU0T/NtOKZ6Dw/F1PEf0s03oC+SBfAKxisH4AAAAASUVORK5CYII=\"","<template>\r\n <div v-show=\"visible\" :class=\"[bem.b('box'), bem.is('small', props.size === 'small')]\">\r\n <div\r\n v-for=\"type in types\"\r\n :key=\"type.key\"\r\n :class=\"[bem.be('box', 'btn'), { active: activeType === type.key }]\"\r\n @click=\"handleMeasure(type.key)\"\r\n >\r\n <div :class=\"bem.be('box', 'icon')\">\r\n <img :src=\"type.icon\" :alt=\"type.label\" />\r\n </div>\r\n {{ type.label }}\r\n </div>\r\n <div :class=\"bem.be('box', 'btn')\" @click=\"handleSpecifiedClear\">\r\n <div :class=\"bem.be('box', 'icon')\">\r\n <img :src=\"iconClear\" alt=\"指定清除\" />\r\n </div>\r\n 指定清除\r\n </div>\r\n <div :class=\"bem.be('box', 'btn')\" @click=\"handleClear\">\r\n <div :class=\"bem.be('box', 'icon')\">\r\n <img :src=\"iconClear\" alt=\"清除\" />\r\n </div>\r\n 清除全部\r\n </div>\r\n </div>\r\n <div :id=\"overlayContainerId\" :class=\"bem.be('box', 'container')\"></div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n import { ref, onMounted, onUnmounted, unref, inject, Ref, watch } from 'vue';\r\n import { createNamespace, prefix } from '../../../../../utils/create';\r\n import { measurementProps } from './measurement';\r\n import { MeasurementTool } from '../../../../../cesium-core/src';\r\n\r\n // Icons\r\n import iconClear from '../../../assets/icons/icon-001.png';\r\n import iconCoordinate from '../../../assets/icons/icon-002.png';\r\n import iconRegular from '../../../assets/icons/icon-003.png';\r\n import iconRectangle from '../../../assets/icons/icon-004.png';\r\n import iconCircle from '../../../assets/icons/icon-005.png';\r\n import iconArea from '../../../assets/icons/icon-006.png';\r\n import iconHeight from '../../../assets/icons/icon-007.png';\r\n import iconVertical from '../../../assets/icons/icon-008.png';\r\n import iconHorizontal from '../../../assets/icons/icon-009.png';\r\n import iconPolyline from '../../../assets/icons/icon-010.png';\r\n import iconTriangle from '../../../assets/icons/icon-011.png';\r\n import iconSpace from '../../../assets/icons/icon-012.png';\r\n\r\n defineOptions({ name: `${prefix}-measurement` });\r\n const props = defineProps(measurementProps);\r\n const bem = createNamespace('measurement');\r\n const overlayContainerId = props.overlayContainerId || 'cx-measurement-overlay';\r\n\r\n const types = [\r\n { key: 'horizontal', label: '水平测距', icon: iconHorizontal },\r\n { key: 'vertical', label: '垂直测距', icon: iconVertical },\r\n { key: 'space', label: '空间测距', icon: iconSpace },\r\n { key: 'triangle', label: '三角测量', icon: iconTriangle },\r\n { key: 'polyline', label: '折线测距', icon: iconPolyline },\r\n { key: 'area', label: '面积测量', icon: iconArea },\r\n { key: 'circle', label: '圆形测量', icon: iconCircle },\r\n { key: 'rectangle', label: '矩形测量', icon: iconRectangle },\r\n { key: 'regularPolygon', label: '正多边形', icon: iconRegular },\r\n { key: 'terrainHeight', label: '地形高度', icon: iconHeight },\r\n { key: 'coordinate', label: '坐标查询', icon: iconCoordinate },\r\n ];\r\n\r\n const activeType = ref('');\r\n const visible = ref(false);\r\n const tool = ref<MeasurementTool | null>(null);\r\n let cesiumInstance: any = null;\r\n const leitingMethods = inject('leitingMethods') as Ref<any>;\r\n const init = (Cesium: any, viewer: any) => {\r\n if (!Cesium || !viewer) return;\r\n cesiumInstance = Cesium;\r\n tool.value = new MeasurementTool({ Cesium, viewer });\r\n };\r\n\r\n const handleMeasure = (type: string) => {\r\n const methods = unref(leitingMethods) as any;\r\n if (!tool.value && methods) {\r\n const Cesium = methods.getCesium();\r\n const viewer = methods.getViewer();\r\n cesiumInstance = Cesium;\r\n tool.value = new MeasurementTool({ Cesium, viewer });\r\n }\r\n if (!tool.value || !cesiumInstance) return;\r\n\r\n if (type === 'clear') {\r\n handleClear();\r\n return;\r\n }\r\n // 同类型连续测量:保持选中状态,直接再次启动测量\r\n activeType.value = type;\r\n tool.value.measure(type as any, {\r\n overlayContainerId,\r\n color: cesiumInstance.Color.YELLOW.withAlpha(0.5),\r\n lineColor: cesiumInstance.Color.fromCssColorString('#51ff00'),\r\n dashLineColor: cesiumInstance.Color.RED,\r\n pointColor: cesiumInstance.Color.YELLOW,\r\n });\r\n };\r\n\r\n const handleClear = () => {\r\n if (tool.value) {\r\n tool.value.clearAll();\r\n activeType.value = '';\r\n }\r\n };\r\n\r\n const handleSpecifiedClear = () => {\r\n if (tool.value) {\r\n tool.value.toggleSpecifiedClear(overlayContainerId);\r\n }\r\n };\r\n\r\n const open = (val: boolean) => {\r\n visible.value = val;\r\n };\r\n\r\n function load() {\r\n if (tool.value) return tool.value;\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);\r\n } else if (props.Cesium && props.viewer) {\r\n init(Cesium, viewer);\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 onMounted(() => {\r\n load();\r\n });\r\n\r\n onUnmounted(() => {\r\n if (tool.value) {\r\n tool.value.clear();\r\n tool.value = null;\r\n }\r\n });\r\n\r\n defineExpose({\r\n init,\r\n open,\r\n tool,\r\n setMeasurementInfo(config: any) {\r\n if (tool.value) {\r\n config.measurements?.forEach((item: any) => {\r\n item.options = {\r\n overlayContainerId,\r\n color: cesiumInstance.Color.YELLOW,\r\n lineColor: cesiumInstance.Color.fromCssColorString('#51ff00'),\r\n dashLineColor: cesiumInstance.Color.RED,\r\n pointColor: cesiumInstance.Color.YELLOW,\r\n };\r\n });\r\n tool.value.setMeasurementsConfig(config);\r\n }\r\n },\r\n getMeasurementInfo() {\r\n if (tool.value) {\r\n let config = tool.value.getMeasurementsConfig();\r\n config.measurements?.forEach((item: any) => {\r\n delete item.options;\r\n });\r\n return config;\r\n }\r\n return {\r\n measurements: [],\r\n };\r\n },\r\n });\r\n</script>\r\n","import { withInstall } from '../../../../utils/with-install';\r\nimport _Measurement from './src/Measurement.vue';\r\nexport * from './src/measurement';\r\n\r\nconst CxMeasurement = withInstall(_Measurement);\r\nexport { CxMeasurement };\r\nexport default CxMeasurement;\r\n"],"names":["HorizontalMeasure","Cesium","viewer","options","containerId","HtmlOverlayLabelPool","el","ctx","movement","pos","carto","lng","lat","clampedPos","point","terrainHeight","groundPos","groundDashColor","groundLine","p1","p2","c1","c2","entity","d","mid","mc","id","total","i","geodesic","last","lc","result","e","p","record","htmlLabelPool","opts","lineColor","dashColor","width","posList","seg","sid","VerticalMeasure","ray0","cart","c0","base","basePoint","solidColor","ray","O","D","B","U","w0","a","b","c","den","s","second","solidColor2","dashColor2","secondPoint","vertical","pid","TriangleMeasure","h1","h2","low","high","cl","maxH","third","horizontal","hypotenuse","lenV","lenH","lenHyp","midV","midH","midHyp","mV","mH","mHyp","idV","idH","idHyp","vLowToHigh","vLowToThird","vHighToThird","vHighToLow","dotA","magA","dotB","magB","angleA","angleB","cLow","cHigh","idAngA","idAngB","ratio","markerLen","dirV","dirH","pOffV","pOffH","pCorner","rightMarkerSeg1","rightMarkerSeg2","pv","ph","phyp","pLow","pHigh","t","SpaceMeasure","p0","AreaMeasure","hierarchy","geom","instance","color","occludedColor","polylinePositions","lineEntity","pts","center","points2D","area2D","j","cc","all","pointColor","hoverPoint","lastPoint","p2d","prev","curr","next","v1x","v1y","v2x","v2y","len1","len2","dot","ang","pc","aid","primitive","CircleMeasure","text","click","position","edge","radius","area","perimeter","centerLabelPos","cartoCenter","h","PolylineDistanceMeasure","lastId","TerrainHeightMeasure","terrainPos","heightDiff","labelText","CoordinateMeasure","ll","RectangleMeasure","thirdPoint","rect","corners","height","edges","mc2","surfacePositions","corner","pointEntity","tPrev","ep1","ep2","p3","plane","pts2d","vx","vy","baseLen","ux","nx","ny","wx","wy","d2","worldPoints","p2w","rect2d","RegularPolygonMeasure","sides","points","uniquePoints","step","angle","x","y","MeasurementTool","type","handler","currentHandler","wrapped","o","idx","disableLeftClick","disableDoubleClick","m","config","rec","r","arr","_rec","entities","primitives","cid","MarkerEventKey","info","rid","recordId","did","lon","ids","cx","cy","cz","measurementProps","iconClear","iconCoordinate","iconRegular","iconRectangle","iconCircle","iconArea","iconHeight","iconVertical","iconHorizontal","iconPolyline","iconTriangle","iconSpace","props","__props","bem","createNamespace","overlayContainerId","types","activeType","ref","visible","tool","cesiumInstance","leitingMethods","inject","init","handleMeasure","methods","unref","handleClear","handleSpecifiedClear","open","val","load","watch","nv","ov","onMounted","onUnmounted","__expose","item","_createElementVNode","_normalizeClass","_unref","_createElementBlock","_Fragment","_renderList","$event","_toDisplayString","CxMeasurement","withInstall","_Measurement"],"mappings":"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"}