cesium-xs-sdk 1.0.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cesium-xs-sdk.cjs.js","sources":["../src/core/Config.js","../src/modules/SceneModule.js","../src/utils/PlotGeometryUtil.js","../src/modules/PlotGraphicType.js","../src/modules/GraphicModule.js","../src/modules/EventModule.js","../src/modules/tools/BaseTool.js","../src/modules/tools/DrawTool.js","../src/modules/tools/EditTool.js","../src/modules/tools/SelectTool.js","../src/modules/tools/DeleteTool.js","../src/modules/EditorModule.js","../src/core/ModuleManager.js","../src/utils/CoordinateUtil.js","../src/utils/GeoCalcUtil.js","../src/index.js"],"sourcesContent":["/**\r\n * 全局配置类(对应平台 Application 单件)\r\n * 管理 Cesium Token、默认参数、模块开关\r\n */\r\nexport class Config {\r\n static instance = null;\r\n // 单例模式\r\n static getInstance() {\r\n if (!this.instance) {\r\n this.instance = new Config();\r\n }\r\n return this.instance;\r\n }\r\n\r\n constructor() {\r\n // 默认配置(对齐平台参数规范)\r\n this.config = {\r\n cesiumToken: '', // Cesium Ion Token\r\n // 场景默认参数\r\n scene: {\r\n animation: false,\r\n timeline: false,\r\n baseLayerPicker: false,\r\n fullscreenButton: false,\r\n geocoder: false,\r\n homeButton: false,\r\n infoBox: false,\r\n sceneModePicker: false,\r\n selectionIndicator: false,\r\n navigationHelpButton: false,\r\n navigationInstructionsInitiallyVisible: false,\r\n depthTestAgainstTerrain: true, // 默认开启深度检测\r\n },\r\n // 图元默认样式:延迟到 getConfig 时再构造,避免在 Cesium 未加载/未 mock 时崩溃\r\n // (对 SSR 和单元测试更友好)\r\n };\r\n }\r\n\r\n /**\r\n * 构造图元默认样式(延迟初始化)\r\n * @private\r\n */\r\n #getGraphicDefaults() {\r\n if (typeof Cesium === 'undefined') {\r\n return {};\r\n }\r\n\r\n const withAlpha = (color, alpha) => {\r\n if (color && typeof color.withAlpha === 'function') {\r\n return color.withAlpha(alpha);\r\n }\r\n return color;\r\n };\r\n\r\n return {\r\n point: { pixelSize: 8, color: Cesium.Color.RED },\r\n line: { width: 2, material: Cesium.Color.BLUE },\r\n polygon: { color: withAlpha(Cesium.Color.GREEN, 0.5) },\r\n plot: {\r\n polygon: {\r\n color: withAlpha(Cesium.Color.BLUE, 0.5),\r\n outlineColor: Cesium.Color.BLUE,\r\n outlineWidth: 2\r\n },\r\n line: {\r\n material: Cesium.Color.BLUE,\r\n width: 2\r\n }\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * 设置全局配置(参数化配置)\r\n * @param {Object} options 配置项(支持部分覆盖)\r\n * @example\r\n * Config.getInstance().setConfig({\r\n * cesiumToken: 'your-token',\r\n * scene: { terrainProvider: await Cesium.createWorldTerrainAsync() }\r\n * });\r\n */\r\n setConfig(options) {\r\n for (const k in options) {\r\n // 1. 标量/数组/null -> 直接覆盖\r\n if (\r\n typeof options[k] !== 'object' ||\r\n Array.isArray(options[k]) ||\r\n options[k] === null\r\n ) {\r\n this.config[k] = options[k];\r\n continue;\r\n }\r\n\r\n // 2. scene -> 深度缺省合并\r\n if (k === 'scene') {\r\n this.config.scene = this.config.scene || {};\r\n this.#defaultsDeep(this.config.scene, options.scene);\r\n continue;\r\n }\r\n\r\n // 3. 其他对象 -> 浅层缺省(或按需改成深度)\r\n this.config[k] = this.config[k] || {};\r\n this.#defaultsShallow(this.config[k], options[k]);\r\n }\r\n\r\n console.log('config', this.config);\r\n\r\n\r\n // Token 同步\r\n if (options.cesiumToken) {\r\n Cesium.Ion.defaultAccessToken = options.cesiumToken;\r\n }\r\n }\r\n\r\n /**\r\n * 获取全局配置\r\n * @returns {Object} 完整配置\r\n */\r\n getConfig() {\r\n const graphicDefaults = this.#getGraphicDefaults();\r\n const userGraphic = this.config.graphic || {};\r\n\r\n // 深度合并 plot,避免用户只传 polygon 时丢失 line 默认样式\r\n const plot = userGraphic.plot\r\n ? { ...graphicDefaults.plot, ...userGraphic.plot }\r\n : graphicDefaults.plot;\r\n\r\n return {\r\n ...this.config,\r\n graphic: {\r\n ...graphicDefaults,\r\n ...userGraphic,\r\n plot\r\n }\r\n };\r\n }\r\n\r\n #defaultsDeep(target, src) {\r\n for (const k in src) {\r\n const sv = src[k];\r\n const tv = target[k];\r\n\r\n // 1. 非对象 || 数组 || null -> 直接补缺失\r\n if (typeof sv !== 'object' || Array.isArray(sv) || sv === null) {\r\n if (!Object.prototype.hasOwnProperty.call(target, k)) {\r\n target[k] = sv;\r\n }\r\n continue;\r\n }\r\n\r\n // 2. 特殊类实例(Promise、TerrainProvider…)-> 整棵补缺失,不展开\r\n if (\r\n sv instanceof Promise ||\r\n (sv.constructor && sv.constructor.name !== 'Object') // 普通 Object 字面量才继续\r\n ) {\r\n if (!Object.prototype.hasOwnProperty.call(target, k)) {\r\n target[k] = sv;\r\n }\r\n continue;\r\n }\r\n\r\n // 3. 普通对象 -> 递归\r\n target[k] = tv || {};\r\n this.#defaultsDeep(target[k], sv);\r\n }\r\n }\r\n\r\n /* 浅层缺省工具 */\r\n #defaultsShallow(target, src) {\r\n for (const k in src) {\r\n if (!Object.prototype.hasOwnProperty.call(target, k)) {\r\n target[k] = src[k];\r\n }\r\n }\r\n }\r\n}","import { Config } from '../core/Config.js';\r\n\r\n/**\r\n * 图层类型枚举\r\n * @readonly\r\n * @enum {string}\r\n */\r\nexport const LayerType = Object.freeze({\r\n /** XYZ 瓦片服务 */\r\n XYZ: 'xyz',\r\n /** WMTS 瓦片服务 */\r\n WMTS: 'wmts',\r\n /** WMS 动态地图服务 */\r\n WMS: 'wms',\r\n /** TMS 瓦片服务 */\r\n TMS: 'tms',\r\n /** 单张图片 */\r\n SINGLE_IMAGE: 'single_image',\r\n /** 地形数据 */\r\n TERRAIN: 'terrain',\r\n /** 3D Tiles 模型数据集 */\r\n '3DTILES': '3dtiles'\r\n});\r\n\r\n\r\n// ========== 私有工厂函数(文件内部) ==========\r\n\r\n/**\r\n * 根据 URL 自动推断图层类型\r\n * @param {string} url 服务地址\r\n * @returns {string} LayerType 值\r\n */\r\nfunction autoDetectType(url) {\r\n const u = url.toLowerCase();\r\n\r\n // 1. 3DTiles — 以 .json 结尾或包含 3dtiles/3d_tiles\r\n if (/\\.json(?:[?#]|$)/.test(u) || u.includes('3dtiles') || u.includes('3d_tiles')) {\r\n return LayerType['3DTILES'];\r\n }\r\n\r\n // 2. 地形 — 包含 terrain / dem / gdem / 水深 / elevation 关键词\r\n if (/\\/(?:terrain|dem|gdem|水深|elevation|ele)(\\/|$)/.test(u) || /[?&#]terrain=/.test(u)) {\r\n return LayerType.TERRAIN;\r\n }\r\n\r\n // 3. WMTS — 包含 wmts 关键词 或 TileMatrixSet 参数\r\n if (u.includes('wmts') || u.includes('tilematrixset')) {\r\n return LayerType.WMTS;\r\n }\r\n\r\n // 4. WMS — 包含 wms 关键词 或 GetMap 请求参数\r\n if (u.includes('wms') || u.includes('getmap') || u.includes('request=getmap')) {\r\n return LayerType.WMS;\r\n }\r\n\r\n // 5. TMS — 包含 tms 关键词 或 {-y} 反转瓦片\r\n if (u.includes('tms') || u.includes('{-y}')) {\r\n return LayerType.TMS;\r\n }\r\n\r\n // 6. XYZ — URL 模板包含 {z} {x} {y}\r\n if (/\\{[xyz]\\}/.test(u)) {\r\n return LayerType.XYZ;\r\n }\r\n\r\n // 7. 单张影像 — 有常见图片后缀且无瓦片模板\r\n if (/\\.(?:png|jpe?g|tiff?|gif|bmp|img)(?:[?#]|$)/.test(u)) {\r\n return LayerType.SINGLE_IMAGE;\r\n }\r\n\r\n // 默认按 XYZ 处理(最常见的瓦片格式)\r\n return LayerType.XYZ;\r\n}\r\n\r\n/**\r\n * 根据类型创建对应的 Cesium Provider\r\n * @param {string} type LayerType 值\r\n * @param {string} url 服务地址\r\n * @param {Object} opts 用户传入的配置\r\n * @returns {Object} Cesium Provider 实例\r\n */\r\nfunction createProviderByType(type, url, opts) {\r\n switch (type) {\r\n case LayerType.XYZ:\r\n case LayerType.TMS:\r\n // XYZ / TMS 均使用 UrlTemplateImageryProvider\r\n return new Cesium.UrlTemplateImageryProvider({ url, ...opts });\r\n\r\n case LayerType.WMTS:\r\n return new Cesium.WebMapTileServiceImageryProvider({\r\n url,\r\n layer: opts.layer,\r\n style: opts.style || 'default',\r\n format: opts.format || 'image/jpeg',\r\n tileMatrixSetID: opts.tileMatrixSetID || 'EPSG:4326',\r\n ...opts\r\n });\r\n\r\n case LayerType.WMS:\r\n return new Cesium.WebMapServiceImageryProvider({\r\n url,\r\n layers: opts.layers || '',\r\n parameters: { transparent: true, format: 'image/png', ...opts.parameters },\r\n ...opts\r\n });\r\n\r\n case LayerType.SINGLE_IMAGE:\r\n return new Cesium.SingleTileImageryProvider({\r\n url,\r\n rectangle: opts.extent ? Cesium.Rectangle.fromDegrees(...opts.extent) : undefined,\r\n credit: opts.credit || '',\r\n ...opts\r\n });\r\n\r\n case LayerType.TERRAIN:\r\n // fromUrl 返回 Promise,由 addProviderToViewer 统一 await\r\n return Cesium.CesiumTerrainProvider.fromUrl(url, {\r\n requestWaterMask: opts.requestWaterMask ?? false,\r\n requestVertexNormals: opts.requestVertexNormals ?? false,\r\n ...opts\r\n });\r\n\r\n case LayerType['3DTILES']:\r\n return new Cesium.Cesium3DTileset({\r\n url,\r\n maximumScreenSpaceError: opts.maximumScreenSpaceError ?? 16,\r\n maximumMemoryUsage: opts.maximumMemoryUsage ?? 512,\r\n ...opts\r\n });\r\n\r\n default:\r\n throw new Error(`SceneModule: 不支持的图层类型 \"${type}\",可用值: ${Object.values(LayerType).join(', ')}`);\r\n }\r\n}\r\n\r\n/**\r\n * 将 Provider 添加到 Viewer 并返回句柄\r\n * terrain 类型返回 provider 自身(不是 layer)\r\n * 3dtiles 类型返回 tileset\r\n * 其余返回 ImageryLayer\r\n * @param {string} type LayerType\r\n * @param {Object} viewer Cesium.Viewer\r\n * @param {Object} providerType Cesium Provider\r\n * @param {boolean} visible 是否可见\r\n * @returns {Object} layer/tileset/provider\r\n */\r\nasync function addProviderToViewer(type, viewer, providerType, visible) {\r\n if (type === LayerType.TERRAIN) {\r\n const provider = await providerType\r\n viewer.terrainProvider = provider;\r\n return provider;\r\n }\r\n if (type === LayerType['3DTILES']) {\r\n const tileset = viewer.scene.primitives.add(providerType);\r\n tileset.show = visible ?? true;\r\n return tileset;\r\n }\r\n const layer = viewer.imageryLayers.addImageryProvider(providerType);\r\n layer.show = visible ?? true;\r\n return layer;\r\n}\r\n\r\n\r\n// ========== 图层包装器 ==========\r\n\r\n/**\r\n * 影像图层包装器\r\n */\r\nclass ImageryLayerWrapper {\r\n constructor(sceneModule, layer, layerId) {\r\n this._layer = layer;\r\n this._sceneModule = sceneModule;\r\n this._layerId = layerId;\r\n this._pickable = true;\r\n this._eventEnabled = true;\r\n }\r\n\r\n setVisible(visible) {\r\n this._layer.show = visible;\r\n return this;\r\n }\r\n\r\n setAlpha(alpha) {\r\n this._layer.alpha = alpha;\r\n return this;\r\n }\r\n\r\n setBrightness(brightness) {\r\n this._layer.brightness = brightness;\r\n return this;\r\n }\r\n\r\n setContrast(contrast) {\r\n this._layer.contrast = contrast;\r\n return this;\r\n }\r\n\r\n setHue(hue) {\r\n this._layer.hue = hue;\r\n return this;\r\n }\r\n\r\n setSaturation(saturation) {\r\n this._layer.saturation = saturation;\r\n return this;\r\n }\r\n\r\n setGamma(gamma) {\r\n this._layer.gamma = gamma;\r\n return this;\r\n }\r\n\r\n enableEdit(enabled) {\r\n this._pickable = enabled;\r\n return this;\r\n }\r\n\r\n enableEvent(enabled) {\r\n this._eventEnabled = enabled;\r\n if (this._layer.imageryProvider && this._layer.imageryProvider.enablePickFeatures) {\r\n this._layer.imageryProvider.enablePickFeatures = enabled;\r\n }\r\n return this;\r\n }\r\n\r\n getExtent() {\r\n const provider = this._layer.imageryProvider;\r\n if (provider && provider.rectangle) {\r\n const rect = provider.rectangle;\r\n return {\r\n west: Cesium.Math.toDegrees(rect.west),\r\n south: Cesium.Math.toDegrees(rect.south),\r\n east: Cesium.Math.toDegrees(rect.east),\r\n north: Cesium.Math.toDegrees(rect.north)\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n getRange() {\r\n const provider = this._layer.imageryProvider;\r\n return {\r\n minLevel: provider.minimumLevel || 0,\r\n maxLevel: provider.maximumLevel || 18\r\n };\r\n }\r\n\r\n getLayer() {\r\n return this._layer;\r\n }\r\n\r\n remove() {\r\n this._sceneModule.removeLayer(this._layerId);\r\n return this;\r\n }\r\n}\r\n\r\n/**\r\n * 地形图层包装器\r\n */\r\nclass TerrainLayerWrapper {\r\n constructor(sceneModule, provider, layerId) {\r\n this._provider = provider;\r\n this._sceneModule = sceneModule;\r\n this._layerId = layerId;\r\n this._visible = true;\r\n }\r\n\r\n setVisible(visible) {\r\n this._visible = visible;\r\n return this;\r\n }\r\n\r\n getExtent() {\r\n if (this._provider.rectangle) {\r\n const rect = this._provider.rectangle;\r\n return {\r\n west: Cesium.Math.toDegrees(rect.west),\r\n south: Cesium.Math.toDegrees(rect.south),\r\n east: Cesium.Math.toDegrees(rect.east),\r\n north: Cesium.Math.toDegrees(rect.north)\r\n };\r\n }\r\n return { west: -180, south: -85, east: 180, north: 85 };\r\n }\r\n\r\n getProvider() {\r\n return this._provider;\r\n }\r\n\r\n remove() {\r\n this._sceneModule.removeLayer(this._layerId);\r\n return this;\r\n }\r\n}\r\n\r\n/**\r\n * 3DTiles 图层包装器\r\n */\r\nclass TilesetLayerWrapper {\r\n constructor(sceneModule, tileset, layerId) {\r\n this._tileset = tileset;\r\n this._sceneModule = sceneModule;\r\n this._layerId = layerId;\r\n }\r\n\r\n setVisible(visible) {\r\n this._tileset.show = visible;\r\n return this;\r\n }\r\n\r\n setStyle(style) {\r\n this._tileset.style = style;\r\n return this;\r\n }\r\n\r\n getExtent() {\r\n if (this._tileset.boundingSphere) {\r\n const bs = this._tileset.boundingSphere;\r\n const cartographic = Cesium.Cartographic.fromCartesian(bs.center);\r\n const rect = this._tileset.rectangle;\r\n if (rect) {\r\n return {\r\n west: Cesium.Math.toDegrees(rect.west),\r\n south: Cesium.Math.toDegrees(rect.south),\r\n east: Cesium.Math.toDegrees(rect.east),\r\n north: Cesium.Math.toDegrees(rect.north),\r\n center: [\r\n Cesium.Math.toDegrees(cartographic.longitude),\r\n Cesium.Math.toDegrees(cartographic.latitude)\r\n ]\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n locateTo() {\r\n return this._sceneModule.viewer.zoomTo(this._tileset);\r\n }\r\n\r\n getTileset() {\r\n return this._tileset;\r\n }\r\n\r\n remove() {\r\n this._sceneModule.removeLayer(this._layerId);\r\n return this;\r\n }\r\n}\r\n\r\n\r\n// ========== SceneModule ==========\r\n\r\n/**\r\n * 场景+图层管理模块\r\n */\r\nexport class SceneModule {\r\n constructor(viewer) {\r\n this.viewer = viewer;\r\n this.config = Config.getInstance().getConfig();\r\n this.layerMap = new Map(); // 图层缓存(ID -> Wrapper 实例)\r\n }\r\n\r\n // ========== 坐标转换 ==========\r\n\r\n lonLatToWorld(lon, lat, height = 0) {\r\n return Cesium.Cartesian3.fromDegrees(lon, lat, height);\r\n }\r\n\r\n worldToLonLat(cartesian) {\r\n const cartographic = Cesium.Cartographic.fromCartesian(cartesian);\r\n return [\r\n Cesium.Math.toDegrees(cartographic.longitude),\r\n Cesium.Math.toDegrees(cartographic.latitude),\r\n cartographic.height\r\n ];\r\n }\r\n\r\n screenToWorld(x, y) {\r\n const screenPosition = new Cesium.Cartesian2(x, y);\r\n if (this.viewer.scene.pickPositionSupported) {\r\n const precisePosition = this.viewer.scene.pickPosition(screenPosition);\r\n if (precisePosition) return precisePosition;\r\n }\r\n const ray = this.viewer.camera.getPickRay(screenPosition);\r\n const globePosition = this.viewer.scene.globe.pick(ray, this.viewer.scene);\r\n if (globePosition) return globePosition;\r\n return this.viewer.camera.pickEllipsoid(screenPosition, Cesium.Ellipsoid.WGS84);\r\n }\r\n\r\n worldToScreen(cartesian) {\r\n return this.viewer.scene.cartesianToCanvasCoordinates(cartesian);\r\n }\r\n\r\n screenToLonLat(x, y) {\r\n const worldCoord = this.screenToWorld(x, y);\r\n return worldCoord ? this.worldToLonLat(worldCoord) : null;\r\n }\r\n\r\n lonLatToScreen(lon, lat, height = 0) {\r\n const worldCoord = this.lonLatToWorld(lon, lat, height);\r\n return this.worldToScreen(worldCoord);\r\n }\r\n\r\n lonLatToCartographic(lon, lat, height = 0) {\r\n return new Cesium.Cartographic(Cesium.Math.toRadians(lon), Cesium.Math.toRadians(lat), height);\r\n }\r\n\r\n cartographicToLonLat(cartographic) {\r\n return [\r\n Cesium.Math.toDegrees(cartographic.longitude),\r\n Cesium.Math.toDegrees(cartographic.latitude),\r\n cartographic.height\r\n ];\r\n }\r\n\r\n // ========== 统一图层工厂 ==========\r\n\r\n /**\r\n * 通用图层创建工厂(自动从 URL 推断类型)\r\n * @param {string} url 服务地址\r\n * @param {Object} [options={}] 配置选项\r\n * @param {string} [options.type] 强制指定图层类型,见 {@link LayerType},不提供则自动推断\r\n * @param {string} [options.layerId] 图层唯一 ID,不提供则自动生成\r\n * @param {boolean} [options.visible=true] 是否可见\r\n * @param {number} [options.minimumLevel=0] 最小层级\r\n * @param {number} [options.maximumLevel=18] 最大层级\r\n * @param {string} [options.credit=''] 版权信息\r\n * @param {Array<number>} [options.extent] 范围 [west, south, east, north](单张影像用)\r\n * @param {string} [options.layer] WMTS 层名\r\n * @param {string} [options.style] WMTS 样式\r\n * @param {string} [options.format] WMTS 格式\r\n * @param {string} [options.tileMatrixSetID] WMTS 瓦片矩阵集\r\n * @param {string} [options.layers] WMS 图层名\r\n * @param {Object} [options.parameters] WMS 额外参数\r\n * @param {boolean} [options.requestWaterMask] 地形请求水面遮罩\r\n * @param {boolean} [options.requestVertexNormals] 地形请求顶点法线\r\n * @param {number} [options.maximumScreenSpaceError] 3DTiles 最大屏幕空间误差\r\n * @param {number} [options.maximumMemoryUsage] 3DTiles 最大内存占用(MB)\r\n * @param {boolean} [options.autoLocate=true] 3DTiles 创建后自动定位\r\n * @returns {ImageryLayerWrapper|TerrainLayerWrapper|TilesetLayerWrapper} 图层包装器\r\n * @example\r\n * // 自动推断类型(推荐)\r\n * sceneModule.createLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { layerId: 'osm' });\r\n * sceneModule.createLayer('https://example.com/tileset.json');\r\n * sceneModule.createLayer('https://example.com/terrain');\r\n *\r\n * // 显式指定类型(覆盖自动推断)\r\n * sceneModule.createLayer('https://example.com/wmts', { type: LayerType.WMTS, layer: 'vec' });\r\n */\r\n async createLayer(url, options = {}) {\r\n const type = options.type ?? autoDetectType(url);\r\n const layerId = options.layerId || `${type}_${Date.now()}`;\r\n\r\n if (this.layerMap.has(layerId)) {\r\n console.warn(`图层 ${layerId} 已存在`);\r\n return this.layerMap.get(layerId);\r\n }\r\n\r\n const visible = options.visible !== false;\r\n const provider = createProviderByType(type, url, options);\r\n const layerOrEntity = await addProviderToViewer(type, this.viewer, provider, visible);\r\n const wrapper = this.#wrapLayer(type, layerOrEntity, layerId);\r\n\r\n // 3DTiles 自动定位(readyPromise 已移除,改用 initialTilesLoaded 一次性事件)\r\n if (type === LayerType['3DTILES'] && options.autoLocate !== false) {\r\n const removeListener = layerOrEntity.initialTilesLoaded.addEventListener(() => {\r\n removeListener();\r\n this.viewer.zoomTo(layerOrEntity);\r\n });\r\n }\r\n\r\n this.layerMap.set(layerId, wrapper);\r\n console.log(`${type} 图层 ${layerId} 创建成功`);\r\n return wrapper;\r\n }\r\n\r\n /** 根据类型实例化对应包装器 */\r\n #wrapLayer(type, layerOrEntity, layerId) {\r\n if (type === LayerType.TERRAIN) {\r\n return new TerrainLayerWrapper(this, layerOrEntity, layerId);\r\n }\r\n if (type === LayerType['3DTILES']) {\r\n return new TilesetLayerWrapper(this, layerOrEntity, layerId);\r\n }\r\n return new ImageryLayerWrapper(this, layerOrEntity, layerId);\r\n }\r\n\r\n // ========== 图层管理 ==========\r\n\r\n /**\r\n * 删除图层\r\n * @param {string} layerId 图层 ID\r\n * @returns {boolean} 是否删除成功\r\n */\r\n removeLayer(layerId) {\r\n if (!this.layerMap.has(layerId)) {\r\n console.warn(`图层 ${layerId} 不存在`);\r\n return false;\r\n }\r\n\r\n const layer = this.layerMap.get(layerId);\r\n\r\n if (layer instanceof ImageryLayerWrapper) {\r\n this.viewer.imageryLayers.remove(layer.getLayer());\r\n } else if (layer instanceof TerrainLayerWrapper) {\r\n // 地形无法直接删除,重置为默认椭球地形\r\n this.viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider();\r\n } else if (layer instanceof TilesetLayerWrapper) {\r\n this.viewer.scene.primitives.remove(layer.getTileset());\r\n }\r\n\r\n this.layerMap.delete(layerId);\r\n return true;\r\n }\r\n\r\n /**\r\n * 获取图层\r\n * @param {string} layerId 图层 ID\r\n * @returns {ImageryLayerWrapper|TerrainLayerWrapper|TilesetLayerWrapper|undefined}\r\n */\r\n getLayer(layerId) {\r\n return this.layerMap.get(layerId);\r\n }\r\n\r\n // ========== 场景定位 ==========\r\n\r\n /**\r\n * 相机飞到指定经纬度\r\n * @param {Object} params 飞行参数\r\n * @param {number} params.lon 经度\r\n * @param {number} params.lat 纬度\r\n * @param {number} [params.height=2000] 相机高度\r\n * @param {number} [params.heading=0] 偏航角\r\n * @param {number} [params.pitch=-90] 俯仰角\r\n * @param {number} [params.roll=0] 翻滚角\r\n * @param {number} [params.duration=3.0] 飞行时长(秒)\r\n * @returns {Promise<boolean>}\r\n */\r\n flyToLonLat(params = {}) {\r\n const {\r\n lon, lat,\r\n height = 2000,\r\n heading = 0,\r\n pitch = -90,\r\n roll = 0,\r\n duration = 3.0\r\n } = params;\r\n\r\n if (!Cesium.defined(lon) || !Cesium.defined(lat)) {\r\n console.warn('flyToLonLat: 必须提供 lon、lat');\r\n return Promise.resolve(false);\r\n }\r\n\r\n return this.viewer.camera.flyTo({\r\n destination: Cesium.Cartesian3.fromDegrees(lon, lat, height),\r\n orientation: {\r\n heading: Cesium.Math.toRadians(heading),\r\n pitch: Cesium.Math.toRadians(pitch),\r\n roll: Cesium.Math.toRadians(roll)\r\n },\r\n duration\r\n });\r\n }\r\n\r\n /**\r\n * 设置相机视角(立即跳转,无飞行动画)\r\n * @param {Object} params\r\n * @param {number} params.lon 经度\r\n * @param {number} params.lat 纬度\r\n * @param {number} [params.height=500] 相机高度\r\n * @param {number} [params.heading=0] 偏航角(默认北向)\r\n * @param {number} [params.pitch=-90] 俯仰角(默认俯视)\r\n * @param {number} [params.roll=0] 翻滚角\r\n */\r\n setView(params = {}) {\r\n const {\r\n lon, lat,\r\n height = 500,\r\n heading = 0,\r\n pitch = -90,\r\n roll = 0\r\n } = params;\r\n\r\n if (!Cesium.defined(lon) || !Cesium.defined(lat)) {\r\n console.warn('setView: 必须提供 lon、lat');\r\n return;\r\n }\r\n\r\n this.viewer.camera.setView({\r\n destination: Cesium.Cartesian3.fromDegrees(lon, lat, height),\r\n orientation: {\r\n heading: Cesium.Math.toRadians(heading),\r\n pitch: Cesium.Math.toRadians(pitch),\r\n roll: Cesium.Math.toRadians(roll)\r\n }\r\n });\r\n }\r\n}\r\n","/**\r\n * 标绘几何算法工具\r\n * 移植自 cesium-plot-js 的几何生成能力\r\n *\r\n * 设计约定:\r\n * - 输入控制点:[lon, lat] 或 [lon, lat, height]\r\n * - 算法内部在经纬度平面上运算(与插件保持一致)\r\n * - 输出:[[lon, lat, height], ...] 或 Cesium.Cartesian3[]\r\n *\r\n * 注意:标绘算法内部使用平面距离计算,不要替换为 GeoCalcUtil.calcDistance\r\n */\r\nexport class PlotGeometryUtil {\r\n // ==================== 常量 ====================\r\n\r\n static FITTING_COUNT = 100;\r\n static ZERO_TOLERANCE = 0.0001;\r\n\r\n // ==================== 基础平面几何工具 ====================\r\n\r\n /**\r\n * 平面距离计算\r\n * 将经纬度视为平面坐标计算两点距离\r\n */\r\n static mathDistance(p1, p2) {\r\n return Math.sqrt((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2);\r\n }\r\n\r\n /**\r\n * 计算点集合的总距离(平面)\r\n */\r\n static wholeDistance(points) {\r\n let distance = 0;\r\n if (!points || !Array.isArray(points) || points.length === 0) return distance;\r\n for (let i = 0; i < points.length - 1; i++) {\r\n distance += this.mathDistance(points[i], points[i + 1]);\r\n }\r\n return distance;\r\n }\r\n\r\n /**\r\n * 获取基础长度(插件算法中用于计算箭头尺寸)\r\n */\r\n static getBaseLength(points) {\r\n return this.wholeDistance(points) ** 0.99;\r\n }\r\n\r\n /**\r\n * 求两个坐标的中点\r\n */\r\n static mid(p1, p2) {\r\n return [(p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2];\r\n }\r\n\r\n /**\r\n * 获取方位角(弧度)\r\n * 将经纬度视为平面坐标计算方向\r\n */\r\n static getAzimuth(startPoint, endPoint) {\r\n const distance = this.mathDistance(startPoint, endPoint);\r\n if (distance === 0) return 0;\r\n\r\n const angle = Math.asin(Math.abs(endPoint[1] - startPoint[1]) / distance);\r\n\r\n if (endPoint[1] >= startPoint[1] && endPoint[0] >= startPoint[0]) {\r\n return angle + Math.PI;\r\n }\r\n if (endPoint[1] >= startPoint[1] && endPoint[0] < startPoint[0]) {\r\n return Math.PI * 2 - angle;\r\n }\r\n if (endPoint[1] < startPoint[1] && endPoint[0] < startPoint[0]) {\r\n return angle;\r\n }\r\n return Math.PI - angle;\r\n }\r\n\r\n /**\r\n * 获取三点夹角(∠ABC)\r\n */\r\n static getAngleOfThreePoints(pntA, pntB, pntC) {\r\n const angle = this.getAzimuth(pntB, pntA) - this.getAzimuth(pntB, pntC);\r\n return angle < 0 ? angle + Math.PI * 2 : angle;\r\n }\r\n\r\n /**\r\n * 判断三点是否顺时针\r\n */\r\n static isClockWise(pnt1, pnt2, pnt3) {\r\n return (pnt3[1] - pnt1[1]) * (pnt2[0] - pnt1[0]) > (pnt2[1] - pnt1[1]) * (pnt3[0] - pnt1[0]);\r\n }\r\n\r\n /**\r\n * 根据起止点和旋转方向求取第三个点\r\n * @param {Array} startPnt 起点 [lon, lat]\r\n * @param {Array} endPnt 终点 [lon, lat]\r\n * @param {number} angle 旋转角(弧度)\r\n * @param {number} distance 距离\r\n * @param {boolean} clockWise 是否顺时针\r\n * @returns {[number, number]}\r\n */\r\n static getThirdPoint(startPnt, endPnt, angle, distance, clockWise) {\r\n const azimuth = this.getAzimuth(startPnt, endPnt);\r\n const alpha = clockWise ? azimuth + angle : azimuth - angle;\r\n const dx = distance * Math.cos(alpha);\r\n const dy = distance * Math.sin(alpha);\r\n return [endPnt[0] + dx, endPnt[1] + dy];\r\n }\r\n\r\n /**\r\n * 插值圆弧点(经纬度平面)\r\n * @param {Array} center 圆心 [lon, lat]\r\n * @param {number} radius 半径(经纬度平面距离)\r\n * @param {number} startAngle 起始角(弧度)\r\n * @param {number} endAngle 结束角(弧度)\r\n * @param {number} segments 分段数\r\n * @returns {Array[]}\r\n */\r\n static getArcPoints(center, radius, startAngle, endAngle, segments = 100) {\r\n let angleDiff = endAngle - startAngle;\r\n angleDiff = angleDiff < 0 ? angleDiff + Math.PI * 2 : angleDiff;\r\n\r\n const points = [];\r\n for (let i = 0; i <= segments; i++) {\r\n const angle = startAngle + (angleDiff * i) / segments;\r\n const x = center[0] + radius * Math.cos(angle);\r\n const y = center[1] + radius * Math.sin(angle);\r\n points.push([x, y]);\r\n }\r\n return points;\r\n }\r\n\r\n /**\r\n * 计算两点球面距离(米)\r\n * 与 _getPointAtBearingAndDistance 使用同一地球半径,保证扇形圆弧闭合一致\r\n * @param {Array} p1 [lon, lat]\r\n * @param {Array} p2 [lon, lat]\r\n * @returns {number}\r\n */\r\n static _calcSphericalDistance(p1, p2) {\r\n const earthRadius = 6371000;\r\n const radPerDeg = Math.PI / 180;\r\n const [lon1, lat1] = [p1[0] * radPerDeg, p1[1] * radPerDeg];\r\n const [lon2, lat2] = [p2[0] * radPerDeg, p2[1] * radPerDeg];\r\n const dLat = lat2 - lat1;\r\n const dLon = lon2 - lon1;\r\n const a = Math.sin(dLat / 2) ** 2 +\r\n Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLon / 2) ** 2;\r\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n return earthRadius * c;\r\n }\r\n\r\n /**\r\n * 计算真实地理方位角(弧度)\r\n * 采用与 _getPointAtBearingAndDistance 一致的约定:0=正东,逆时针增大\r\n * @param {Array} from 起点 [lon, lat]\r\n * @param {Array} to 终点 [lon, lat]\r\n * @returns {number} 方位角 [0, 2π)\r\n */\r\n static _getBearing(from, to) {\r\n const radPerDeg = Math.PI / 180;\r\n const lon1 = from[0] * radPerDeg;\r\n const lat1 = from[1] * radPerDeg;\r\n const lon2 = to[0] * radPerDeg;\r\n const lat2 = to[1] * radPerDeg;\r\n\r\n const dLon = lon2 - lon1;\r\n const y = Math.sin(dLon) * Math.cos(lat2);\r\n const x = Math.cos(lat1) * Math.sin(lat2) -\r\n Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon);\r\n\r\n // 标准球面前进方位角:0=正北,顺时针增大\r\n let standardBearing = Math.atan2(y, x);\r\n if (standardBearing < 0) standardBearing += Math.PI * 2;\r\n\r\n // 转换为本 SDK 约定:0=正东,逆时针增大\r\n let angle = Math.PI / 2 - standardBearing;\r\n if (angle < 0) angle += Math.PI * 2;\r\n if (angle > Math.PI * 2 - 1e-12) angle = 0;\r\n return angle;\r\n }\r\n\r\n /**\r\n * 按真实地理方位角和距离求目标点(球面直接解法)\r\n * 约定:0=正东,逆时针增大\r\n * @param {Array} center 圆心 [lon, lat]\r\n * @param {number} distanceMeters 距离(米)\r\n * @param {number} angle 方位角(弧度)\r\n * @returns {[number, number]}\r\n */\r\n static _getPointAtBearingAndDistance(center, distanceMeters, angle) {\r\n const earthRadius = 6371000;\r\n const radPerDeg = Math.PI / 180;\r\n const lon1 = center[0] * radPerDeg;\r\n const lat1 = center[1] * radPerDeg;\r\n const angularDistance = distanceMeters / earthRadius;\r\n\r\n // 转换回标准球面前进方位角:0=正北,顺时针增大\r\n const bearing = Math.PI / 2 - angle;\r\n\r\n const lat2 = Math.asin(\r\n Math.sin(lat1) * Math.cos(angularDistance) +\r\n Math.cos(lat1) * Math.sin(angularDistance) * Math.cos(bearing)\r\n );\r\n const lon2 = lon1 + Math.atan2(\r\n Math.sin(bearing) * Math.sin(angularDistance) * Math.cos(lat1),\r\n Math.cos(angularDistance) - Math.sin(lat1) * Math.sin(lat2)\r\n );\r\n\r\n return [lon2 / radPerDeg, lat2 / radPerDeg];\r\n }\r\n\r\n /**\r\n * 在两个端点之间沿真实地理圆弧插值\r\n * 精确包含 startPoint 和 endPoint,避免端点漂移\r\n * @param {Array} center 圆心 [lon, lat]\r\n * @param {Array} startPoint 起点 [lon, lat]\r\n * @param {Array} endPoint 终点 [lon, lat]\r\n * @param {number} radiusMeters 半径(米)\r\n * @param {number} segments 分段数\r\n * @returns {Array[]}\r\n */\r\n static _getGeoArcPointsBetween(center, startPoint, endPoint, radiusMeters, segments = 100) {\r\n const startAngle = this._getBearing(center, startPoint);\r\n const endAngle = this._getBearing(center, endPoint);\r\n\r\n let angleDiff = endAngle - startAngle;\r\n angleDiff = angleDiff < 0 ? angleDiff + Math.PI * 2 : angleDiff;\r\n\r\n const points = [startPoint];\r\n for (let i = 1; i < segments; i++) {\r\n const angle = startAngle + (angleDiff * i) / segments;\r\n points.push(this._getPointAtBearingAndDistance(center, radiusMeters, angle));\r\n }\r\n points.push(endPoint);\r\n return points;\r\n }\r\n\r\n // ==================== 坐标转换工具 ====================\r\n\r\n /**\r\n * 提取经纬度(忽略高度)\r\n */\r\n static toLonLat(point) {\r\n return [point[0], point[1]];\r\n }\r\n\r\n /**\r\n * 将结果点数组统一转为 [lon, lat, height] 格式\r\n */\r\n static toPositions(points, height = 0) {\r\n return points.map(p => [p[0], p[1], height]);\r\n }\r\n\r\n /**\r\n * 去除多边形轮廓中的相邻重复点,并显式闭合首尾\r\n * 用于修复 Cesium polyline/polygon 因零长度边导致的连线异常\r\n * @param {Array[]} points [lon, lat] 或 [lon, lat, height] 数组\r\n * @returns {Array[]}\r\n */\r\n static _closePolygonPoints(points) {\r\n if (!points || points.length === 0) return points;\r\n const result = [points[0]];\r\n for (let i = 1; i < points.length; i++) {\r\n const prev = result[result.length - 1];\r\n const curr = points[i];\r\n if (prev[0] !== curr[0] || prev[1] !== curr[1]) {\r\n result.push(curr);\r\n }\r\n }\r\n if (result.length > 1) {\r\n const first = result[0];\r\n const last = result[result.length - 1];\r\n if (first[0] !== last[0] || first[1] !== last[1]) {\r\n result.push(first);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 将 [lon, lat, height] 数组转为 Cesium.Cartesian3 数组\r\n */\r\n static toCartesian3Array(points) {\r\n const flat = [];\r\n for (const p of points) {\r\n flat.push(p[0], p[1], p[2] || 0);\r\n }\r\n return Cesium.Cartesian3.fromDegreesArrayHeights(flat);\r\n }\r\n\r\n // ==================== 曲线/插值工具(复合箭头、曲线标绘需要)====================\r\n\r\n /**\r\n * 线性插值\r\n */\r\n static getPointOnLine(t, startPnt, endPnt) {\r\n return [\r\n startPnt[0] + t * (endPnt[0] - startPnt[0]),\r\n startPnt[1] + t * (endPnt[1] - startPnt[1])\r\n ];\r\n }\r\n\r\n /**\r\n * 三次贝塞尔曲线求值\r\n */\r\n static getCubicValue(t, startPnt, cPnt1, cPnt2, endPnt) {\r\n t = Math.max(Math.min(t, 1), 0);\r\n const tp = 1 - t;\r\n const t2 = t * t;\r\n const t3 = t2 * t;\r\n const tp2 = tp * tp;\r\n const tp3 = tp2 * tp;\r\n return [\r\n tp3 * startPnt[0] + 3 * tp2 * t * cPnt1[0] + 3 * tp * t2 * cPnt2[0] + t3 * endPnt[0],\r\n tp3 * startPnt[1] + 3 * tp2 * t * cPnt1[1] + 3 * tp * t2 * cPnt2[1] + t3 * endPnt[1]\r\n ];\r\n }\r\n\r\n /**\r\n * 计算三点的法线及角平分线上的两个控制点\r\n */\r\n static getBisectorNormals(t, pnt1, pnt2, pnt3) {\r\n const normal = this.getNormal(pnt1, pnt2, pnt3);\r\n const dist = Math.sqrt(normal[0] * normal[0] + normal[1] * normal[1]);\r\n const uX = normal[0] / dist;\r\n const uY = normal[1] / dist;\r\n const d1 = this.mathDistance(pnt1, pnt2);\r\n const d2 = this.mathDistance(pnt2, pnt3);\r\n let bisectorNormalRight, bisectorNormalLeft;\r\n\r\n if (dist > this.ZERO_TOLERANCE) {\r\n if (this.isClockWise(pnt1, pnt2, pnt3)) {\r\n let dt = t * d1;\r\n let x = pnt2[0] - dt * uY;\r\n let y = pnt2[1] + dt * uX;\r\n bisectorNormalRight = [x, y];\r\n dt = t * d2;\r\n x = pnt2[0] + dt * uY;\r\n y = pnt2[1] - dt * uX;\r\n bisectorNormalLeft = [x, y];\r\n } else {\r\n let dt = t * d1;\r\n let x = pnt2[0] + dt * uY;\r\n let y = pnt2[1] - dt * uX;\r\n bisectorNormalRight = [x, y];\r\n dt = t * d2;\r\n x = pnt2[0] - dt * uY;\r\n y = pnt2[1] + dt * uX;\r\n bisectorNormalLeft = [x, y];\r\n }\r\n } else {\r\n let x = pnt2[0] + t * (pnt1[0] - pnt2[0]);\r\n let y = pnt2[1] + t * (pnt1[1] - pnt2[1]);\r\n bisectorNormalRight = [x, y];\r\n x = pnt2[0] + t * (pnt3[0] - pnt2[0]);\r\n y = pnt2[1] + t * (pnt3[1] - pnt2[1]);\r\n bisectorNormalLeft = [x, y];\r\n }\r\n return [bisectorNormalRight, bisectorNormalLeft];\r\n }\r\n\r\n /**\r\n * 获取三点的内切法线方向\r\n */\r\n static getNormal(pnt1, pnt2, pnt3) {\r\n let dX1 = pnt1[0] - pnt2[0];\r\n let dY1 = pnt1[1] - pnt2[1];\r\n const d1 = Math.sqrt(dX1 * dX1 + dY1 * dY1);\r\n dX1 /= d1;\r\n dY1 /= d1;\r\n let dX2 = pnt3[0] - pnt2[0];\r\n let dY2 = pnt3[1] - pnt2[1];\r\n const d2 = Math.sqrt(dX2 * dX2 + dY2 * dY2);\r\n dX2 /= d2;\r\n dY2 /= d2;\r\n return [dX1 + dX2, dY1 + dY2];\r\n }\r\n\r\n /**\r\n * 获取左侧第一个控制点(用于曲线插值)\r\n */\r\n static getLeftMostControlPoint(controlPoints, t) {\r\n const [pnt1, pnt2, pnt3] = [controlPoints[0], controlPoints[1], controlPoints[2]];\r\n const pnts = this.getBisectorNormals(0, pnt1, pnt2, pnt3);\r\n const normalRight = pnts[0];\r\n const normal = this.getNormal(pnt1, pnt2, pnt3);\r\n const dist = Math.sqrt(normal[0] * normal[0] + normal[1] * normal[1]);\r\n let controlX, controlY;\r\n if (dist > this.ZERO_TOLERANCE) {\r\n const mid = this.mid(pnt1, pnt2);\r\n const pX = pnt1[0] - mid[0];\r\n const pY = pnt1[1] - mid[1];\r\n const d1 = this.mathDistance(pnt1, pnt2);\r\n const n = 2.0 / d1;\r\n const nX = -n * pY;\r\n const nY = n * pX;\r\n const a11 = nX * nX - nY * nY;\r\n const a12 = 2 * nX * nY;\r\n const a22 = nY * nY - nX * nX;\r\n const dX = normalRight[0] - mid[0];\r\n const dY = normalRight[1] - mid[1];\r\n controlX = mid[0] + a11 * dX + a12 * dY;\r\n controlY = mid[1] + a12 * dX + a22 * dY;\r\n } else {\r\n controlX = pnt1[0] + t * (pnt2[0] - pnt1[0]);\r\n controlY = pnt1[1] + t * (pnt2[1] - pnt1[1]);\r\n }\r\n return [controlX, controlY];\r\n }\r\n\r\n /**\r\n * 获取右侧最后一个控制点(用于曲线插值)\r\n */\r\n static getRightMostControlPoint(controlPoints, t) {\r\n const count = controlPoints.length;\r\n const pnt1 = controlPoints[count - 3];\r\n const pnt2 = controlPoints[count - 2];\r\n const pnt3 = controlPoints[count - 1];\r\n const pnts = this.getBisectorNormals(0, pnt1, pnt2, pnt3);\r\n const normalLeft = pnts[1];\r\n const normal = this.getNormal(pnt1, pnt2, pnt3);\r\n const dist = Math.sqrt(normal[0] * normal[0] + normal[1] * normal[1]);\r\n let controlX, controlY;\r\n if (dist > this.ZERO_TOLERANCE) {\r\n const mid = this.mid(pnt2, pnt3);\r\n const pX = pnt3[0] - mid[0];\r\n const pY = pnt3[1] - mid[1];\r\n const d1 = this.mathDistance(pnt2, pnt3);\r\n const n = 2.0 / d1;\r\n const nX = -n * pY;\r\n const nY = n * pX;\r\n const a11 = nX * nX - nY * nY;\r\n const a12 = 2 * nX * nY;\r\n const a22 = nY * nY - nX * nX;\r\n const dX = normalLeft[0] - mid[0];\r\n const dY = normalLeft[1] - mid[1];\r\n controlX = mid[0] + a11 * dX + a12 * dY;\r\n controlY = mid[1] + a12 * dX + a22 * dY;\r\n } else {\r\n controlX = pnt3[0] + t * (pnt2[0] - pnt3[0]);\r\n controlY = pnt3[1] + t * (pnt2[1] - pnt3[1]);\r\n }\r\n return [controlX, controlY];\r\n }\r\n\r\n /**\r\n * 曲线插值(用于 CurvedArrow / Curve)\r\n * @param {number} t 张力系数\r\n * @param {Array[]} controlPoints 控制点数组\r\n */\r\n static getCurvePoints(t, controlPoints) {\r\n if (!controlPoints || controlPoints.length < 3) {\r\n return controlPoints ? controlPoints.slice() : [];\r\n }\r\n\r\n const leftControl = this.getLeftMostControlPoint(controlPoints, t);\r\n const normals = [leftControl];\r\n let pnt1, pnt2, pnt3;\r\n for (let i = 0; i < controlPoints.length - 2; i++) {\r\n pnt1 = controlPoints[i];\r\n pnt2 = controlPoints[i + 1];\r\n pnt3 = controlPoints[i + 2];\r\n const normalPoints = this.getBisectorNormals(t, pnt1, pnt2, pnt3);\r\n normals.push(...normalPoints);\r\n }\r\n const rightControl = this.getRightMostControlPoint(controlPoints, t);\r\n if (rightControl) {\r\n normals.push(rightControl);\r\n }\r\n\r\n const points = [];\r\n for (let i = 0; i < controlPoints.length - 1; i++) {\r\n pnt1 = controlPoints[i];\r\n pnt2 = controlPoints[i + 1];\r\n points.push(pnt1);\r\n for (let j = 0; j < this.FITTING_COUNT; j++) {\r\n const pnt = this.getCubicValue(\r\n j / this.FITTING_COUNT,\r\n pnt1,\r\n normals[i * 2],\r\n normals[i * 2 + 1],\r\n pnt2\r\n );\r\n points.push(pnt);\r\n }\r\n points.push(pnt2);\r\n }\r\n return points;\r\n }\r\n\r\n /**\r\n * 贝塞尔曲线插值\r\n */\r\n static getBezierPoints(points) {\r\n if (!points || points.length <= 2) return points;\r\n const bezierPoints = [];\r\n const n = points.length - 1;\r\n for (let t = 0; t <= 1; t += 0.01) {\r\n let x = 0, y = 0;\r\n for (let index = 0; index <= n; index++) {\r\n const factor = this.getBinomialFactor(n, index);\r\n const a = t ** index;\r\n const b = (1 - t) ** (n - index);\r\n x += factor * a * b * points[index][0];\r\n y += factor * a * b * points[index][1];\r\n }\r\n bezierPoints.push([x, y]);\r\n }\r\n bezierPoints.push(points[n]);\r\n return bezierPoints;\r\n }\r\n\r\n static getFactorial(n) {\r\n let result = 1;\r\n for (let i = 1; i <= n; i++) {\r\n result *= i;\r\n }\r\n return result;\r\n }\r\n\r\n static getBinomialFactor(n, index) {\r\n return this.getFactorial(n) / (this.getFactorial(index) * this.getFactorial(n - index));\r\n }\r\n\r\n /**\r\n * 二次 B 样条插值\r\n */\r\n static getQBSplinePoints(points) {\r\n if (!points || points.length <= 2) return points;\r\n const n = 2;\r\n const bSplinePoints = [];\r\n const m = points.length - n - 1;\r\n bSplinePoints.push(points[0]);\r\n for (let i = 0; i <= m; i++) {\r\n for (let t = 0; t <= 1; t += 0.05) {\r\n let x = 0, y = 0;\r\n for (let k = 0; k <= n; k++) {\r\n const factor = this.getQuadricBSplineFactor(k, t);\r\n x += factor * points[i + k][0];\r\n y += factor * points[i + k][1];\r\n }\r\n bSplinePoints.push([x, y]);\r\n }\r\n }\r\n bSplinePoints.push(points[points.length - 1]);\r\n return bSplinePoints;\r\n }\r\n\r\n static getQuadricBSplineFactor(k, t) {\r\n if (k === 0) return (t - 1) ** 2 / 2;\r\n if (k === 1) return (-2 * t ** 2 + 2 * t + 1) / 2;\r\n if (k === 2) return t ** 2 / 2;\r\n return 0;\r\n }\r\n\r\n // ==================== 标绘图元生成 ====================\r\n\r\n /**\r\n * 直箭头(FineArrow)\r\n * 控制点:2 个 [起点, 终点]\r\n */\r\n static createFineArrow(points, options = {}) {\r\n if (!points || points.length < 2) return [];\r\n\r\n const [p1, p2] = points.map(p => this.toLonLat(p));\r\n const height = points[0][2] || 0;\r\n\r\n const tailWidthFactor = options.tailWidthFactor ?? 0.1;\r\n const neckWidthFactor = options.neckWidthFactor ?? 0.2;\r\n const headWidthFactor = options.headWidthFactor ?? 0.25;\r\n const headAngle = options.headAngle ?? Math.PI / 8.5;\r\n const neckAngle = options.neckAngle ?? Math.PI / 13;\r\n\r\n const len = this.getBaseLength([p1, p2]);\r\n const tailWidth = len * tailWidthFactor;\r\n const neckWidth = len * neckWidthFactor;\r\n const headWidth = len * headWidthFactor;\r\n\r\n const tailLeft = this.getThirdPoint(p2, p1, Math.PI / 2, tailWidth, true);\r\n const tailRight = this.getThirdPoint(p2, p1, Math.PI / 2, tailWidth, false);\r\n const headLeft = this.getThirdPoint(p1, p2, headAngle, headWidth, false);\r\n const headRight = this.getThirdPoint(p1, p2, headAngle, headWidth, true);\r\n const neckLeft = this.getThirdPoint(p1, p2, neckAngle, neckWidth, false);\r\n const neckRight = this.getThirdPoint(p1, p2, neckAngle, neckWidth, true);\r\n\r\n const outlinePoints = [\r\n tailLeft, neckLeft, headLeft, p2, headRight, neckRight, tailRight, p1\r\n ];\r\n\r\n return this.toPositions(outlinePoints, height);\r\n }\r\n\r\n /**\r\n * 突击方向(AssaultDirection)\r\n * 继承直箭头逻辑,仅系数不同,整体长度拉长 1.5 倍\r\n * 控制点:2 个 [起点, 终点]\r\n */\r\n static createAssaultDirection(points, options = {}) {\r\n if (!points || points.length < 2) return [];\r\n\r\n const [p1, p2] = points.map(p => this.toLonLat(p));\r\n const height = points[0][2] || 0;\r\n\r\n const tailWidthFactor = options.tailWidthFactor ?? 0.08;\r\n const neckWidthFactor = options.neckWidthFactor ?? 0.1;\r\n const headWidthFactor = options.headWidthFactor ?? 0.13;\r\n const headAngle = options.headAngle ?? Math.PI / 4;\r\n const neckAngle = options.neckAngle ?? Math.PI * 0.17741;\r\n\r\n const len = this.getBaseLength([p1, p2]) * 1.5;\r\n const tailWidth = len * tailWidthFactor;\r\n const neckWidth = len * neckWidthFactor;\r\n const headWidth = len * headWidthFactor;\r\n\r\n const tailLeft = this.getThirdPoint(p2, p1, Math.PI / 2, tailWidth, true);\r\n const tailRight = this.getThirdPoint(p2, p1, Math.PI / 2, tailWidth, false);\r\n const headLeft = this.getThirdPoint(p1, p2, headAngle, headWidth, false);\r\n const headRight = this.getThirdPoint(p1, p2, headAngle, headWidth, true);\r\n const neckLeft = this.getThirdPoint(p1, p2, neckAngle, neckWidth, false);\r\n const neckRight = this.getThirdPoint(p1, p2, neckAngle, neckWidth, true);\r\n\r\n return this.toPositions([\r\n tailLeft, neckLeft, headLeft, p2, headRight, neckRight, tailRight, p1\r\n ], height);\r\n }\r\n\r\n /**\r\n * 细直箭头(StraightArrow)\r\n * 控制点:2 个 [起点, 终点]\r\n * 输出:线型\r\n */\r\n static createStraightArrow(points, options = {}) {\r\n if (!points || points.length < 2) return [];\r\n\r\n const [p1, p2] = points.map(p => this.toLonLat(p));\r\n const height = points[0][2] || 0;\r\n\r\n const arrowLengthScale = options.arrowLengthScale ?? 5;\r\n const maxArrowLength = options.maxArrowLength ?? 3000000;\r\n\r\n const distance = this.mathDistance(p1, p2);\r\n let len = distance / arrowLengthScale;\r\n len = Math.min(len, maxArrowLength);\r\n\r\n const leftPnt = this.getThirdPoint(p1, p2, Math.PI / 6, len / 2, false);\r\n const rightPnt = this.getThirdPoint(p1, p2, Math.PI / 6, len / 2, true);\r\n\r\n return this.toPositions([p1, p2, leftPnt, p2, rightPnt], height);\r\n }\r\n\r\n /**\r\n * 三角形(Triangle)\r\n * 控制点:3 个\r\n */\r\n static createTriangle(points) {\r\n if (!points || points.length < 3) return [];\r\n return points.slice(0, 3).map(p => [p[0], p[1], p[2] || 0]);\r\n }\r\n\r\n /**\r\n * 扇形(Sector)\r\n * 控制点:3 个 [圆心, 起始点, 结束点]\r\n * 使用球面真实地理圆,保证圆弧经过两个半径控制点\r\n */\r\n static createSector(points) {\r\n if (!points || points.length < 3) return [];\r\n\r\n const [center, pnt2, pnt3] = points.map(p => this.toLonLat(p));\r\n const height = points[0][2] || 0;\r\n\r\n // 使用球面距离作为半径,与圆弧插值函数保持一致\r\n const radius = this._calcSphericalDistance(pnt2, center);\r\n\r\n // 弧线精确经过两个控制点,避免端点漂移\r\n const arcPoints = this._getGeoArcPointsBetween(center, pnt2, pnt3, radius);\r\n arcPoints.push(center);\r\n\r\n return this.toPositions(arcPoints, height);\r\n }\r\n\r\n /**\r\n * 椭圆(Ellipse)\r\n * 控制点:3 个 [center, majorEnd, minorEnd]\r\n */\r\n static createEllipse(points) {\r\n if (!points || points.length < 3) return [];\r\n\r\n const controlPoints = points.slice(0, 3);\r\n const [center, majorEnd, minorEnd] = controlPoints.map(p => this.toLonLat(p));\r\n const height = controlPoints[0][2] || 0;\r\n\r\n const majorVec = [majorEnd[0] - center[0], majorEnd[1] - center[1]];\r\n const minorVec = [minorEnd[0] - center[0], minorEnd[1] - center[1]];\r\n\r\n const ellipsePoints = [];\r\n for (let i = 0; i <= 100; i++) {\r\n const angle = (Math.PI * 2 * i) / 100;\r\n const x = center[0] + majorVec[0] * Math.cos(angle) + minorVec[0] * Math.sin(angle);\r\n const y = center[1] + majorVec[1] * Math.cos(angle) + minorVec[1] * Math.sin(angle);\r\n ellipsePoints.push([x, y]);\r\n }\r\n\r\n return this.toPositions(ellipsePoints, height);\r\n }\r\n\r\n // ==================== 复合箭头图元 ====================\r\n\r\n /**\r\n * 通用箭头头部点\r\n * @param {Array[]} points 控制点数组\r\n * @param {object} options 箭头系数\r\n * @returns {Array[]} [neckLeft, headLeft, headPnt, headRight, neckRight]\r\n */\r\n static _getAttackArrowHeadPoints(points, options = {}) {\r\n if (!points || points.length < 2) return [];\r\n const headHeightFactor = options.headHeightFactor ?? 0.18;\r\n const headWidthFactor = options.headWidthFactor ?? 0.3;\r\n const neckHeightFactor = options.neckHeightFactor ?? 0.85;\r\n const neckWidthFactor = options.neckWidthFactor ?? 0.15;\r\n const headTailFactor = options.headTailFactor ?? 0.8;\r\n\r\n const len = this.getBaseLength(points);\r\n let headHeight = len * headHeightFactor;\r\n const headPnt = points[points.length - 1];\r\n const len2 = this.mathDistance(headPnt, points[points.length - 2]);\r\n const tailWidth = this.mathDistance(options.tailLeft, options.tailRight);\r\n if (headHeight > tailWidth * headTailFactor) {\r\n headHeight = tailWidth * headTailFactor;\r\n }\r\n const headWidth = headHeight * headWidthFactor;\r\n const neckWidth = headHeight * neckWidthFactor;\r\n headHeight = Math.min(headHeight, len2);\r\n const neckHeight = headHeight * neckHeightFactor;\r\n\r\n const headEndPnt = this.getThirdPoint(points[points.length - 2], headPnt, 0, headHeight, true);\r\n const neckEndPnt = this.getThirdPoint(points[points.length - 2], headPnt, 0, neckHeight, true);\r\n const headLeft = this.getThirdPoint(headPnt, headEndPnt, Math.PI / 2, headWidth, false);\r\n const headRight = this.getThirdPoint(headPnt, headEndPnt, Math.PI / 2, headWidth, true);\r\n const neckLeft = this.getThirdPoint(headPnt, neckEndPnt, Math.PI / 2, neckWidth, false);\r\n const neckRight = this.getThirdPoint(headPnt, neckEndPnt, Math.PI / 2, neckWidth, true);\r\n return [neckLeft, headLeft, headPnt, headRight, neckRight];\r\n }\r\n\r\n /**\r\n * 通用箭头躯干点\r\n * @param {Array[]} points 骨骼点\r\n * @param {Array} neckLeft\r\n * @param {Array} neckRight\r\n * @param {number} tailWidthFactor\r\n */\r\n static _getAttackArrowBodyPoints(points, neckLeft, neckRight, tailWidthFactor) {\r\n const allLen = this.wholeDistance(points);\r\n const len = this.getBaseLength(points);\r\n const tailWidth = len * tailWidthFactor;\r\n const neckWidth = this.mathDistance(neckLeft, neckRight);\r\n const widthDif = (tailWidth - neckWidth) / 2;\r\n let tempLen = 0;\r\n const leftBodyPnts = [];\r\n const rightBodyPnts = [];\r\n for (let i = 1; i < points.length - 1; i++) {\r\n const angle = this.getAngleOfThreePoints(points[i - 1], points[i], points[i + 1]) / 2;\r\n tempLen += this.mathDistance(points[i - 1], points[i]);\r\n const w = (tailWidth / 2 - (tempLen / allLen) * widthDif) / Math.sin(angle);\r\n const left = this.getThirdPoint(points[i - 1], points[i], Math.PI - angle, w, true);\r\n const right = this.getThirdPoint(points[i - 1], points[i], angle, w, false);\r\n leftBodyPnts.push(left);\r\n rightBodyPnts.push(right);\r\n }\r\n return leftBodyPnts.concat(rightBodyPnts);\r\n }\r\n\r\n /**\r\n * 获取燕尾/集结箭头的尾部点\r\n */\r\n static _getSquadTailPoints(points, tailWidthFactor, swallowTailFactor = 0) {\r\n const allLen = this.getBaseLength(points);\r\n const tailWidth = allLen * tailWidthFactor;\r\n const tailLeft = this.getThirdPoint(points[1], points[0], Math.PI / 2, tailWidth, false);\r\n const tailRight = this.getThirdPoint(points[1], points[0], Math.PI / 2, tailWidth, true);\r\n if (swallowTailFactor > 0) {\r\n const len = tailWidth * swallowTailFactor;\r\n const swallowTailPnt = this.getThirdPoint(points[1], points[0], 0, len, true);\r\n return [tailLeft, swallowTailPnt, tailRight];\r\n }\r\n return [tailLeft, tailRight];\r\n }\r\n\r\n /**\r\n * 攻击箭头(AttackArrow)\r\n * 控制点:≥3 个 [tailLeft, tailRight, bone..., head]\r\n */\r\n static createAttackArrow(points, options = {}) {\r\n if (!points || points.length < 3) return [];\r\n\r\n const lnglatPoints = points.map(p => this.toLonLat(p));\r\n const height = points[0][2] || 0;\r\n\r\n let [tailLeft, tailRight] = [lnglatPoints[0], lnglatPoints[1]];\r\n if (this.isClockWise(lnglatPoints[0], lnglatPoints[1], lnglatPoints[2])) {\r\n tailLeft = lnglatPoints[1];\r\n tailRight = lnglatPoints[0];\r\n }\r\n\r\n const midTail = this.mid(tailLeft, tailRight);\r\n const bonePnts = [midTail].concat(lnglatPoints.slice(2));\r\n const headPnts = this._getAttackArrowHeadPoints(bonePnts, {\r\n ...options,\r\n tailLeft,\r\n tailRight\r\n });\r\n if (!headPnts || headPnts.length === 0) return this.toPositions(lnglatPoints, height);\r\n\r\n const [neckLeft, neckRight] = [headPnts[0], headPnts[4]];\r\n const tailWidthFactor = this.mathDistance(tailLeft, tailRight) / this.getBaseLength(bonePnts);\r\n const bodyPnts = this._getAttackArrowBodyPoints(bonePnts, neckLeft, neckRight, tailWidthFactor);\r\n const count = bodyPnts.length;\r\n let leftPnts = [tailLeft].concat(bodyPnts.slice(0, count / 2));\r\n leftPnts.push(neckLeft);\r\n let rightPnts = [tailRight].concat(bodyPnts.slice(count / 2, count));\r\n rightPnts.push(neckRight);\r\n leftPnts = this.getQBSplinePoints(leftPnts);\r\n rightPnts = this.getQBSplinePoints(rightPnts);\r\n const result = this._closePolygonPoints(leftPnts.concat(headPnts, rightPnts.reverse()));\r\n return this.toPositions(result, height);\r\n }\r\n\r\n /**\r\n * 燕尾攻击箭头(SwallowtailAttackArrow)\r\n * 控制点:≥3 个\r\n */\r\n static createSwallowtailAttackArrow(points, options = {}) {\r\n if (!points || points.length < 3) return [];\r\n\r\n const lnglatPoints = points.map(p => this.toLonLat(p));\r\n const height = points[0][2] || 0;\r\n\r\n let [tailLeft, tailRight] = [lnglatPoints[0], lnglatPoints[1]];\r\n if (this.isClockWise(lnglatPoints[0], lnglatPoints[1], lnglatPoints[2])) {\r\n tailLeft = lnglatPoints[1];\r\n tailRight = lnglatPoints[0];\r\n }\r\n\r\n const midTail = this.mid(tailLeft, tailRight);\r\n const bonePnts = [midTail].concat(lnglatPoints.slice(2));\r\n const headPnts = this._getAttackArrowHeadPoints(bonePnts, {\r\n ...options,\r\n tailLeft,\r\n tailRight\r\n });\r\n if (!headPnts || headPnts.length === 0) return this.toPositions(lnglatPoints, height);\r\n\r\n const [neckLeft, neckRight] = [headPnts[0], headPnts[4]];\r\n const tailWidthFactor = options.tailWidthFactor ?? 0.1;\r\n const swallowTailFactor = options.swallowTailFactor ?? 1;\r\n const allLen = this.getBaseLength(bonePnts);\r\n const tailWidth = this.mathDistance(tailLeft, tailRight);\r\n const len = allLen * tailWidthFactor * swallowTailFactor;\r\n const swallowTailPnt = this.getThirdPoint(bonePnts[1], bonePnts[0], 0, len, true);\r\n const factor = tailWidth / allLen;\r\n const bodyPnts = this._getAttackArrowBodyPoints(bonePnts, neckLeft, neckRight, factor);\r\n const count = bodyPnts.length;\r\n let leftPnts = [tailLeft].concat(bodyPnts.slice(0, count / 2));\r\n leftPnts.push(neckLeft);\r\n let rightPnts = [tailRight].concat(bodyPnts.slice(count / 2, count));\r\n rightPnts.push(neckRight);\r\n leftPnts = this.getQBSplinePoints(leftPnts);\r\n rightPnts = this.getQBSplinePoints(rightPnts);\r\n const result = this._closePolygonPoints(leftPnts.concat(headPnts, rightPnts.reverse(), [swallowTailPnt, leftPnts[0]]));\r\n return this.toPositions(result, height);\r\n }\r\n\r\n /**\r\n * 集结箭头(SquadCombat)\r\n * 控制点:≥2 个 [tailBase, bone..., head]\r\n */\r\n static createSquadCombat(points, options = {}) {\r\n if (!points || points.length < 2) return [];\r\n\r\n const lnglatPoints = points.map(p => this.toLonLat(p));\r\n const height = points[0][2] || 0;\r\n\r\n const tailWidthFactor = options.tailWidthFactor ?? 0.1;\r\n const tailPnts = this._getSquadTailPoints(lnglatPoints, tailWidthFactor);\r\n const headPnts = this._getAttackArrowHeadPoints(lnglatPoints, {\r\n ...options,\r\n tailLeft: tailPnts[0],\r\n tailRight: tailPnts[1]\r\n });\r\n if (!headPnts || headPnts.length === 0) return this.toPositions(lnglatPoints, height);\r\n\r\n const [neckLeft, neckRight] = [headPnts[0], headPnts[4]];\r\n const bodyPnts = this._getAttackArrowBodyPoints(lnglatPoints, neckLeft, neckRight, tailWidthFactor);\r\n const count = bodyPnts.length;\r\n let leftPnts = [tailPnts[0]].concat(bodyPnts.slice(0, count / 2));\r\n leftPnts.push(neckLeft);\r\n let rightPnts = [tailPnts[1]].concat(bodyPnts.slice(count / 2, count));\r\n rightPnts.push(neckRight);\r\n leftPnts = this.getQBSplinePoints(leftPnts);\r\n rightPnts = this.getQBSplinePoints(rightPnts);\r\n const result = this._closePolygonPoints(leftPnts.concat(headPnts, rightPnts.reverse()));\r\n return this.toPositions(result, height);\r\n }\r\n\r\n /**\r\n * 燕尾集结箭头(SwallowtailSquadCombat)\r\n * 控制点:≥2 个\r\n */\r\n static createSwallowtailSquadCombat(points, options = {}) {\r\n if (!points || points.length < 2) return [];\r\n\r\n const lnglatPoints = points.map(p => this.toLonLat(p));\r\n const height = points[0][2] || 0;\r\n\r\n const tailWidthFactor = options.tailWidthFactor ?? 0.1;\r\n const swallowTailFactor = options.swallowTailFactor ?? 1;\r\n const tailPnts = this._getSquadTailPoints(lnglatPoints, tailWidthFactor, swallowTailFactor);\r\n const headPnts = this._getAttackArrowHeadPoints(lnglatPoints, {\r\n ...options,\r\n tailLeft: tailPnts[0],\r\n tailRight: tailPnts[2]\r\n });\r\n if (!headPnts || headPnts.length === 0) return this.toPositions(lnglatPoints, height);\r\n\r\n const [neckLeft, neckRight] = [headPnts[0], headPnts[4]];\r\n const bodyPnts = this._getAttackArrowBodyPoints(lnglatPoints, neckLeft, neckRight, tailWidthFactor);\r\n const count = bodyPnts.length;\r\n let leftPnts = [tailPnts[0]].concat(bodyPnts.slice(0, count / 2));\r\n leftPnts.push(neckLeft);\r\n let rightPnts = [tailPnts[2]].concat(bodyPnts.slice(count / 2, count));\r\n rightPnts.push(neckRight);\r\n leftPnts = this.getQBSplinePoints(leftPnts);\r\n rightPnts = this.getQBSplinePoints(rightPnts);\r\n const result = this._closePolygonPoints(leftPnts.concat(headPnts, rightPnts.reverse(), [tailPnts[1], leftPnts[0]]));\r\n return this.toPositions(result, height);\r\n }\r\n\r\n /**\r\n * 双箭头(DoubleArrow)\r\n * 控制点:3~5 个\r\n * - 3 点:自动生成临时第四点和对称连接点\r\n * - 4 点:第四点作为临时控制点\r\n * - 5 点:第四点作为临时控制点,第五点作为连接点\r\n */\r\n static createDoubleArrow(points, options = {}) {\r\n if (!points || points.length < 3) return [];\r\n\r\n const lnglatPoints = points.map(p => this.toLonLat(p));\r\n const height = points[0][2] || 0;\r\n const [pnt1, pnt2, pnt3] = lnglatPoints;\r\n const count = lnglatPoints.length;\r\n\r\n let tempPoint4;\r\n let connPoint;\r\n if (count === 3) {\r\n tempPoint4 = this._getDoubleArrowTempPoint4(pnt1, pnt2, pnt3);\r\n connPoint = this.mid(pnt1, pnt2);\r\n } else if (count === 4) {\r\n tempPoint4 = lnglatPoints[3];\r\n connPoint = this.mid(pnt1, pnt2);\r\n } else {\r\n tempPoint4 = lnglatPoints[3];\r\n connPoint = lnglatPoints[4];\r\n }\r\n\r\n const headHeightFactor = options.headHeightFactor ?? 0.25;\r\n const headWidthFactor = options.headWidthFactor ?? 0.3;\r\n const neckHeightFactor = options.neckHeightFactor ?? 0.85;\r\n const neckWidthFactor = options.neckWidthFactor ?? 0.15;\r\n\r\n const isClockWise = this.isClockWise(pnt1, pnt2, pnt3);\r\n let leftArrowPnts, rightArrowPnts;\r\n if (isClockWise) {\r\n leftArrowPnts = this._getDoubleArrowPoints(pnt1, connPoint, tempPoint4, false, options);\r\n rightArrowPnts = this._getDoubleArrowPoints(connPoint, pnt2, pnt3, true, options);\r\n } else {\r\n leftArrowPnts = this._getDoubleArrowPoints(pnt2, connPoint, pnt3, false, options);\r\n rightArrowPnts = this._getDoubleArrowPoints(connPoint, pnt1, tempPoint4, true, options);\r\n }\r\n\r\n const m = leftArrowPnts.length;\r\n const t = (m - 5) / 2;\r\n const llBodyPnts = leftArrowPnts.slice(0, t);\r\n const lArrowPnts = leftArrowPnts.slice(t, t + 5);\r\n let lrBodyPnts = leftArrowPnts.slice(t + 5, m);\r\n let rlBodyPnts = rightArrowPnts.slice(0, t);\r\n const rArrowPnts = rightArrowPnts.slice(t, t + 5);\r\n const rrBodyPnts = rightArrowPnts.slice(t + 5, m);\r\n\r\n rlBodyPnts = this.getBezierPoints(rlBodyPnts);\r\n const bodyPnts = this.getBezierPoints(rrBodyPnts.concat(llBodyPnts.slice(1)));\r\n lrBodyPnts = this.getBezierPoints(lrBodyPnts);\r\n const result = this._closePolygonPoints(rlBodyPnts.concat(rArrowPnts, bodyPnts, lArrowPnts, lrBodyPnts));\r\n return this.toPositions(result, height);\r\n }\r\n\r\n static _getDoubleArrowTempPoint4(linePnt1, linePnt2, point) {\r\n const midPnt = this.mid(linePnt1, linePnt2);\r\n const len = this.mathDistance(midPnt, point);\r\n const angle = this.getAngleOfThreePoints(linePnt1, midPnt, point);\r\n let symPnt = [0, 0];\r\n let distance1, distance2, mid;\r\n if (angle < Math.PI / 2) {\r\n distance1 = len * Math.sin(angle);\r\n distance2 = len * Math.cos(angle);\r\n mid = this.getThirdPoint(linePnt1, midPnt, Math.PI / 2, distance1, false);\r\n symPnt = this.getThirdPoint(midPnt, mid, Math.PI / 2, distance2, true);\r\n } else if (angle < Math.PI) {\r\n distance1 = len * Math.sin(Math.PI - angle);\r\n distance2 = len * Math.cos(Math.PI - angle);\r\n mid = this.getThirdPoint(linePnt1, midPnt, Math.PI / 2, distance1, false);\r\n symPnt = this.getThirdPoint(midPnt, mid, Math.PI / 2, distance2, false);\r\n } else if (angle < Math.PI * 1.5) {\r\n distance1 = len * Math.sin(angle - Math.PI);\r\n distance2 = len * Math.cos(angle - Math.PI);\r\n mid = this.getThirdPoint(linePnt1, midPnt, Math.PI / 2, distance1, true);\r\n symPnt = this.getThirdPoint(midPnt, mid, Math.PI / 2, distance2, true);\r\n } else {\r\n distance1 = len * Math.sin(Math.PI * 2 - angle);\r\n distance2 = len * Math.cos(Math.PI * 2 - angle);\r\n mid = this.getThirdPoint(linePnt1, midPnt, Math.PI / 2, distance1, true);\r\n symPnt = this.getThirdPoint(midPnt, mid, Math.PI / 2, distance2, false);\r\n }\r\n return symPnt;\r\n }\r\n\r\n static _getDoubleArrowPoints(pnt1, pnt2, pnt3, clockWise, options = {}) {\r\n const headHeightFactor = options.headHeightFactor ?? 0.25;\r\n const headWidthFactor = options.headWidthFactor ?? 0.3;\r\n const neckHeightFactor = options.neckHeightFactor ?? 0.85;\r\n const neckWidthFactor = options.neckWidthFactor ?? 0.15;\r\n\r\n const midPnt = this.mid(pnt1, pnt2);\r\n const len = this.mathDistance(midPnt, pnt3);\r\n let midPnt1 = this.getThirdPoint(pnt3, midPnt, 0, len * 0.3, true);\r\n let midPnt2 = this.getThirdPoint(pnt3, midPnt, 0, len * 0.5, true);\r\n midPnt1 = this.getThirdPoint(midPnt, midPnt1, Math.PI / 2, len / 5, clockWise);\r\n midPnt2 = this.getThirdPoint(midPnt, midPnt2, Math.PI / 2, len / 4, clockWise);\r\n const points = [midPnt, midPnt1, midPnt2, pnt3];\r\n const arrowPnts = this._getDoubleArrowHeadPoints(points, options);\r\n if (!arrowPnts || arrowPnts.length === 0) return [];\r\n\r\n const neckLeftPoint = arrowPnts[0];\r\n const neckRightPoint = arrowPnts[4];\r\n const tailWidthFactor = this.mathDistance(pnt1, pnt2) / this.getBaseLength(points) / 2;\r\n const bodyPnts = this._getAttackArrowBodyPoints(points, neckLeftPoint, neckRightPoint, tailWidthFactor);\r\n const n = bodyPnts.length;\r\n let lPoints = bodyPnts.slice(0, n / 2);\r\n let rPoints = bodyPnts.slice(n / 2, n);\r\n lPoints.push(neckLeftPoint);\r\n rPoints.push(neckRightPoint);\r\n lPoints = lPoints.reverse();\r\n lPoints.push(pnt2);\r\n rPoints = rPoints.reverse();\r\n rPoints.push(pnt1);\r\n return lPoints.reverse().concat(arrowPnts, rPoints);\r\n }\r\n\r\n static _getDoubleArrowHeadPoints(points, options = {}) {\r\n const len = this.getBaseLength(points);\r\n const headHeight = len * (options.headHeightFactor ?? 0.25);\r\n const headPnt = points[points.length - 1];\r\n const headWidth = headHeight * (options.headWidthFactor ?? 0.3);\r\n const neckWidth = headHeight * (options.neckWidthFactor ?? 0.15);\r\n const neckHeight = headHeight * (options.neckHeightFactor ?? 0.85);\r\n const headEndPnt = this.getThirdPoint(points[points.length - 2], headPnt, 0, headHeight, true);\r\n const neckEndPnt = this.getThirdPoint(points[points.length - 2], headPnt, 0, neckHeight, true);\r\n const headLeft = this.getThirdPoint(headPnt, headEndPnt, Math.PI / 2, headWidth, false);\r\n const headRight = this.getThirdPoint(headPnt, headEndPnt, Math.PI / 2, headWidth, true);\r\n const neckLeft = this.getThirdPoint(headPnt, neckEndPnt, Math.PI / 2, neckWidth, false);\r\n const neckRight = this.getThirdPoint(headPnt, neckEndPnt, Math.PI / 2, neckWidth, true);\r\n return [neckLeft, headLeft, headPnt, headRight, neckRight];\r\n }\r\n\r\n /**\r\n * 曲线箭头(CurvedArrow)\r\n * 控制点:≥2 个;2 个点时退化为细直箭头\r\n */\r\n static createCurvedArrow(points, options = {}) {\r\n if (!points || points.length < 2) return [];\r\n\r\n const lnglatPoints = points.map(p => this.toLonLat(p));\r\n const height = points[0][2] || 0;\r\n\r\n if (points.length === 2) {\r\n return this.createStraightArrow(points, options);\r\n }\r\n\r\n const t = options.t ?? 0.3;\r\n const arrowLengthScale = options.arrowLengthScale ?? 5;\r\n const maxArrowLength = options.maxArrowLength ?? 3000000;\r\n\r\n const curvePoints = this.getCurvePoints(t, lnglatPoints);\r\n const pnt1 = lnglatPoints[lnglatPoints.length - 2];\r\n const pnt2 = lnglatPoints[lnglatPoints.length - 1];\r\n const distance = this.wholeDistance(lnglatPoints);\r\n let len = distance / arrowLengthScale;\r\n len = Math.min(len, maxArrowLength);\r\n const leftPnt = this.getThirdPoint(\r\n curvePoints[curvePoints.length - 2],\r\n curvePoints[curvePoints.length - 1],\r\n Math.PI / 6,\r\n len / 2,\r\n false\r\n );\r\n const rightPnt = this.getThirdPoint(\r\n curvePoints[curvePoints.length - 2],\r\n curvePoints[curvePoints.length - 1],\r\n Math.PI / 6,\r\n len / 2,\r\n true\r\n );\r\n const result = curvePoints.concat([leftPnt, pnt2, rightPnt]);\r\n return this.toPositions(result, height);\r\n }\r\n\r\n /**\r\n * 曲线(Curve)\r\n * 控制点:≥2 个;2 个点时退化为直线\r\n */\r\n static createCurve(points, options = {}) {\r\n if (!points || points.length < 2) return [];\r\n\r\n const lnglatPoints = points.map(p => this.toLonLat(p));\r\n const height = points[0][2] || 0;\r\n\r\n // 2 个点时直接连成直线,避免曲线插值算法因点数不足报错\r\n if (points.length === 2) {\r\n return this.toPositions(lnglatPoints, height);\r\n }\r\n\r\n const t = options.t ?? 0.3;\r\n const curvePoints = this.getCurvePoints(t, lnglatPoints);\r\n return this.toPositions(curvePoints, height);\r\n }\r\n}\r\n","/**\r\n * 标绘图元类型枚举\r\n * 对应 cesium-plot-js 支持的军事标绘类型\r\n */\r\nexport const PlotGraphicType = {\r\n // 面型标绘\r\n TRIANGLE: 'triangle',\r\n SECTOR: 'sector',\r\n ELLIPSE: 'ellipse',\r\n FINE_ARROW: 'fineArrow',\r\n ASSAULT_DIRECTION: 'assaultDirection',\r\n ATTACK_ARROW: 'attackArrow',\r\n SWALLOWTAIL_ATTACK_ARROW: 'swallowtailAttackArrow',\r\n SQUAD_COMBAT: 'squadCombat',\r\n SWALLOWTAIL_SQUAD_COMBAT: 'swallowtailSquadCombat',\r\n DOUBLE_ARROW: 'doubleArrow',\r\n\r\n // 线型标绘\r\n STRAIGHT_ARROW: 'straightArrow',\r\n CURVED_ARROW: 'curvedArrow',\r\n CURVE: 'curve'\r\n};\r\n\r\n/**\r\n * 标绘图元分类\r\n */\r\nexport const PlotGraphicCategory = {\r\n POLYGON: 'polygon',\r\n LINE: 'line'\r\n};\r\n\r\n/**\r\n * 判断标绘类型是否为线型\r\n * @param {string} plotType PlotGraphicType\r\n * @returns {boolean}\r\n */\r\nexport function isLinePlotType(plotType) {\r\n return [\r\n PlotGraphicType.STRAIGHT_ARROW,\r\n PlotGraphicType.CURVED_ARROW,\r\n PlotGraphicType.CURVE\r\n ].includes(plotType);\r\n}\r\n","import { Config } from '../core/Config.js';\r\nimport { PlotGeometryUtil } from '../utils/PlotGeometryUtil.js';\r\nimport { PlotGraphicType, isLinePlotType } from './PlotGraphicType.js';\r\n\r\n/**\r\n * 点图元包装器\r\n */\r\nclass PointWrapper {\r\n constructor(graphicModule, entity) {\r\n this._entity = entity;\r\n this._graphicModule = graphicModule;\r\n }\r\n\r\n setPosition(coords) {\r\n this._entity.position = Cesium.Cartesian3.fromDegrees(...coords);\r\n return this;\r\n }\r\n\r\n setColor(color) {\r\n this._entity.point.color = color;\r\n return this;\r\n }\r\n\r\n setPixelSize(size) {\r\n this._entity.point.pixelSize = size;\r\n return this;\r\n }\r\n\r\n setVisible(visible) {\r\n this._entity.show = visible;\r\n return this;\r\n }\r\n\r\n setHeightReference(ref) {\r\n this._entity.point.heightReference = ref;\r\n return this;\r\n }\r\n\r\n setDisableDepthTestDistance(distance) {\r\n this._entity.point.disableDepthTestDistance = distance;\r\n return this;\r\n }\r\n\r\n\r\n setOutlineColor(color) {\r\n this._entity.point.outlineColor = color;\r\n return this;\r\n }\r\n\r\n setOutlineWidth(width) {\r\n this._entity.point.outlineWidth = width;\r\n return this;\r\n }\r\n\r\n setName(name) {\r\n this._entity.id = name;\r\n return this;\r\n }\r\n\r\n // 名称标签相关\r\n setNameVisible(visible) {\r\n if (!this._entity.label) {\r\n this._entity.label = new Cesium.LabelGraphics();\r\n }\r\n this._entity.label.show = visible;\r\n return this;\r\n }\r\n\r\n setText(text, options = {}) {\r\n if (!this._entity.label) {\r\n this._entity.label = new Cesium.LabelGraphics();\r\n }\r\n this._entity.label.text = text;\r\n\r\n // 应用配置选项\r\n this._entity.label.disableDepthTestDistance = options.disableDepthTestDistance ?? Number.POSITIVE_INFINITY;\r\n this._entity.label.verticalOrigin = options.verticalOrigin ?? Cesium.VerticalOrigin.BOTTOM;\r\n this._entity.label.eyeOffset = options.eyeOffset ?? new Cesium.Cartesian3(0, 0, -10);\r\n this._entity.label.heightReference = options.heightReference ?? Cesium.HeightReference.RELATIVE_TO_GROUND;\r\n\r\n return this;\r\n }\r\n\r\n setFont(font) {\r\n if (!this._entity.label) {\r\n this._entity.label = new Cesium.LabelGraphics();\r\n }\r\n this._entity.label.font = font;\r\n return this;\r\n }\r\n\r\n setTextColor(color) {\r\n if (!this._entity.label) {\r\n this._entity.label = new Cesium.LabelGraphics();\r\n }\r\n this._entity.label.fillColor = color;\r\n return this;\r\n }\r\n\r\n setTextOutlineColor(color) {\r\n if (!this._entity.label) {\r\n this._entity.label = new Cesium.LabelGraphics();\r\n }\r\n this._entity.label.outlineColor = color;\r\n return this;\r\n }\r\n\r\n setTextOutlineWidth(width) {\r\n if (!this._entity.label) {\r\n this._entity.label = new Cesium.LabelGraphics();\r\n }\r\n this._entity.label.outlineWidth = width;\r\n return this;\r\n }\r\n\r\n setAlignType(alignType) {\r\n if (!this._entity.label) {\r\n this._entity.label = new Cesium.LabelGraphics();\r\n }\r\n // alignType: 0=CENTER, 1=LEFT, 2=RIGHT, 3=TOP, 4=BOTTOM\r\n const horizontalOrigins = [Cesium.HorizontalOrigin.CENTER, Cesium.HorizontalOrigin.LEFT, Cesium.HorizontalOrigin.RIGHT];\r\n const verticalOrigins = [Cesium.VerticalOrigin.CENTER, Cesium.VerticalOrigin.CENTER, Cesium.VerticalOrigin.CENTER, Cesium.VerticalOrigin.TOP, Cesium.VerticalOrigin.BOTTOM];\r\n this._entity.label.horizontalOrigin = horizontalOrigins[alignType] || Cesium.HorizontalOrigin.CENTER;\r\n this._entity.label.verticalOrigin = verticalOrigins[alignType] || Cesium.VerticalOrigin.CENTER;\r\n return this;\r\n }\r\n\r\n setTextPixelOffset(offset) {\r\n if (!this._entity.label) {\r\n this._entity.label = new Cesium.LabelGraphics();\r\n }\r\n this._entity.label.pixelOffset = offset;\r\n return this;\r\n }\r\n\r\n setTextScale(scale) {\r\n if (!this._entity.label) {\r\n this._entity.label = new Cesium.LabelGraphics();\r\n }\r\n this._entity.label.scale = scale;\r\n return this;\r\n }\r\n\r\n remove() {\r\n this._graphicModule.removeGraphic(this._entity.id);\r\n return this;\r\n }\r\n}\r\n\r\n/**\r\n * 线图元包装器\r\n */\r\nclass LineWrapper {\r\n constructor(graphicModule, entity) {\r\n this._entity = entity;\r\n this._graphicModule = graphicModule;\r\n }\r\n\r\n setPositions(coords) {\r\n this._entity.polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(\r\n coords.flatMap(coord => [coord[0], coord[1], coord[2] || 0])\r\n );\r\n return this;\r\n }\r\n\r\n setColor(color) {\r\n this._entity.polyline.material = color;\r\n return this;\r\n }\r\n\r\n setWidth(width) {\r\n this._entity.polyline.width = width;\r\n return this;\r\n }\r\n\r\n setMaterial(material) {\r\n this._entity.polyline.material = material;\r\n return this;\r\n }\r\n\r\n setVisible(visible) {\r\n this._entity.show = visible;\r\n return this;\r\n }\r\n\r\n setClampToGround(clamp) {\r\n this._entity.polyline.clampToGround = clamp;\r\n return this;\r\n }\r\n\r\n setName(name) {\r\n this._entity.id = name;\r\n return this;\r\n }\r\n\r\n /**\r\n * 在图元上附加标签,标签位置随几何变化自动更新\r\n * @param {string} text 标签文字\r\n * @param {object} options 标签样式 { font, color, outlineColor, outlineWidth, pixelOffset, horizontalOrigin, verticalOrigin }\r\n * @returns {LineWrapper}\r\n */\r\n setLabel(text, options = {}) {\r\n if (!this._entity.label) {\r\n this._entity.label = new Cesium.LabelGraphics();\r\n }\r\n this._entity.label.text = text;\r\n this._entity.label.font = options.font || '14px Microsoft YaHei';\r\n this._entity.label.fillColor = options.color || Cesium.Color.WHITE;\r\n this._entity.label.outlineColor = options.outlineColor || Cesium.Color.BLACK;\r\n this._entity.label.outlineWidth = options.outlineWidth ?? 1;\r\n this._entity.label.show = true;\r\n this._entity.label.pixelOffset = options.pixelOffset || new Cesium.Cartesian2(0, -10);\r\n this._entity.label.horizontalOrigin = options.horizontalOrigin ?? Cesium.HorizontalOrigin.CENTER;\r\n this._entity.label.verticalOrigin = options.verticalOrigin ?? Cesium.VerticalOrigin.BOTTOM;\r\n\r\n // 使用 CallbackProperty 动态计算标签锚点,随编辑/平移自动更新\r\n const self = this;\r\n this._entity.position = new Cesium.CallbackProperty(function () {\r\n const anchor = self._computeLabelAnchor();\r\n return Cesium.Cartesian3.fromDegrees(anchor[0], anchor[1], anchor[2] || 0);\r\n }, false);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 计算标签锚点 [lon, lat, height]\r\n * 标绘图元使用控制点重心,普通线图元使用顶点平均\r\n * @private\r\n */\r\n _computeLabelAnchor() {\r\n if (this._entity._isPlotGraphic && this._entity._controlPoints?.length) {\r\n const cps = this._entity._controlPoints;\r\n let x = 0, y = 0, z = 0;\r\n cps.forEach(cp => {\r\n x += cp[0];\r\n y += cp[1];\r\n z += cp[2] || 0;\r\n });\r\n return [x / cps.length, y / cps.length, z / cps.length];\r\n }\r\n\r\n const positions = this._entity.polyline?.positions?.getValue(Cesium.JulianDate.now());\r\n if (positions && positions.length > 0) {\r\n let lon = 0, lat = 0, height = 0;\r\n positions.forEach(p => {\r\n const c = Cesium.Cartographic.fromCartesian(p);\r\n lon += Cesium.Math.toDegrees(c.longitude);\r\n lat += Cesium.Math.toDegrees(c.latitude);\r\n height += c.height || 0;\r\n });\r\n const count = positions.length;\r\n return [lon / count, lat / count, height / count];\r\n }\r\n\r\n return [0, 0, 0];\r\n }\r\n\r\n /**\r\n * 设置为参数化标绘图元\r\n * @param {string} plotType PlotGraphicType\r\n * @param {Array} controlPoints 控制点 [lon, lat, height][]\r\n * @param {object} options 标绘参数\r\n * @returns {LineWrapper}\r\n */\r\n setPlotType(plotType, controlPoints, options = {}) {\r\n this._entity._isPlotGraphic = true;\r\n this._entity._plotType = plotType;\r\n this._entity._controlPoints = JSON.parse(JSON.stringify(controlPoints));\r\n\r\n const factoryName = `create${this._capitalizePlotType(plotType)}`;\r\n if (!PlotGeometryUtil[factoryName]) {\r\n console.warn(`未知标绘类型: ${plotType}`);\r\n return this;\r\n }\r\n\r\n const positions = PlotGeometryUtil[factoryName](controlPoints, options);\r\n this.setPositions(positions);\r\n return this;\r\n }\r\n\r\n /**\r\n * 更新标绘图元控制点并重算几何\r\n * @param {Array} controlPoints 控制点 [lon, lat, height][]\r\n * @param {object} options 标绘参数\r\n * @returns {LineWrapper}\r\n */\r\n setControlPoints(controlPoints, options = {}) {\r\n if (!this._entity._isPlotGraphic) {\r\n console.warn('非标绘图元,请使用 setPositions');\r\n return this;\r\n }\r\n return this.setPlotType(this._entity._plotType, controlPoints, options);\r\n }\r\n\r\n /**\r\n * 将标绘类型名转为工厂方法名\r\n * @private\r\n */\r\n _capitalizePlotType(plotType) {\r\n return plotType\r\n .replace(/-([a-z])/g, (g) => g[1].toUpperCase())\r\n .replace(/^./, s => s.toUpperCase());\r\n }\r\n\r\n remove() {\r\n this._graphicModule.removeGraphic(this._entity.id);\r\n return this;\r\n }\r\n}\r\n\r\n/**\r\n * 面图元包装器\r\n */\r\nclass PolygonWrapper {\r\n constructor(graphicModule, entity) {\r\n this._entity = entity;\r\n this._graphicModule = graphicModule;\r\n }\r\n\r\n setPositions(coords) {\r\n this._entity.polygon.hierarchy = new Cesium.PolygonHierarchy(\r\n Cesium.Cartesian3.fromDegreesArrayHeights(\r\n coords.flatMap(coord => [coord[0], coord[1], coord[2] || 0])\r\n )\r\n );\r\n return this;\r\n }\r\n\r\n setColor(color) {\r\n this._entity.polygon.material = color;\r\n return this;\r\n }\r\n\r\n setOutlineColor(color) {\r\n this._entity.polygon.outlineColor = color;\r\n return this;\r\n }\r\n\r\n setOutlineWidth(width) {\r\n this._entity.polygon.outlineWidth = width;\r\n return this;\r\n }\r\n\r\n setVisible(visible) {\r\n this._entity.show = visible;\r\n return this;\r\n }\r\n\r\n setClampToGround(clamp) {\r\n this._entity.polygon.clampToGround = clamp;\r\n return this;\r\n }\r\n\r\n setHeightReference(ref) {\r\n this._entity.polygon.heightReference = ref;\r\n return this;\r\n }\r\n\r\n setName(name) {\r\n this._entity.id = name;\r\n return this;\r\n }\r\n\r\n /**\r\n * 在图元上附加标签,标签位置随几何变化自动更新\r\n * @param {string} text 标签文字\r\n * @param {object} options 标签样式 { font, color, outlineColor, outlineWidth, pixelOffset, horizontalOrigin, verticalOrigin }\r\n * @returns {PolygonWrapper}\r\n */\r\n setLabel(text, options = {}) {\r\n if (!this._entity.label) {\r\n this._entity.label = new Cesium.LabelGraphics();\r\n }\r\n this._entity.label.text = text;\r\n this._entity.label.font = options.font || '14px Microsoft YaHei';\r\n this._entity.label.fillColor = options.color || Cesium.Color.WHITE;\r\n this._entity.label.outlineColor = options.outlineColor || Cesium.Color.BLACK;\r\n this._entity.label.outlineWidth = options.outlineWidth ?? 1;\r\n this._entity.label.show = true;\r\n this._entity.label.pixelOffset = options.pixelOffset || new Cesium.Cartesian2(0, -10);\r\n this._entity.label.horizontalOrigin = options.horizontalOrigin ?? Cesium.HorizontalOrigin.CENTER;\r\n this._entity.label.verticalOrigin = options.verticalOrigin ?? Cesium.VerticalOrigin.BOTTOM;\r\n\r\n // 使用 CallbackProperty 动态计算标签锚点,随编辑/平移自动更新\r\n const self = this;\r\n this._entity.position = new Cesium.CallbackProperty(function () {\r\n const anchor = self._computeLabelAnchor();\r\n return Cesium.Cartesian3.fromDegrees(anchor[0], anchor[1], anchor[2] || 0);\r\n }, false);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 计算标签锚点 [lon, lat, height]\r\n * 扇形固定在圆心,其他标绘使用控制点重心,普通面图元使用顶点重心\r\n * @private\r\n */\r\n _computeLabelAnchor() {\r\n if (this._entity._isPlotGraphic && this._entity._controlPoints?.length) {\r\n const cps = this._entity._controlPoints;\r\n if (this._entity._plotType === PlotGraphicType.SECTOR ||\r\n this._entity._plotType === PlotGraphicType.ELLIPSE) {\r\n return cps[0];\r\n }\r\n let x = 0, y = 0, z = 0;\r\n cps.forEach(cp => {\r\n x += cp[0];\r\n y += cp[1];\r\n z += cp[2] || 0;\r\n });\r\n return [x / cps.length, y / cps.length, z / cps.length];\r\n }\r\n\r\n const hierarchy = this._entity.polygon?.hierarchy?.getValue(Cesium.JulianDate.now());\r\n if (hierarchy && hierarchy.positions && hierarchy.positions.length > 0) {\r\n let lon = 0, lat = 0, height = 0;\r\n hierarchy.positions.forEach(p => {\r\n const c = Cesium.Cartographic.fromCartesian(p);\r\n lon += Cesium.Math.toDegrees(c.longitude);\r\n lat += Cesium.Math.toDegrees(c.latitude);\r\n height += c.height || 0;\r\n });\r\n const count = hierarchy.positions.length;\r\n return [lon / count, lat / count, height / count];\r\n }\r\n\r\n return [0, 0, 0];\r\n }\r\n\r\n /**\r\n * 设置为参数化标绘图元\r\n * @param {string} plotType PlotGraphicType\r\n * @param {Array} controlPoints 控制点 [lon, lat, height][]\r\n * @param {object} options 标绘参数\r\n * @returns {PolygonWrapper}\r\n */\r\n setPlotType(plotType, controlPoints, options = {}) {\r\n this._entity._isPlotGraphic = true;\r\n this._entity._plotType = plotType;\r\n this._entity._controlPoints = JSON.parse(JSON.stringify(controlPoints));\r\n\r\n const factoryName = `create${this._capitalizePlotType(plotType)}`;\r\n if (!PlotGeometryUtil[factoryName]) {\r\n console.warn(`未知标绘类型: ${plotType}`);\r\n return this;\r\n }\r\n\r\n const positions = PlotGeometryUtil[factoryName](controlPoints, options);\r\n this.setPositions(positions);\r\n return this;\r\n }\r\n\r\n /**\r\n * 更新标绘图元控制点并重算几何\r\n * @param {Array} controlPoints 控制点 [lon, lat, height][]\r\n * @param {object} options 标绘参数\r\n * @returns {PolygonWrapper}\r\n */\r\n setControlPoints(controlPoints, options = {}) {\r\n if (!this._entity._isPlotGraphic) {\r\n console.warn('非标绘图元,请使用 setPositions');\r\n return this;\r\n }\r\n return this.setPlotType(this._entity._plotType, controlPoints, options);\r\n }\r\n\r\n /**\r\n * 将标绘类型名转为工厂方法名\r\n * @private\r\n */\r\n _capitalizePlotType(plotType) {\r\n return plotType\r\n .replace(/-([a-z])/g, (g) => g[1].toUpperCase())\r\n .replace(/^./, s => s.toUpperCase());\r\n }\r\n\r\n remove() {\r\n this._graphicModule.removeGraphic(this._entity.id);\r\n return this;\r\n }\r\n}\r\n\r\n/**\r\n * 模型图元包装器\r\n */\r\nclass ModelWrapper {\r\n constructor(graphicModule, entity) {\r\n this._entity = entity;\r\n this._graphicModule = graphicModule;\r\n }\r\n\r\n setPosition(coords) {\r\n this._entity.position = Cesium.Cartesian3.fromDegrees(...coords);\r\n return this;\r\n }\r\n\r\n setUrl(url) {\r\n this._entity.model.uri = url;\r\n return this;\r\n }\r\n\r\n setScale(scale) {\r\n this._entity.model.scale = scale;\r\n return this;\r\n }\r\n\r\n setMinimumPixelSize(size) {\r\n this._entity.model.minimumPixelSize = size;\r\n return this;\r\n }\r\n\r\n setVisible(visible) {\r\n this._entity.show = visible;\r\n return this;\r\n }\r\n\r\n setColor(color) {\r\n this._entity.model.color = color;\r\n return this;\r\n }\r\n\r\n setName(name) {\r\n this._entity.id = name;\r\n return this;\r\n }\r\n\r\n remove() {\r\n this._graphicModule.removeGraphic(this._entity.id);\r\n return this;\r\n }\r\n}\r\n\r\n/**\r\n * 文本图元包装器\r\n */\r\nclass TextWrapper {\r\n constructor(graphicModule, entity) {\r\n this._entity = entity;\r\n this._graphicModule = graphicModule;\r\n }\r\n\r\n setPosition(coords) {\r\n this._entity.position = Cesium.Cartesian3.fromDegrees(...coords);\r\n return this;\r\n }\r\n\r\n setText(text) {\r\n this._entity.label.text = text;\r\n\r\n return this;\r\n }\r\n\r\n setFont(font) {\r\n this._entity.label.font = font;\r\n return this;\r\n }\r\n\r\n setColor(color) {\r\n this._entity.label.fillColor = color;\r\n return this;\r\n }\r\n\r\n setOutlineColor(color) {\r\n this._entity.label.outlineColor = color;\r\n return this;\r\n }\r\n\r\n setOutlineWidth(width) {\r\n this._entity.label.outlineWidth = width;\r\n return this;\r\n }\r\n\r\n setVisible(visible) {\r\n this._entity.show = visible;\r\n return this;\r\n }\r\n\r\n setPixelOffset(offset) {\r\n this._entity.label.pixelOffset = offset;\r\n return this;\r\n }\r\n\r\n setScale(scale) {\r\n this._entity.label.scale = scale;\r\n return this;\r\n }\r\n\r\n setAlignType(alignType) {\r\n const horizontalOrigins = [Cesium.HorizontalOrigin.CENTER, Cesium.HorizontalOrigin.LEFT, Cesium.HorizontalOrigin.RIGHT];\r\n const verticalOrigins = [Cesium.VerticalOrigin.CENTER, Cesium.VerticalOrigin.CENTER, Cesium.VerticalOrigin.CENTER, Cesium.VerticalOrigin.TOP, Cesium.VerticalOrigin.BOTTOM];\r\n this._entity.label.horizontalOrigin = horizontalOrigins[alignType] || Cesium.HorizontalOrigin.CENTER;\r\n this._entity.label.verticalOrigin = verticalOrigins[alignType] || Cesium.VerticalOrigin.CENTER;\r\n return this;\r\n }\r\n\r\n setName(name) {\r\n this._entity.id = name;\r\n return this;\r\n }\r\n\r\n remove() {\r\n this._graphicModule.removeGraphic(this._entity.id);\r\n return this;\r\n }\r\n}\r\n\r\n/**\r\n * 图元模块(对应平台 IGraphicModule)\r\n * 职责:点/线/面/模型的参数化创建、编辑、销毁\r\n */\r\nexport class GraphicModule {\r\n constructor(viewer) {\r\n this.viewer = viewer;\r\n this.config = Config.getInstance().getConfig();\r\n this.graphicMap = new Map(); // 图元缓存(ID -> 实体实例)\r\n this.wrapperMap = new Map(); // 包装器缓存(ID -> Wrapper 实例)\r\n }\r\n\r\n /**\r\n * 创建点图元\r\n * @param {string} graphicId 图元唯一ID\r\n * @returns {PointWrapper} 点图元包装器\r\n */\r\n createPoint(graphicId) {\r\n if (this.wrapperMap.has(graphicId)) {\r\n console.warn(`图元 ${graphicId} 已存在`);\r\n return this.wrapperMap.get(graphicId);\r\n }\r\n\r\n const defaultStyle = this.config.graphic?.point || { pixelSize: 8, color: Cesium.Color.RED };\r\n\r\n const entityOptions = {\r\n id: graphicId,\r\n position: Cesium.Cartesian3.fromDegrees(0, 0, 0),\r\n point: {\r\n ...defaultStyle,\r\n outlineColor: Cesium.Color.WHITE,\r\n outlineWidth: 1\r\n }\r\n };\r\n\r\n const entity = this.viewer.entities.add(entityOptions);\r\n this.graphicMap.set(graphicId, entity);\r\n\r\n const wrapper = new PointWrapper(this, entity);\r\n this.wrapperMap.set(graphicId, wrapper);\r\n console.log(`点图元 ${graphicId} 创建成功`);\r\n\r\n return wrapper;\r\n }\r\n\r\n /**\r\n * 创建点图元(旧方法别名,建议迁移到 createPoint)\r\n * @deprecated\r\n */\r\n CreatePoint(graphicId) {\r\n return this.createPoint(graphicId);\r\n }\r\n\r\n /**\r\n * 创建线图元\r\n * @param {string} graphicId 图元唯一ID\r\n * @returns {LineWrapper} 线图元包装器\r\n */\r\n createLine(graphicId) {\r\n if (this.wrapperMap.has(graphicId)) {\r\n console.warn(`图元 ${graphicId} 已存在`);\r\n return this.wrapperMap.get(graphicId);\r\n }\r\n\r\n const defaultStyle = this.config.graphic?.line || { width: 2, material: Cesium.Color.BLUE };\r\n\r\n const entityOptions = {\r\n id: graphicId,\r\n polyline: {\r\n positions: Cesium.Cartesian3.fromDegreesArrayHeights([]),\r\n clampToGround: true,\r\n ...defaultStyle\r\n }\r\n };\r\n\r\n const entity = this.viewer.entities.add(entityOptions);\r\n this.graphicMap.set(graphicId, entity);\r\n\r\n const wrapper = new LineWrapper(this, entity);\r\n this.wrapperMap.set(graphicId, wrapper);\r\n console.log(`线图元 ${graphicId} 创建成功`);\r\n\r\n return wrapper;\r\n }\r\n\r\n /**\r\n * 创建线图元(旧方法别名,建议迁移到 createLine)\r\n * @deprecated\r\n */\r\n CreateLine(graphicId) {\r\n return this.createLine(graphicId);\r\n }\r\n\r\n /**\r\n * 创建面图元\r\n * @param {string} graphicId 图元唯一ID\r\n * @returns {PolygonWrapper} 面图元包装器\r\n */\r\n createPolygon(graphicId) {\r\n if (this.wrapperMap.has(graphicId)) {\r\n console.warn(`图元 ${graphicId} 已存在`);\r\n return this.wrapperMap.get(graphicId);\r\n }\r\n\r\n const defaultStyle = this.config.graphic?.polygon || { color: Cesium.Color.GREEN.withAlpha(0.5) };\r\n\r\n const entityOptions = {\r\n id: graphicId,\r\n polygon: {\r\n hierarchy: new Cesium.PolygonHierarchy([]),\r\n clampToGround: true,\r\n outlineColor: Cesium.Color.WHITE,\r\n outlineWidth: 1,\r\n ...defaultStyle\r\n }\r\n };\r\n\r\n const entity = this.viewer.entities.add(entityOptions);\r\n this.graphicMap.set(graphicId, entity);\r\n\r\n const wrapper = new PolygonWrapper(this, entity);\r\n this.wrapperMap.set(graphicId, wrapper);\r\n console.log(`面图元 ${graphicId} 创建成功`);\r\n\r\n return wrapper;\r\n }\r\n\r\n /**\r\n * 创建面图元(旧方法别名,建议迁移到 createPolygon)\r\n * @deprecated\r\n */\r\n CreatePolygon(graphicId) {\r\n return this.createPolygon(graphicId);\r\n }\r\n\r\n /**\r\n * 创建模型图元\r\n * @param {string} graphicId 图元唯一ID\r\n * @returns {ModelWrapper} 模型图元包装器\r\n */\r\n createModel(graphicId) {\r\n if (this.wrapperMap.has(graphicId)) {\r\n console.warn(`图元 ${graphicId} 已存在`);\r\n return this.wrapperMap.get(graphicId);\r\n }\r\n\r\n const entityOptions = {\r\n id: graphicId,\r\n position: Cesium.Cartesian3.fromDegrees(0, 0, 0),\r\n model: {\r\n uri: \"\",\r\n scale: 1.0,\r\n minimumPixelSize: 128\r\n }\r\n };\r\n\r\n const entity = this.viewer.entities.add(entityOptions);\r\n this.graphicMap.set(graphicId, entity);\r\n\r\n const wrapper = new ModelWrapper(this, entity);\r\n this.wrapperMap.set(graphicId, wrapper);\r\n console.log(`模型图元 ${graphicId} 创建成功`);\r\n\r\n return wrapper;\r\n }\r\n\r\n /**\r\n * 创建模型图元(旧方法别名,建议迁移到 createModel)\r\n * @deprecated\r\n */\r\n CreateModel(graphicId) {\r\n return this.createModel(graphicId);\r\n }\r\n\r\n /**\r\n * 创建文本图元\r\n * @param {string} graphicId 图元唯一ID\r\n * @returns {TextWrapper} 文本图元包装器\r\n */\r\n createText(graphicId) {\r\n if (this.wrapperMap.has(graphicId)) {\r\n console.warn(`图元 ${graphicId} 已存在`);\r\n return this.wrapperMap.get(graphicId);\r\n }\r\n\r\n const entityOptions = {\r\n id: graphicId,\r\n position: Cesium.Cartesian3.fromDegrees(0, 0, 0),\r\n label: {\r\n text: \"\",\r\n font: \"16px Microsoft YaHei\",\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 horizontalOrigin: Cesium.HorizontalOrigin.CENTER\r\n }\r\n };\r\n\r\n const entity = this.viewer.entities.add(entityOptions);\r\n this.graphicMap.set(graphicId, entity);\r\n\r\n const wrapper = new TextWrapper(this, entity);\r\n this.wrapperMap.set(graphicId, wrapper);\r\n console.log(`文本图元 ${graphicId} 创建成功`);\r\n\r\n return wrapper;\r\n }\r\n\r\n /**\r\n * 创建文本图元(旧方法别名,建议迁移到 createText)\r\n * @deprecated\r\n */\r\n CreateText(graphicId) {\r\n return this.createText(graphicId);\r\n }\r\n\r\n /**\r\n * 创建参数化标绘图元\r\n * @param {string} graphicId 图元唯一ID\r\n * @param {string} plotType PlotGraphicType\r\n * @param {Array} controlPoints 控制点 [lon, lat, height][]\r\n * @returns {PolygonWrapper|LineWrapper} 图元包装器\r\n */\r\n createPlotGraphic(graphicId, plotType, controlPoints = []) {\r\n if (this.wrapperMap.has(graphicId)) {\r\n console.warn(`图元 ${graphicId} 已存在`);\r\n return this.wrapperMap.get(graphicId);\r\n }\r\n\r\n const isLine = isLinePlotType(plotType);\r\n const wrapper = isLine\r\n ? this.createLine(graphicId)\r\n : this.createPolygon(graphicId);\r\n\r\n if (controlPoints.length > 0) {\r\n const options = this._getPlotOptions(plotType);\r\n wrapper.setPlotType(plotType, controlPoints, options);\r\n } else {\r\n wrapper._entity._isPlotGraphic = true;\r\n wrapper._entity._plotType = plotType;\r\n wrapper._entity._controlPoints = [];\r\n }\r\n\r\n console.log(`标绘图元 ${graphicId}(${plotType})创建成功`);\r\n return wrapper;\r\n }\r\n\r\n /**\r\n * 创建直箭头\r\n * @param {string} graphicId 图元ID\r\n * @param {Array} controlPoints 控制点\r\n * @returns {PolygonWrapper}\r\n */\r\n createFineArrow(graphicId, controlPoints = []) {\r\n return this.createPlotGraphic(graphicId, PlotGraphicType.FINE_ARROW, controlPoints);\r\n }\r\n\r\n /**\r\n * 创建突击方向箭头\r\n * @param {string} graphicId 图元ID\r\n * @param {Array} controlPoints 控制点\r\n * @returns {PolygonWrapper}\r\n */\r\n createAssaultDirection(graphicId, controlPoints = []) {\r\n return this.createPlotGraphic(graphicId, PlotGraphicType.ASSAULT_DIRECTION, controlPoints);\r\n }\r\n\r\n /**\r\n * 创建细直箭头\r\n * @param {string} graphicId 图元ID\r\n * @param {Array} controlPoints 控制点\r\n * @returns {LineWrapper}\r\n */\r\n createStraightArrow(graphicId, controlPoints = []) {\r\n return this.createPlotGraphic(graphicId, PlotGraphicType.STRAIGHT_ARROW, controlPoints);\r\n }\r\n\r\n /**\r\n * 创建三角形\r\n * @param {string} graphicId 图元ID\r\n * @param {Array} controlPoints 控制点\r\n * @returns {PolygonWrapper}\r\n */\r\n createTriangle(graphicId, controlPoints = []) {\r\n return this.createPlotGraphic(graphicId, PlotGraphicType.TRIANGLE, controlPoints);\r\n }\r\n\r\n /**\r\n * 创建扇形\r\n * @param {string} graphicId 图元ID\r\n * @param {Array} center 圆心 [lon, lat, height]\r\n * @param {number} radius 半径(米)\r\n * @param {number} startAngle 起始角度(度,0=正东,逆时针增大)\r\n * @param {number} endAngle 结束角度(度)\r\n * @returns {PolygonWrapper}\r\n */\r\n createSector(graphicId, center, radius, startAngle, endAngle) {\r\n // 转换为三点控制点,与内部编辑逻辑保持一致\r\n const startAngleRad = (startAngle || 0) * Math.PI / 180;\r\n const endAngleRad = (endAngle === undefined ? 90 : endAngle) * Math.PI / 180;\r\n const pnt2 = PlotGeometryUtil._getPointAtBearingAndDistance(center, radius, startAngleRad);\r\n const pnt3 = PlotGeometryUtil._getPointAtBearingAndDistance(center, radius, endAngleRad);\r\n const controlPoints = [center, pnt2, pnt3];\r\n\r\n return this.createPlotGraphic(graphicId, PlotGraphicType.SECTOR, controlPoints);\r\n }\r\n\r\n /**\r\n * 创建椭圆\r\n * @param {string} graphicId 图元ID\r\n * @param {Array} controlPoints 控制点,3 点 [center, majorEnd, minorEnd]\r\n * @returns {PolygonWrapper}\r\n */\r\n createEllipse(graphicId, controlPoints = []) {\r\n return this.createPlotGraphic(graphicId, PlotGraphicType.ELLIPSE, controlPoints);\r\n }\r\n\r\n /**\r\n * 创建攻击箭头\r\n * @param {string} graphicId 图元ID\r\n * @param {Array} controlPoints 控制点,≥3 点\r\n * @returns {PolygonWrapper}\r\n */\r\n createAttackArrow(graphicId, controlPoints = []) {\r\n return this.createPlotGraphic(graphicId, PlotGraphicType.ATTACK_ARROW, controlPoints);\r\n }\r\n\r\n /**\r\n * 创建燕尾攻击箭头\r\n * @param {string} graphicId 图元ID\r\n * @param {Array} controlPoints 控制点,≥3 点\r\n * @returns {PolygonWrapper}\r\n */\r\n createSwallowtailAttackArrow(graphicId, controlPoints = []) {\r\n return this.createPlotGraphic(graphicId, PlotGraphicType.SWALLOWTAIL_ATTACK_ARROW, controlPoints);\r\n }\r\n\r\n /**\r\n * 创建集结箭头\r\n * @param {string} graphicId 图元ID\r\n * @param {Array} controlPoints 控制点,≥2 点\r\n * @returns {PolygonWrapper}\r\n */\r\n createSquadCombat(graphicId, controlPoints = []) {\r\n return this.createPlotGraphic(graphicId, PlotGraphicType.SQUAD_COMBAT, controlPoints);\r\n }\r\n\r\n /**\r\n * 创建燕尾集结箭头\r\n * @param {string} graphicId 图元ID\r\n * @param {Array} controlPoints 控制点,≥2 点\r\n * @returns {PolygonWrapper}\r\n */\r\n createSwallowtailSquadCombat(graphicId, controlPoints = []) {\r\n return this.createPlotGraphic(graphicId, PlotGraphicType.SWALLOWTAIL_SQUAD_COMBAT, controlPoints);\r\n }\r\n\r\n /**\r\n * 创建双箭头\r\n * @param {string} graphicId 图元ID\r\n * @param {Array} controlPoints 控制点,3~5 点\r\n * @returns {PolygonWrapper}\r\n */\r\n createDoubleArrow(graphicId, controlPoints = []) {\r\n return this.createPlotGraphic(graphicId, PlotGraphicType.DOUBLE_ARROW, controlPoints);\r\n }\r\n\r\n /**\r\n * 创建曲线箭头\r\n * @param {string} graphicId 图元ID\r\n * @param {Array} controlPoints 控制点,≥2 点\r\n * @returns {LineWrapper}\r\n */\r\n createCurvedArrow(graphicId, controlPoints = []) {\r\n return this.createPlotGraphic(graphicId, PlotGraphicType.CURVED_ARROW, controlPoints);\r\n }\r\n\r\n /**\r\n * 创建曲线\r\n * @param {string} graphicId 图元ID\r\n * @param {Array} controlPoints 控制点,≥2 点\r\n * @returns {LineWrapper}\r\n */\r\n createCurve(graphicId, controlPoints = []) {\r\n return this.createPlotGraphic(graphicId, PlotGraphicType.CURVE, controlPoints);\r\n }\r\n\r\n /**\r\n * 获取标绘类型默认参数\r\n * 当前返回空对象,算法参数使用 PlotGeometryUtil 内部默认值\r\n * 后续可扩展为从 Config 读取各标绘类型的算法参数\r\n * @private\r\n */\r\n _getPlotOptions(plotType) {\r\n const plotConfig = this.config.graphic?.plot;\r\n if (!plotConfig) return {};\r\n // 当前仅支持按线/面读取通用样式,算法参数暂不提供配置\r\n return {};\r\n }\r\n\r\n /**\r\n * 删除图元\r\n * @param {string} graphicId 图元ID\r\n * @returns {boolean} 是否删除成功\r\n */\r\n removeGraphic(graphicId) {\r\n if (!this.graphicMap.has(graphicId)) {\r\n console.warn(`图元 ${graphicId} 不存在`);\r\n return false;\r\n }\r\n\r\n const entity = this.graphicMap.get(graphicId);\r\n this.viewer.entities.remove(entity);\r\n this.graphicMap.delete(graphicId);\r\n this.wrapperMap.delete(graphicId);\r\n return true;\r\n }\r\n\r\n /**\r\n * 获取图元\r\n * @param {string} graphicId 图元ID\r\n * @returns {Cesium.Entity|undefined} 图元实体\r\n */\r\n getGraphic(graphicId) {\r\n return this.graphicMap.get(graphicId);\r\n }\r\n}\r\n","import { Config } from '../core/Config.js';\r\n\r\n/**\r\n * 事件模块(对应平台 IEventModule)\r\n * 职责:注册/注销鼠标、键盘、场景事件观察者\r\n */\r\nexport class EventModule {\r\n constructor(viewer) {\r\n this.viewer = viewer;\r\n this.config = Config.getInstance().getConfig();\r\n this.observers = new Map(); // 观察者缓存(事件类型 -> 回调列表)\r\n this.handlers = {}; // Cesium 事件处理器缓存\r\n }\r\n\r\n /**\r\n * 注册事件观察者(对齐平台 Observer 模式)\r\n * @param {string} eventType 事件类型\r\n * - mouse:click/move/down/up\r\n * - keyboard:keyup/keydown\r\n * - scene:load/change/zoom\r\n * @param {Function} callback 回调函数\r\n * @returns {string} 观察者ID(用于注销)\r\n * @example\r\n * // 注册鼠标点击事件\r\n * const observerId = eventModule.registerObserver('mouse:click', (position, entity) => {\r\n * console.log('点击位置:', position, '点击实体:', entity);\r\n * });\r\n */\r\n registerObserver(eventType, callback) {\r\n const observerId = `obs-${Date.now()}-${Math.random().toString(36).slice(2)}`;\r\n const [baseType, subType] = eventType.split(':');\r\n\r\n // 初始化观察者列表\r\n if (!this.observers.has(eventType)) {\r\n this.observers.set(eventType, new Map());\r\n // 创建 Cesium 事件处理器\r\n this.createEventHandler(baseType, subType);\r\n }\r\n\r\n // 存储观察者\r\n this.observers.get(eventType).set(observerId, callback);\r\n return observerId;\r\n }\r\n\r\n /**\r\n * 注销事件观察者\r\n * @param {string} eventType 事件类型\r\n * @param {string} observerId 观察者ID\r\n * @returns {boolean} 是否注销成功\r\n */\r\n unregisterObserver(eventType, observerId) {\r\n if (!this.observers.has(eventType)) return false;\r\n const typeObservers = this.observers.get(eventType);\r\n if (!typeObservers.has(observerId)) return false;\r\n\r\n typeObservers.delete(observerId);\r\n // 无观察者时销毁事件处理器\r\n if (typeObservers.size === 0) {\r\n this.destroyEventHandler(eventType);\r\n this.observers.delete(eventType);\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * 注销所有事件观察者\r\n */\r\n unregisterAllObservers() {\r\n // 按处理器类型安全销毁\r\n Object.keys(this.handlers).forEach(eventKey => {\r\n const handler = this.handlers[eventKey];\r\n if (!handler) return;\r\n\r\n // 判断事件类型:mouse 处理器是 ScreenSpaceEventHandler;\r\n // scene 处理器是 addEventListener 返回的移除函数;\r\n // keyboard 处理器是 document 事件监听器,需通过存储的引用移除。\r\n const [baseType] = eventKey.split(':');\r\n if (baseType === 'mouse' && typeof handler.destroy === 'function') {\r\n handler.destroy();\r\n } else if (baseType === 'scene' && typeof handler === 'function') {\r\n handler();\r\n } else if (baseType === 'keyboard') {\r\n const subType = eventKey.split(':')[1];\r\n document.removeEventListener(subType, handler);\r\n }\r\n });\r\n this.handlers = {};\r\n this.observers.clear();\r\n }\r\n\r\n // ========== 内部方法:创建 Cesium 事件处理器 ==========\r\n createEventHandler(baseType, subType) {\r\n const eventKey = `${baseType}:${subType}`;\r\n if (this.handlers[eventKey]) return;\r\n\r\n switch (baseType) {\r\n // 鼠标事件\r\n case 'mouse':\r\n this.handlers[eventKey] = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas);\r\n // 绑定鼠标事件\r\n const mouseEventType = this.getCesiumMouseEventType(subType);\r\n this.handlers[eventKey].setInputAction((movement) => {\r\n // 获取点击位置和实体\r\n const screenPos = movement.position || movement.endPosition;\r\n if (!screenPos) return;\r\n\r\n let position = null;\r\n let lngLat = null;\r\n\r\n try {\r\n position = this.viewer.scene.pickPosition(screenPos);\r\n } catch (e) {\r\n // pickPosition 可能在无效情况下抛出异常\r\n console.warn('获取点击位置失败:', e);\r\n }\r\n\r\n const pickedEntity = this.viewer.scene.pick(screenPos);\r\n\r\n if (position) {\r\n const cartographic = Cesium.Cartographic.fromCartesian(position);\r\n lngLat = [\r\n Cesium.Math.toDegrees(cartographic.longitude),\r\n Cesium.Math.toDegrees(cartographic.latitude),\r\n cartographic.height\r\n ];\r\n }\r\n\r\n // 触发所有观察者回调\r\n this.observers.get(eventKey).forEach(callback => {\r\n callback(lngLat, pickedEntity ? pickedEntity.id : null, movement);\r\n });\r\n }, mouseEventType);\r\n break;\r\n // 场景事件\r\n case 'scene':\r\n if (subType === 'load') {\r\n // 一次性加载事件:第一次 postRender 触发后自动移除\r\n let removeListener = null;\r\n const listener = () => {\r\n if (removeListener) {\r\n removeListener();\r\n removeListener = null;\r\n }\r\n this.observers.get(eventKey)?.forEach(callback => callback());\r\n };\r\n removeListener = this.viewer.scene.postRender.addEventListener(listener);\r\n this.handlers[eventKey] = removeListener;\r\n } else if (subType === 'zoom') {\r\n this.handlers[eventKey] = this.viewer.camera.changed.addEventListener(() => {\r\n const zoomLevel = this.getZoomLevel();\r\n this.observers.get(eventKey).forEach(callback => callback(zoomLevel));\r\n });\r\n }\r\n break;\r\n // 键盘事件\r\n case 'keyboard':\r\n this.handlers[eventKey] = (e) => {\r\n if (e.type === subType) {\r\n this.observers.get(eventKey).forEach(callback => callback(e));\r\n }\r\n };\r\n document.addEventListener(subType, this.handlers[eventKey]);\r\n break;\r\n }\r\n }\r\n\r\n // ========== 内部方法:销毁事件处理器 ==========\r\n destroyEventHandler(eventType) {\r\n const [baseType, subType] = eventType.split(':');\r\n const eventKey = eventType;\r\n\r\n if (!this.handlers[eventKey]) return;\r\n if (baseType === 'mouse') {\r\n this.handlers[eventKey].destroy();\r\n } else if (baseType === 'scene') {\r\n // scene 事件返回的是移除函数\r\n if (typeof this.handlers[eventKey] === 'function') {\r\n this.handlers[eventKey]();\r\n }\r\n } else if (baseType === 'keyboard') {\r\n document.removeEventListener(subType, this.handlers[eventKey]);\r\n }\r\n delete this.handlers[eventKey];\r\n }\r\n\r\n // ========== 工具方法:映射 Cesium 鼠标事件类型 ==========\r\n getCesiumMouseEventType(subType) {\r\n switch (subType) {\r\n case 'click': return Cesium.ScreenSpaceEventType.LEFT_CLICK;\r\n case 'rightclick': return Cesium.ScreenSpaceEventType.RIGHT_CLICK;\r\n case 'move': return Cesium.ScreenSpaceEventType.MOUSE_MOVE;\r\n case 'down': return Cesium.ScreenSpaceEventType.LEFT_DOWN;\r\n case 'up': return Cesium.ScreenSpaceEventType.LEFT_UP;\r\n default: return Cesium.ScreenSpaceEventType.LEFT_CLICK;\r\n }\r\n }\r\n\r\n // ========== 工具方法:获取场景缩放级别 ==========\r\n getZoomLevel() {\r\n const camera = this.viewer.camera;\r\n const positionCartographic = camera.positionCartographic;\r\n const positionCartesian = Cesium.Cartesian3.fromRadians(\r\n positionCartographic.longitude,\r\n positionCartographic.latitude,\r\n positionCartographic.height\r\n );\r\n const distance = Cesium.Cartesian3.distance(camera.position, positionCartesian);\r\n // 映射为 0-20 级缩放(类似地图瓦片级别)\r\n return Math.floor(Math.log2(6378137 * 2 * Math.PI / distance)) + 1;\r\n }\r\n}","/**\n * 工具基类\n * 所有编辑工具的抽象基类\n */\nexport class BaseTool {\n constructor(editorModule, options = {}) {\n this._editor = editorModule;\n this._viewer = editorModule.viewer;\n this._graphicModule = editorModule.graphicModule;\n this._eventModule = editorModule.eventModule;\n this._options = options;\n this._isActive = false;\n this._handlers = []; // 注册的事件处理器 ID\n }\n\n /**\n * 激活工具\n */\n activate() {\n if (this._isActive) return;\n this._isActive = true;\n this.onActivate();\n }\n\n /**\n * 停用工具\n */\n deactivate() {\n if (!this._isActive) return;\n this._isActive = false;\n this.onDeactivate();\n this.clearHandlers();\n }\n\n /**\n * 激活时的回调,子类重写\n */\n onActivate() { }\n\n /**\n * 停用时的回调,子类重写\n */\n onDeactivate() { }\n\n /**\n * 注册事件观察者\n * @param {string} eventType 事件类型\n * @param {Function} callback 回调函数\n * @returns {string} 观察者 ID\n */\n registerObserver(eventType, callback) {\n const observerId = this._eventModule.registerObserver(eventType, (lngLat, entity, movement) => {\n // mouse:move 事件没有 lngLat,直接传递 movement 对象\n if (eventType === 'mouse:move') {\n callback(movement);\n } else {\n callback(lngLat, entity, movement);\n }\n });\n this._handlers.push({ eventType, observerId });\n return observerId;\n }\n\n /**\n * 清除所有已注册的事件处理器\n */\n clearHandlers() {\n this._handlers.forEach(({ eventType, observerId }) => {\n this._eventModule.unregisterObserver(eventType, observerId);\n });\n this._handlers = [];\n }\n\n /**\n * 获取屏幕坐标对应的地理坐标\n * @param {object} screenPos 屏幕坐标 {x, y}\n * @returns {Array} 经纬度高度 [lon, lat, height]\n */\n screenToLonLat(screenPos) {\n if (!screenPos || screenPos.x == null || screenPos.y == null) return null;\n\n let cartesian = null;\n\n // 优先尝试拾取地形/物体表面位置\n try {\n cartesian = this._viewer.scene.pickPosition(screenPos);\n } catch (e) {\n // ignore\n }\n\n // 如果拾取失败(空白区域),fallback 到椭球体表面\n if (!cartesian) {\n cartesian = this._viewer.camera.pickEllipsoid(\n new Cesium.Cartesian3(screenPos.x, screenPos.y),\n this._viewer.scene.globe.ellipsoid\n );\n }\n\n if (!cartesian) return null;\n\n const cartographic = Cesium.Cartographic.fromCartesian(cartesian);\n return [\n Cesium.Math.toDegrees(cartographic.longitude),\n Cesium.Math.toDegrees(cartographic.latitude),\n cartographic.height\n ];\n }\n\n /**\n * 获取地形高度\n * @param {Array} lonLat 经纬度 [lon, lat]\n * @returns {Promise<number>} 地形高度\n */\n async getTerrainHeight(lonLat) {\n const cartographic = Cesium.Cartographic.fromDegrees(lonLat[0], lonLat[1]);\n const result = await Cesium.sampleTerrainMostDetailed(\n this._viewer.terrainProvider,\n [cartographic]\n );\n return result[0].height;\n }\n\n /**\n * 创建临时图元(不被 GraphicModule 管理,工具内部使用)\n * @param {string} id 临时 ID\n * @param {object} options 图元配置\n * @returns {Cesium.Entity}\n */\n createTempEntity(id, options) {\n const entity = this._viewer.entities.add({\n id: `${id}`,\n ...options\n });\n return entity;\n }\n\n /**\n * 移除临时图元\n * @param {Cesium.Entity} entity\n */\n removeTempEntity(entity) {\n if (entity) {\n this._viewer.entities.remove(entity);\n }\n }\n\n /**\n * 获取唯一 ID\n * @param {string} prefix 前缀\n * @returns {string}\n */\n generateId(prefix = 'tool') {\n return `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n","import { BaseTool } from './BaseTool.js';\r\nimport { PlotGeometryUtil } from '../../utils/PlotGeometryUtil.js';\r\nimport { PlotGraphicType, isLinePlotType } from '../PlotGraphicType.js';\r\n\r\n/**\r\n * 绘制类型枚举\r\n */\r\nexport const DrawType = {\r\n POINT: 'point',\r\n LINE: 'line',\r\n POLYGON: 'polygon',\r\n RECTANGLE: 'rectangle',\r\n CIRCLE: 'circle',\r\n\r\n // 标绘类型\r\n TRIANGLE: 'triangle',\r\n SECTOR: 'sector',\r\n ELLIPSE: 'ellipse',\r\n FINE_ARROW: 'fineArrow',\r\n ASSAULT_DIRECTION: 'assaultDirection',\r\n STRAIGHT_ARROW: 'straightArrow',\r\n ATTACK_ARROW: 'attackArrow',\r\n SWALLOWTAIL_ATTACK_ARROW: 'swallowtailAttackArrow',\r\n SQUAD_COMBAT: 'squadCombat',\r\n SWALLOWTAIL_SQUAD_COMBAT: 'swallowtailSquadCombat',\r\n DOUBLE_ARROW: 'doubleArrow',\r\n CURVED_ARROW: 'curvedArrow',\r\n CURVE: 'curve'\r\n};\r\n\r\n/**\r\n * 标绘绘制配置表\r\n * 描述每种标绘类型的:渲染类型、最少点数、完成触发方式、对应 PlotGraphicType\r\n * 注:当前仅配置已实现的标绘类型,后续随算法实现逐步放开\r\n */\r\nconst PLOT_DRAW_CONFIG = {\r\n [DrawType.TRIANGLE]: {\r\n category: 'polygon',\r\n minPoints: 3,\r\n finishOnCount: 3,\r\n plotType: PlotGraphicType.TRIANGLE\r\n },\r\n [DrawType.SECTOR]: {\r\n category: 'polygon',\r\n minPoints: 3,\r\n finishOnCount: 3,\r\n plotType: PlotGraphicType.SECTOR\r\n },\r\n [DrawType.ELLIPSE]: {\r\n category: 'polygon',\r\n minPoints: 3,\r\n finishOnCount: 3,\r\n plotType: PlotGraphicType.ELLIPSE\r\n },\r\n [DrawType.FINE_ARROW]: {\r\n category: 'polygon',\r\n minPoints: 2,\r\n finishOnCount: 2,\r\n plotType: PlotGraphicType.FINE_ARROW\r\n },\r\n [DrawType.ASSAULT_DIRECTION]: {\r\n category: 'polygon',\r\n minPoints: 2,\r\n finishOnCount: 2,\r\n plotType: PlotGraphicType.ASSAULT_DIRECTION\r\n },\r\n [DrawType.STRAIGHT_ARROW]: {\r\n category: 'line',\r\n minPoints: 2,\r\n finishOnCount: 2,\r\n plotType: PlotGraphicType.STRAIGHT_ARROW\r\n },\r\n [DrawType.ATTACK_ARROW]: {\r\n category: 'polygon',\r\n minPoints: 3,\r\n finishOnDoubleClick: true,\r\n plotType: PlotGraphicType.ATTACK_ARROW\r\n },\r\n [DrawType.SWALLOWTAIL_ATTACK_ARROW]: {\r\n category: 'polygon',\r\n minPoints: 3,\r\n finishOnDoubleClick: true,\r\n plotType: PlotGraphicType.SWALLOWTAIL_ATTACK_ARROW\r\n },\r\n [DrawType.SQUAD_COMBAT]: {\r\n category: 'polygon',\r\n minPoints: 2,\r\n finishOnDoubleClick: true,\r\n plotType: PlotGraphicType.SQUAD_COMBAT\r\n },\r\n [DrawType.SWALLOWTAIL_SQUAD_COMBAT]: {\r\n category: 'polygon',\r\n minPoints: 2,\r\n finishOnDoubleClick: true,\r\n plotType: PlotGraphicType.SWALLOWTAIL_SQUAD_COMBAT\r\n },\r\n [DrawType.DOUBLE_ARROW]: {\r\n category: 'polygon',\r\n minPoints: 4,\r\n finishOnCount: 4,\r\n plotType: PlotGraphicType.DOUBLE_ARROW\r\n },\r\n [DrawType.CURVED_ARROW]: {\r\n category: 'line',\r\n minPoints: 2,\r\n finishOnDoubleClick: true,\r\n plotType: PlotGraphicType.CURVED_ARROW\r\n },\r\n [DrawType.CURVE]: {\r\n category: 'line',\r\n minPoints: 2,\r\n finishOnDoubleClick: true,\r\n plotType: PlotGraphicType.CURVE\r\n }\r\n};\r\n\r\n/**\r\n * 绘制工具\r\n * 支持点、线、面、矩形、圆的交互式绘制\r\n */\r\nexport class DrawTool extends BaseTool {\r\n constructor(editorModule, options = {}) {\r\n super(editorModule, options);\r\n this._drawType = options.drawType || DrawType.POINT;\r\n this._tempEntities = []; // 临时图元(辅助点等)\r\n this._tempPositions = []; // 用户点击的位置数组\r\n this._isDrawing = false; // 是否正在绘制\r\n this._startPos = null; // 起始位置(用于矩形、圆)\r\n this._mouseMoveHandler = null;\r\n this._clickCount = 0;\r\n // 预览线/面实体(单独保存,避免每次重建)\r\n this._previewLine = null;\r\n this._previewPolygon = null;\r\n this._previewRect = null;\r\n this._previewCircle = null;\r\n this._previewPlot = null; // 标绘图元预览\r\n this._currentMousePos = null; // 当前鼠标位置\r\n }\r\n\r\n /**\r\n * 设置绘制类型\r\n * @param {string} type 绘制类型 DrawType\r\n */\r\n setDrawType(type) {\r\n this._drawType = type;\r\n return this;\r\n }\r\n\r\n /**\r\n * 获取绘制类型\r\n */\r\n getDrawType() {\r\n return this._drawType;\r\n }\r\n\r\n onActivate() {\r\n // 注册鼠标事件\r\n this.registerObserver('mouse:click', this._onClick.bind(this));\r\n this.registerObserver('mouse:move', this._onMove.bind(this));\r\n this.registerObserver('mouse:rightclick', this._onRightClick.bind(this));\r\n this.registerObserver('keyboard:keydown', this._onKeyDown.bind(this));\r\n }\r\n\r\n onDeactivate() {\r\n this.clearTempEntities();\r\n this._isDrawing = false;\r\n this._tempPositions = [];\r\n this._clickCount = 0;\r\n this._currentMousePos = null;\r\n this._startPos = null;\r\n this._previewPlot = null;\r\n }\r\n\r\n _onClick(lngLat, entity, movement) {\r\n // lngLat 已经是经纬度数组 [lon, lat, height]\r\n if (!lngLat) return;\r\n\r\n // 优先处理标绘类型\r\n const plotConfig = PLOT_DRAW_CONFIG[this._drawType];\r\n if (plotConfig) {\r\n this._handlePlotClick(lngLat, plotConfig);\r\n return;\r\n }\r\n\r\n switch (this._drawType) {\r\n case DrawType.POINT:\r\n this._drawPoint(lngLat);\r\n break;\r\n case DrawType.LINE:\r\n this._handleLineClick(lngLat);\r\n break;\r\n case DrawType.POLYGON:\r\n this._handlePolygonClick(lngLat);\r\n break;\r\n case DrawType.RECTANGLE:\r\n this._handleRectangleClick(lngLat);\r\n break;\r\n case DrawType.CIRCLE:\r\n this._handleCircleClick(lngLat);\r\n break;\r\n }\r\n }\r\n\r\n _onMove(data) {\r\n // mouse:move 事件的 movement 对象使用 endPosition\r\n const screenPos = data.position || data.endPosition;\r\n if (!screenPos) return;\r\n const lonLat = this.screenToLonLat({ x: screenPos.x, y: screenPos.y });\r\n if (!lonLat) return;\r\n\r\n this._currentMousePos = lonLat;\r\n\r\n if (this._drawType === DrawType.POINT) return;\r\n\r\n // 标绘类型预览\r\n const plotConfig = PLOT_DRAW_CONFIG[this._drawType];\r\n if (plotConfig) {\r\n if (this._isDrawing && this._tempPositions.length >= plotConfig.minPoints - 1) {\r\n this._updatePlotPreview(plotConfig, lonLat);\r\n }\r\n return;\r\n }\r\n\r\n if (this._isDrawing) {\r\n if (this._drawType === DrawType.LINE) {\r\n this._updateTempLine(lonLat);\r\n } else if (this._drawType === DrawType.POLYGON) {\r\n this._updateTempPolygon(lonLat);\r\n }\r\n }\r\n\r\n if (this._startPos) {\r\n this._updateRectOrCirclePreview(lonLat);\r\n }\r\n }\r\n\r\n _onKeyDown(data) {\r\n // ESC 取消绘制\r\n if (data.key === 'Escape') {\r\n this.cancelDrawing();\r\n }\r\n // Enter 完成当前绘制(线、面、标绘)\r\n if (data.key === 'Enter') {\r\n const plotConfig = PLOT_DRAW_CONFIG[this._drawType];\r\n if (plotConfig && this._isDrawing && this._tempPositions.length >= plotConfig.minPoints) {\r\n this._finishPlotDrawing(plotConfig);\r\n return;\r\n }\r\n this.finishDrawing();\r\n }\r\n // Backspace 删除上一个点(用于线、面、标绘)\r\n if (data.key === 'Backspace' && this._isDrawing && this._tempPositions.length > 0) {\r\n const plotConfig = PLOT_DRAW_CONFIG[this._drawType];\r\n if (plotConfig) {\r\n this._tempPositions.pop();\r\n const lastTemp = this._tempEntities.pop();\r\n if (lastTemp) {\r\n this.removeTempEntity(lastTemp);\r\n }\r\n this._updatePlotPreview(plotConfig);\r\n return;\r\n }\r\n\r\n this._tempPositions.pop();\r\n // 删除对应的临时辅助点\r\n const lastTemp = this._tempEntities.pop();\r\n if (lastTemp) {\r\n this.removeTempEntity(lastTemp);\r\n }\r\n this._updateTempPositions();\r\n }\r\n }\r\n\r\n _onRightClick(_lngLat, _entity, _movement) {\r\n // 右键结束绘制(用于线、面、标绘)\r\n if (this._isDrawing) {\r\n const plotConfig = PLOT_DRAW_CONFIG[this._drawType];\r\n if (plotConfig && this._tempPositions.length >= plotConfig.minPoints) {\r\n this._finishPlotDrawing(plotConfig);\r\n return;\r\n }\r\n this.finishDrawing();\r\n }\r\n }\r\n\r\n _drawPoint(lonLat) {\r\n const id = this.generateId('point');\r\n this._graphicModule.CreatePoint(id)\r\n .setPosition(lonLat)\r\n .setColor(Cesium.Color.RED)\r\n .setPixelSize(10);\r\n\r\n this._emitGraphicCreated('point', id);\r\n }\r\n\r\n _handleLineClick(lonLat) {\r\n this._tempPositions.push(lonLat);\r\n this._isDrawing = true;\r\n\r\n // 创建辅助点\r\n const tempPoint = this.createTempEntity(this.generateId('temp_point'), {\r\n position: Cesium.Cartesian3.fromDegrees(...lonLat),\r\n point: {\r\n color: Cesium.Color.YELLOW,\r\n pixelSize: 8\r\n }\r\n });\r\n this._tempEntities.push(tempPoint);\r\n\r\n // 如果已经有至少2个点,创建或更新临时线\r\n if (this._tempPositions.length >= 2) {\r\n this._updateTempLine();\r\n }\r\n\r\n this._emitDrawProgress('line', this._tempPositions.slice());\r\n }\r\n\r\n _handlePolygonClick(lonLat) {\r\n this._tempPositions.push(lonLat);\r\n this._isDrawing = true;\r\n\r\n // 创建辅助点\r\n const tempPoint = this.createTempEntity(this.generateId('temp_point'), {\r\n position: Cesium.Cartesian3.fromDegrees(...lonLat),\r\n point: {\r\n color: Cesium.Color.YELLOW,\r\n pixelSize: 8\r\n }\r\n });\r\n this._tempEntities.push(tempPoint);\r\n\r\n // 如果已经有至少3个点,显示临时面\r\n if (this._tempPositions.length >= 3) {\r\n this._updateTempPolygon();\r\n }\r\n\r\n this._emitDrawProgress('polygon', this._tempPositions.slice());\r\n }\r\n\r\n _handleRectangleClick(lonLat) {\r\n if (!this._startPos) {\r\n // 第一次点击:设置起始点\r\n this._startPos = lonLat;\r\n // 创建起始点标记\r\n const startMarker = this.createTempEntity(this.generateId('temp_start'), {\r\n position: Cesium.Cartesian3.fromDegrees(...lonLat),\r\n point: {\r\n color: Cesium.Color.YELLOW,\r\n pixelSize: 10\r\n }\r\n });\r\n this._tempEntities.push(startMarker);\r\n } else {\r\n // 第二次点击:完成矩形\r\n this._finishRectangle(lonLat);\r\n }\r\n }\r\n\r\n _handleCircleClick(lonLat) {\r\n if (!this._startPos) {\r\n this._startPos = lonLat;\r\n const startMarker = this.createTempEntity(this.generateId('temp_start'), {\r\n position: Cesium.Cartesian3.fromDegrees(...lonLat),\r\n point: {\r\n color: Cesium.Color.YELLOW,\r\n pixelSize: 10\r\n }\r\n });\r\n this._tempEntities.push(startMarker);\r\n } else {\r\n this._finishCircle(lonLat);\r\n }\r\n }\r\n\r\n _updateTempLine(mousePos) {\r\n // 构建预览线位置:已有位置 + 鼠标当前位置(跟随鼠标)\r\n const previewPositions = [...this._tempPositions];\r\n if (mousePos) {\r\n previewPositions.push(mousePos);\r\n }\r\n\r\n // 计算 Cartesian3 数组\r\n const flatCoords = [];\r\n for (const c of previewPositions) {\r\n flatCoords.push(c[0], c[1], c[2] || 0);\r\n }\r\n const cartesians = Cesium.Cartesian3.fromDegreesArrayHeights(flatCoords);\r\n\r\n if (!this._previewLine) {\r\n // 首次创建预览线\r\n this._previewLine = this.createTempEntity(this.generateId('temp_line'), {\r\n polyline: {\r\n positions: cartesians,\r\n material: Cesium.Color.YELLOW,\r\n width: 2\r\n }\r\n });\r\n this._tempEntities.push(this._previewLine);\r\n } else {\r\n // 直接更新位置属性,避免重建实体\r\n // this._previewLine.polyline.positions = cartesians;\r\n this._previewLine.polyline.positions = new Cesium.CallbackProperty(() => {\r\n return cartesians;\r\n }, false);\r\n }\r\n }\r\n\r\n _updateTempPolygon(mousePos) {\r\n if (this._tempPositions.length < 3) return;\r\n\r\n // 构建预览多边形:已有位置 + 鼠标当前位置 \r\n const previewPositions = [...this._tempPositions];\r\n if (mousePos) {\r\n previewPositions.push(mousePos);\r\n }\r\n // previewPositions.push(this._tempPositions[0]); // 闭合\r\n\r\n const flatCoords = [];\r\n for (const c of previewPositions) {\r\n flatCoords.push(c[0], c[1], c[2] || 0);\r\n }\r\n const cartesians = Cesium.Cartesian3.fromDegreesArrayHeights(flatCoords);\r\n\r\n if (!this._previewPolygon) {\r\n // 首次创建预览面\r\n this._previewPolygon = this.createTempEntity(this.generateId('temp_polygon'), {\r\n polygon: {\r\n hierarchy: new Cesium.PolygonHierarchy(cartesians),\r\n material: Cesium.Color.YELLOW.withAlpha(0.5),\r\n outline: false,\r\n outlineColor: Cesium.Color.YELLOW,\r\n }\r\n });\r\n this._tempEntities.push(this._previewPolygon);\r\n } else {\r\n // 直接更新层级,避免重建实体,使用 CallbackProperty 防止闪烁\r\n this._previewPolygon.polygon.hierarchy = new Cesium.CallbackProperty(() => {\r\n return new Cesium.PolygonHierarchy(cartesians);\r\n }, false);\r\n }\r\n }\r\n\r\n _updateRectOrCirclePreview(currentLonLat) {\r\n if (!this._startPos) return;\r\n\r\n if (this._drawType === DrawType.RECTANGLE) {\r\n this._updateRectPreview(currentLonLat);\r\n } else if (this._drawType === DrawType.CIRCLE) {\r\n this._updateCirclePreview(currentLonLat);\r\n }\r\n }\r\n\r\n _updateRectPreview(currentLonLat) {\r\n const corner1 = this._startPos;\r\n const corner2 = currentLonLat;\r\n\r\n // 计算矩形四个角\r\n const positions = [\r\n [corner1[0], corner1[1]],\r\n [corner2[0], corner1[1]],\r\n [corner2[0], corner2[1]],\r\n [corner1[0], corner2[1]],\r\n [corner1[0], corner1[1]]\r\n ];\r\n\r\n const flatCoords = [];\r\n for (const c of positions) {\r\n flatCoords.push(c[0], c[1], 0);\r\n }\r\n const cartesians = Cesium.Cartesian3.fromDegreesArrayHeights(flatCoords);\r\n\r\n if (!this._previewRect) {\r\n this._previewRect = this.createTempEntity(this.generateId('temp_rect'), {\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => cartesians, false),\r\n material: Cesium.Color.YELLOW.withAlpha(0.7),\r\n width: 2\r\n },\r\n polygon: {\r\n hierarchy: new Cesium.CallbackProperty(() => new Cesium.PolygonHierarchy(cartesians), false),\r\n material: Cesium.Color.YELLOW.withAlpha(0.2),\r\n outline: false\r\n }\r\n });\r\n this._previewRect._isPreview = true;\r\n this._tempEntities.push(this._previewRect);\r\n } else {\r\n // 直接更新位置属性\r\n this._previewRect.polyline.positions = new Cesium.CallbackProperty(() => {\r\n const c1 = this._startPos;\r\n const c2 = this._currentMousePos;\r\n if (!c1 || !c2) return cartesians;\r\n const pos = [\r\n [c1[0], c1[1]],\r\n [c2[0], c1[1]],\r\n [c2[0], c2[1]],\r\n [c1[0], c2[1]],\r\n [c1[0], c1[1]]\r\n ];\r\n const flat = [];\r\n for (const p of pos) {\r\n flat.push(p[0], p[1], 0);\r\n }\r\n return Cesium.Cartesian3.fromDegreesArrayHeights(flat);\r\n }, false);\r\n this._previewRect.polygon.hierarchy = new Cesium.CallbackProperty(() => {\r\n const c1 = this._startPos;\r\n const c2 = this._currentMousePos;\r\n if (!c1 || !c2) return new Cesium.PolygonHierarchy(cartesians);\r\n const pos = [\r\n [c1[0], c1[1]],\r\n [c2[0], c1[1]],\r\n [c2[0], c2[1]],\r\n [c1[0], c2[1]],\r\n [c1[0], c1[1]]\r\n ];\r\n const flat = [];\r\n for (const p of pos) {\r\n flat.push(p[0], p[1], 0);\r\n }\r\n return new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(flat));\r\n }, false);\r\n }\r\n }\r\n\r\n _updateCirclePreview(currentLonLat) {\r\n const center = this._startPos;\r\n const radius = this._calcDistance(center, currentLonLat);\r\n const segments = 64;\r\n\r\n if (!this._previewCircle) {\r\n this._previewCircle = this.createTempEntity(this.generateId('temp_circle'), {\r\n polygon: {\r\n hierarchy: new Cesium.CallbackProperty(() => {\r\n const positions = this._generateCirclePositions(center, radius, segments);\r\n const flat = positions.flatMap(c => [c[0], c[1], 0]);\r\n return new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(flat));\r\n }, false),\r\n material: Cesium.Color.YELLOW.withAlpha(0.2),\r\n outline: false // 地形贴合时不支持 outline,设为 false 避免警告\r\n }\r\n });\r\n this._previewCircle._isPreview = true;\r\n this._tempEntities.push(this._previewCircle);\r\n } else {\r\n // 直接更新\r\n this._previewCircle.polygon.hierarchy = new Cesium.CallbackProperty(() => {\r\n const r = this._calcDistance(this._startPos, this._currentMousePos);\r\n const pos = this._generateCirclePositions(this._startPos, r, 64);\r\n const flat = pos.flatMap(c => [c[0], c[1], 0]);\r\n return new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(flat));\r\n }, false);\r\n }\r\n }\r\n\r\n _finishRectangle(corner2) {\r\n const corner1 = this._startPos;\r\n const positions = [\r\n [corner1[0], corner1[1]],\r\n [corner2[0], corner1[1]],\r\n [corner2[0], corner2[1]],\r\n [corner1[0], corner2[1]]\r\n ];\r\n\r\n const id = this.generateId('rectangle');\r\n const entity = this._graphicModule.CreatePolygon(id)\r\n .setPositions(positions)\r\n .setColor(Cesium.Color.BLUE.withAlpha(0.5))\r\n .setOutlineColor(Cesium.Color.BLUE)\r\n .setOutlineWidth(2)\r\n .setHeightReference(Cesium.HeightReference.NONE);\r\n\r\n this.clearTempEntities();\r\n this._startPos = null;\r\n this._emitGraphicCreated('rectangle', id);\r\n }\r\n\r\n _finishCircle(edgeLonLat) {\r\n const center = this._startPos;\r\n const radius = this._calcDistance(center, edgeLonLat);\r\n const positions = this._generateCirclePositions(center, radius, 64);\r\n\r\n const id = this.generateId('circle');\r\n console.log('创建圆:', { center, radius, edgeLonLat, positionsCount: positions.length });\r\n\r\n // 创建圆并标记为圆形\r\n const wrapper = this._graphicModule.CreatePolygon(id);\r\n wrapper.setPositions(positions)\r\n .setColor(Cesium.Color.BLUE.withAlpha(0.5))\r\n .setOutlineColor(Cesium.Color.BLUE)\r\n .setOutlineWidth(2);\r\n\r\n // 给 entity 添加圆形标记(用于 EditTool 特殊处理)\r\n const entity = wrapper._entity;\r\n entity._isCircle = true;\r\n entity._circleCenter = center; // [lon, lat]\r\n entity._circleRadius = radius; // 米\r\n\r\n this.clearTempEntities();\r\n this._startPos = null;\r\n this._currentMousePos = null;\r\n this._emitGraphicCreated('circle', id);\r\n }\r\n\r\n _generateCirclePositions(center, radius, segments) {\r\n const [lon, lat] = center;\r\n const positions = [];\r\n const radPerDeg = Math.PI / 180;\r\n\r\n // 当前纬度的经度米数(随纬度变化)\r\n const metersPerLonDeg = 111320 * Math.cos(lat * radPerDeg);\r\n const metersPerLatDeg = 110540; // 纬度方向相对固定\r\n\r\n for (let i = 0; i <= segments; i++) {\r\n const angle = (i / segments) * Math.PI * 2;\r\n\r\n // 东向和北向偏移(米)→ 转换为度\r\n const dLon = (radius * Math.cos(angle) / metersPerLonDeg);\r\n const dLat = (radius * Math.sin(angle) / metersPerLatDeg);\r\n\r\n positions.push([lon + dLon, lat + dLat]);\r\n }\r\n\r\n return positions;\r\n }\r\n\r\n _calcDistance(coord1, coord2) {\r\n const earthRadius = 6371000; // 米\r\n const [lon1, lat1] = coord1.map(d => d * Math.PI / 180);\r\n const [lon2, lat2] = coord2.map(d => d * Math.PI / 180);\r\n\r\n const dLat = lat2 - lat1;\r\n const dLon = lon2 - lon1;\r\n\r\n const a = Math.sin(dLat / 2) ** 2 +\r\n Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLon / 2) ** 2;\r\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n\r\n return earthRadius * c;\r\n }\r\n\r\n /**\r\n * 将椭圆控制点中的短轴端点投影到与长轴垂直的直线上\r\n * @param {Array} points [center, majorEnd, minorEndOrMouse]\r\n * @returns {Array} [center, majorEnd, projectedMinorEnd]\r\n */\r\n _normalizeEllipseControlPoints(points) {\r\n if (!points || points.length < 3) return points;\r\n\r\n const center = points[0];\r\n const majorEnd = points[1];\r\n const rawMinor = points[2];\r\n\r\n const major = [majorEnd[0] - center[0], majorEnd[1] - center[1]];\r\n const majorLen = Math.hypot(major[0], major[1]);\r\n if (majorLen === 0) return points;\r\n\r\n const ux = major[0] / majorLen;\r\n const uy = major[1] / majorLen;\r\n // 长轴逆时针旋转 90° 得到短轴方向\r\n const perpUx = -uy;\r\n const perpUy = ux;\r\n\r\n const mouseVec = [rawMinor[0] - center[0], rawMinor[1] - center[1]];\r\n const projectedLen = mouseVec[0] * perpUx + mouseVec[1] * perpUy;\r\n\r\n return [\r\n center,\r\n majorEnd,\r\n [center[0] + perpUx * projectedLen, center[1] + perpUy * projectedLen, center[2] || 0]\r\n ];\r\n }\r\n\r\n // ==================== 标绘类型绘制方法 ====================\r\n\r\n /**\r\n * 处理标绘类型点击事件\r\n * @param {Array} lngLat [lon, lat, height]\r\n * @param {object} config 标绘配置\r\n */\r\n _handlePlotClick(lngLat, config) {\r\n this._tempPositions.push(lngLat);\r\n this._isDrawing = true;\r\n\r\n // 创建辅助点\r\n const tempPoint = this.createTempEntity(this.generateId('temp_point'), {\r\n position: Cesium.Cartesian3.fromDegrees(...lngLat),\r\n point: {\r\n color: Cesium.Color.YELLOW,\r\n pixelSize: 8\r\n }\r\n });\r\n this._tempEntities.push(tempPoint);\r\n\r\n // 更新预览\r\n if (this._tempPositions.length >= config.minPoints) {\r\n this._updatePlotPreview(config);\r\n }\r\n\r\n this._emitDrawProgress(config.plotType, this._tempPositions.slice());\r\n\r\n // 判断是否完成绘制\r\n if (config.finishOnCount && this._tempPositions.length >= config.finishOnCount) {\r\n this._finishPlotDrawing(config);\r\n return;\r\n }\r\n\r\n // 点数达到最小值后可以右键/Enter 结束(用于双击结束的类型)\r\n if (config.finishOnDoubleClick && this._tempPositions.length >= config.minPoints) {\r\n // 不自动完成,等待右键/Enter/双击\r\n console.log(`标绘 ${config.plotType} 已达到最小点数,可右键或按 Enter 完成`);\r\n }\r\n }\r\n\r\n /**\r\n * 更新标绘图元预览\r\n * @param {object} config 标绘配置\r\n * @param {Array} mousePos 当前鼠标位置 [lon, lat, height]\r\n */\r\n _updatePlotPreview(config, mousePos) {\r\n const isEllipse = config.plotType === PlotGraphicType.ELLIPSE;\r\n const normalizeForEllipse = (pts) => isEllipse ? this._normalizeEllipseControlPoints(pts) : pts;\r\n\r\n const previewPositions = [...this._tempPositions];\r\n if (mousePos) {\r\n previewPositions.push(mousePos);\r\n }\r\n\r\n if (previewPositions.length < config.minPoints) return;\r\n\r\n const factoryName = `create${this._capitalizePlotType(config.plotType)}`;\r\n if (!PlotGeometryUtil[factoryName]) {\r\n console.warn(`未知标绘类型: ${config.plotType}`);\r\n return;\r\n }\r\n\r\n const geometryPositions = normalizeForEllipse(previewPositions);\r\n const positions = PlotGeometryUtil[factoryName](geometryPositions);\r\n const isLine = config.category === 'line';\r\n const flatCoords = [];\r\n for (const c of positions) {\r\n flatCoords.push(c[0], c[1], c[2] || 0);\r\n }\r\n const cartesians = Cesium.Cartesian3.fromDegreesArrayHeights(flatCoords);\r\n\r\n if (!this._previewPlot) {\r\n if (isLine) {\r\n this._previewPlot = this.createTempEntity(this.generateId('temp_plot'), {\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => cartesians, false),\r\n material: Cesium.Color.YELLOW,\r\n width: 2\r\n }\r\n });\r\n } else {\r\n this._previewPlot = this.createTempEntity(this.generateId('temp_plot'), {\r\n polygon: {\r\n hierarchy: new Cesium.CallbackProperty(() => new Cesium.PolygonHierarchy(cartesians), false),\r\n material: Cesium.Color.YELLOW.withAlpha(0.3),\r\n outline: false\r\n },\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => [...cartesians, cartesians[0]], false),\r\n material: Cesium.Color.YELLOW,\r\n width: 1\r\n }\r\n });\r\n }\r\n this._previewPlot._isPreview = true;\r\n this._tempEntities.push(this._previewPlot);\r\n } else {\r\n const self = this;\r\n if (isLine) {\r\n this._previewPlot.polyline.positions = new Cesium.CallbackProperty(() => {\r\n const dynamicPositions = [...self._tempPositions];\r\n if (self._currentMousePos) {\r\n dynamicPositions.push(self._currentMousePos);\r\n }\r\n if (dynamicPositions.length < config.minPoints) return [];\r\n const pos = PlotGeometryUtil[factoryName](normalizeForEllipse(dynamicPositions));\r\n const flat = [];\r\n for (const c of pos) {\r\n flat.push(c[0], c[1], c[2] || 0);\r\n }\r\n return Cesium.Cartesian3.fromDegreesArrayHeights(flat);\r\n }, false);\r\n } else {\r\n this._previewPlot.polygon.hierarchy = new Cesium.CallbackProperty(() => {\r\n const dynamicPositions = [...self._tempPositions];\r\n if (self._currentMousePos) {\r\n dynamicPositions.push(self._currentMousePos);\r\n }\r\n if (dynamicPositions.length < config.minPoints) return new Cesium.PolygonHierarchy([]);\r\n const pos = PlotGeometryUtil[factoryName](normalizeForEllipse(dynamicPositions));\r\n const flat = [];\r\n for (const c of pos) {\r\n flat.push(c[0], c[1], c[2] || 0);\r\n }\r\n return new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(flat));\r\n }, false);\r\n this._previewPlot.polyline.positions = new Cesium.CallbackProperty(() => {\r\n const dynamicPositions = [...self._tempPositions];\r\n if (self._currentMousePos) {\r\n dynamicPositions.push(self._currentMousePos);\r\n }\r\n if (dynamicPositions.length < config.minPoints) return [];\r\n const pos = PlotGeometryUtil[factoryName](normalizeForEllipse(dynamicPositions));\r\n const flat = [];\r\n for (const c of pos) {\r\n flat.push(c[0], c[1], c[2] || 0);\r\n }\r\n const cart = Cesium.Cartesian3.fromDegreesArrayHeights(flat);\r\n return [...cart, cart[0]];\r\n }, false);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 完成标绘图元绘制\r\n * @param {object} config 标绘配置\r\n */\r\n _finishPlotDrawing(config) {\r\n if (this._tempPositions.length < config.minPoints) return;\r\n\r\n const factoryName = `create${this._capitalizePlotType(config.plotType)}`;\r\n if (!PlotGeometryUtil[factoryName]) {\r\n console.warn(`未知标绘类型: ${config.plotType}`);\r\n return;\r\n }\r\n\r\n const id = this.generateId(config.plotType);\r\n const isLine = config.category === 'line';\r\n\r\n // 椭圆:将第三点击点投影到与长轴垂直的直线上\r\n const finalPositions = config.plotType === PlotGraphicType.ELLIPSE\r\n ? this._normalizeEllipseControlPoints(this._tempPositions)\r\n : this._tempPositions;\r\n\r\n // 创建标绘图元\r\n const wrapper = this._graphicModule.createPlotGraphic(\r\n id,\r\n config.plotType,\r\n finalPositions\r\n );\r\n\r\n // 应用默认样式\r\n if (isLine) {\r\n wrapper.setColor(Cesium.Color.BLUE).setWidth(2);\r\n } else {\r\n wrapper\r\n .setColor(Cesium.Color.BLUE.withAlpha(0.5))\r\n .setOutlineColor(Cesium.Color.BLUE)\r\n .setOutlineWidth(2);\r\n }\r\n\r\n this.clearTempEntities();\r\n this._startPos = null;\r\n this._currentMousePos = null;\r\n this._isDrawing = false;\r\n this._tempPositions = [];\r\n this._previewPlot = null;\r\n\r\n this._emitGraphicCreated(config.plotType, id);\r\n }\r\n\r\n /**\r\n * 将标绘类型名转为工厂方法名\r\n * @private\r\n */\r\n _capitalizePlotType(plotType) {\r\n return plotType\r\n .replace(/-([a-z])/g, (g) => g[1].toUpperCase())\r\n .replace(/^./, s => s.toUpperCase());\r\n }\r\n\r\n _updateTempPositions() {\r\n if (this._drawType === DrawType.LINE) {\r\n this._updateTempLine();\r\n } else if (this._drawType === DrawType.POLYGON) {\r\n this._updateTempPolygon();\r\n }\r\n }\r\n\r\n /**\r\n * 取消当前绘制\r\n */\r\n cancelDrawing() {\r\n this.clearTempEntities();\r\n this._tempPositions = [];\r\n this._isDrawing = false;\r\n this._clickCount = 0;\r\n this._startPos = null;\r\n this._currentMousePos = null;\r\n this._emitDrawCancel();\r\n }\r\n\r\n /**\r\n * 完成当前绘制(回车键触发)\r\n */\r\n finishDrawing() {\r\n if (this._drawType === DrawType.LINE && this._tempPositions.length >= 2) {\r\n const id = this.generateId('line');\r\n this._graphicModule.CreateLine(id)\r\n .setPositions(this._tempPositions)\r\n .setColor(Cesium.Color.BLUE)\r\n .setWidth(2);\r\n\r\n this._emitGraphicCreated('line', id);\r\n } else if (this._drawType === DrawType.POLYGON && this._tempPositions.length >= 3) {\r\n const positions = [...this._tempPositions, this._tempPositions[0]]; // 闭合\r\n const id = this.generateId('polygon');\r\n this._graphicModule.CreatePolygon(id)\r\n .setPositions(positions)\r\n .setColor(Cesium.Color.BLUE.withAlpha(0.5))\r\n .setOutlineColor(Cesium.Color.BLUE)\r\n\r\n this._emitGraphicCreated('polygon', id);\r\n }\r\n\r\n this.clearTempEntities();\r\n this._tempPositions = [];\r\n this._isDrawing = false;\r\n this._clickCount = 0;\r\n this._currentMousePos = null;\r\n }\r\n\r\n /**\r\n * 清除所有临时图元\r\n */\r\n clearTempEntities() {\r\n this._tempEntities.forEach(entity => {\r\n this.removeTempEntity(entity);\r\n });\r\n this._tempEntities = [];\r\n this._previewLine = null;\r\n this._previewPolygon = null;\r\n this._previewRect = null;\r\n this._previewCircle = null;\r\n this._previewPlot = null;\r\n }\r\n\r\n _emitGraphicCreated(type, id) {\r\n // 触发图元创建事件\r\n if (this._options.onGraphicCreated) {\r\n this._options.onGraphicCreated({ type, id });\r\n }\r\n }\r\n\r\n _emitDrawProgress(type, positions) {\r\n if (this._options.onDrawProgress) {\r\n this._options.onDrawProgress({ type, positions });\r\n }\r\n }\r\n\r\n _emitDrawCancel() {\r\n if (this._options.onDrawCancel) {\r\n this._options.onDrawCancel();\r\n }\r\n }\r\n}\r\n","import { BaseTool } from './BaseTool.js';\r\nimport { PlotGraphicType } from '../PlotGraphicType.js';\r\nimport { PlotGeometryUtil } from '../../utils/PlotGeometryUtil.js';\r\n\r\n/**\r\n * 编辑模式枚举\r\n */\r\nexport const EditMode = {\r\n VERTEX: 'vertex' // 顶点编辑模式(同时支持平移)\r\n};\r\n\r\n/**\r\n * 编辑工具\r\n * 支持选中图元的顶点编辑、平移、缩放\r\n */\r\nexport class EditTool extends BaseTool {\r\n // 静态常量\r\n static CLOSE_POINT_TOLERANCE = 0.001; // 闭合点检测容差(1毫米)\r\n static DEFAULT_PIXEL_SIZE = 12;\r\n static DEFAULT_OUTLINE_WIDTH = 2;\r\n static MOVE_THROTTLE_MS = 16; // 拖拽节流间隔(~60fps)\r\n\r\n constructor(editorModule, options = {}) {\r\n super(editorModule, options);\r\n this._editMode = options.editMode || EditMode.VERTEX;\r\n this._selectedEntity = null; // 当前选中的图元\r\n this._selectedEntityId = null;\r\n this._editHandles = []; // 编辑控制点\r\n this._positionOutline = null; // 位置辅助线\r\n this._polygonPreview = null; // 多边形预览\r\n this._tempEntities = []; // 临时图元(如包围盒)\r\n this._isDragging = false; // 是否正在拖拽\r\n this._dragHandle = null; // 当前拖拽的控制点\r\n this._originalPositions = null; // 原始位置(用于撤销)\r\n this._handleVertexIndices = null; // 控制点对应的实际顶点索引\r\n this._rectangleOriginalPositions = null; // 矩形原始顶点位置\r\n this._originalEnableInputs = true; // 原始相机控制状态\r\n this._lastMoveTime = 0; // 上次移动时间(用于节流)\r\n this._originalCircleCenter = null; // 圆形原始圆心\r\n this._originalCircleRadius = null; // 圆形原始半径\r\n this._originalEntityCenter = null; // 原始中心点(用于平移)\r\n this._radiusLine = null; // 半径线引用\r\n }\r\n\r\n /**\r\n * 设置编辑模式\r\n * @param {string} mode EditMode\r\n */\r\n setEditMode(mode) {\r\n this._editMode = mode;\r\n return this;\r\n }\r\n\r\n getEditMode() {\r\n return this._editMode;\r\n }\r\n\r\n /**\r\n * 手动选中图元进行编辑\r\n * @param {string} entityId 图元 ID\r\n */\r\n selectEntity(entityId) {\r\n const entity = this._graphicModule.getGraphic(entityId);\r\n if (entity) {\r\n this._selectEntity(entity);\r\n }\r\n }\r\n\r\n onActivate() {\r\n this.registerObserver('mouse:click', this._onClick.bind(this));\r\n this.registerObserver('mouse:move', this._onMove.bind(this));\r\n this.registerObserver('mouse:down', this._onMouseDown.bind(this));\r\n this.registerObserver('mouse:up', this._onMouseUp.bind(this));\r\n }\r\n\r\n onDeactivate() {\r\n this._deselectEntity();\r\n }\r\n\r\n _onClick(_lngLat, _entity, movement) {\r\n // movement.position 包含屏幕坐标 {x, y}\r\n const screenPos = movement.position || (movement && movement.endPosition);\r\n if (!screenPos) return;\r\n\r\n const picked = this._viewer.scene.pick({ x: screenPos.x, y: screenPos.y });\r\n console.log('EditTool _onClick:', { picked, screenPos });\r\n\r\n if (Cesium.defined(picked) && Cesium.defined(picked.id)) {\r\n const entityId = picked.id.id;\r\n console.log('EditTool picked entity:', entityId);\r\n\r\n // 忽略临时图元\r\n if (entityId && entityId.startsWith('__temp_')) {\r\n return;\r\n }\r\n\r\n // 忽略控制点(拖拽在 _onMouseDown 中处理)\r\n if (entityId && (entityId.startsWith('__edit_handle_') || entityId.includes('__edit_handle_'))) {\r\n return;\r\n }\r\n\r\n const entity = this._graphicModule.getGraphic(entityId);\r\n if (entity) {\r\n console.log('EditTool selecting entity');\r\n this._selectEntity(entity);\r\n } else {\r\n this._deselectEntity();\r\n }\r\n } else {\r\n // 点击空白处取消选择\r\n console.log('EditTool click on empty');\r\n this._deselectEntity();\r\n }\r\n }\r\n\r\n _onMouseDown(_lngLat, _entity, movement) {\r\n // movement 包含屏幕坐标 {position: {x, y}}\r\n const screenPos = movement && (movement.position || movement.endPosition);\r\n if (!screenPos) return;\r\n\r\n // 如果已经选中了图元,检查是否点击了控制点\r\n if (this._selectedEntity && !this._isDragging) {\r\n const picked = this._viewer.scene.pick({ x: screenPos.x, y: screenPos.y });\r\n if (Cesium.defined(picked) && Cesium.defined(picked.id)) {\r\n const entityId = picked.id.id;\r\n if (entityId && (entityId.startsWith('__edit_handle_') || entityId.includes('__edit_handle_'))) {\r\n // 直接在 _editHandles 中查找被点击的控制点\r\n const clickedHandle = this._editHandles.find(handle => handle.id === entityId);\r\n if (clickedHandle) {\r\n this._dragHandle = clickedHandle;\r\n this._isDragging = true;\r\n this._originalPositions = this._getEntityPositions(this._selectedEntity);\r\n // 禁用相机控制,防止拖拽时相机移动\r\n this._viewer.scene.screenSpaceCameraController.enableRotate = false;\r\n this._viewer.scene.screenSpaceCameraController.enableTranslate = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n _onMouseUp(_data) {\r\n if (this._isDragging) {\r\n this._isDragging = false;\r\n // 恢复相机控制\r\n this._viewer.scene.screenSpaceCameraController.enableRotate = true;\r\n this._viewer.scene.screenSpaceCameraController.enableTranslate = true;\r\n this._setCursorStyle('default');\r\n this._emitEditComplete();\r\n this._dragHandle = null;\r\n }\r\n }\r\n\r\n /**\r\n * 设置鼠标样式\r\n * @param {string} style CSS cursor 样式\r\n */\r\n _setCursorStyle(style) {\r\n if (this._viewer && this._viewer.canvas) {\r\n this._viewer.canvas.style.cursor = style;\r\n }\r\n }\r\n\r\n _onMove(data) {\r\n // _onMove receives movement object from BaseTool\r\n const screenPos = data.position || data.endPosition;\r\n if (!screenPos) return;\r\n\r\n // 非拖拽时做节流,避免 hover 检测过于频繁\r\n if (!this._isDragging) {\r\n const now = Date.now();\r\n if (now - this._lastMoveTime < EditTool.MOVE_THROTTLE_MS) return;\r\n this._lastMoveTime = now;\r\n\r\n // 检测是否悬停在控制点上\r\n const picked = this._viewer.scene.pick({ x: screenPos.x, y: screenPos.y });\r\n const isOverHandle = Cesium.defined(picked) && Cesium.defined(picked.id) &&\r\n picked.id.id && picked.id.id.startsWith('__edit_handle_');\r\n this._setCursorStyle(isOverHandle ? 'move' : 'default');\r\n }\r\n\r\n if (this._isDragging && this._dragHandle) {\r\n this._setCursorStyle('grabbing');\r\n\r\n // 拖拽时优先使用椭球面拾取,避免拾取到控制点句柄本身导致图元跟随滞后\r\n let lonLat = null;\r\n const cartesian = this._viewer.camera.pickEllipsoid(\r\n new Cesium.Cartesian2(screenPos.x, screenPos.y),\r\n this._viewer.scene.globe.ellipsoid\r\n );\r\n if (cartesian) {\r\n const c = Cesium.Cartographic.fromCartesian(cartesian);\r\n lonLat = [\r\n Cesium.Math.toDegrees(c.longitude),\r\n Cesium.Math.toDegrees(c.latitude),\r\n c.height || 0\r\n ];\r\n } else {\r\n lonLat = this.screenToLonLat({ x: screenPos.x, y: screenPos.y });\r\n }\r\n\r\n if (lonLat) {\r\n this._updateEntityPosition(lonLat);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 平移标绘图元的所有控制点\r\n * @param {Cesium.Cartesian3} newAnchorCartesian 新锚点位置\r\n * @param {Cesium.Cartesian3} oldAnchorCartesian 旧锚点位置\r\n */\r\n _translatePlotControlPoints(newAnchorCartesian, oldAnchorCartesian) {\r\n const deltaX = newAnchorCartesian.x - oldAnchorCartesian.x;\r\n const deltaY = newAnchorCartesian.y - oldAnchorCartesian.y;\r\n const deltaZ = newAnchorCartesian.z - oldAnchorCartesian.z;\r\n\r\n const controlPoints = this._selectedEntity._controlPoints.map(cp => {\r\n const cpCart = Cesium.Cartesian3.fromDegrees(cp[0], cp[1], cp[2] || 0);\r\n const newCpCart = new Cesium.Cartesian3(\r\n cpCart.x + deltaX,\r\n cpCart.y + deltaY,\r\n cpCart.z + deltaZ\r\n );\r\n const newCpCarto = Cesium.Cartographic.fromCartesian(newCpCart);\r\n return [\r\n Cesium.Math.toDegrees(newCpCarto.longitude),\r\n Cesium.Math.toDegrees(newCpCarto.latitude),\r\n newCpCarto.height || 0\r\n ];\r\n });\r\n\r\n this._selectedEntity._controlPoints = controlPoints;\r\n\r\n // 更新包装器几何\r\n const wrapper = this._graphicModule.wrapperMap.get(this._selectedEntity.id);\r\n if (wrapper) {\r\n wrapper.setControlPoints(controlPoints);\r\n }\r\n\r\n // 更新所有控制点位置\r\n this._editHandles.forEach((handle) => {\r\n if (handle.id && handle.id.includes('center')) {\r\n // 扇形/椭圆:中心控制点固定在圆心/中心;其他类型使用重心\r\n const plotType = this._selectedEntity._plotType;\r\n const center = (plotType === PlotGraphicType.SECTOR || plotType === PlotGraphicType.ELLIPSE)\r\n ? controlPoints[0]\r\n : this._getPlotControlPointsCenter(controlPoints);\r\n handle.position = new Cesium.ConstantPositionProperty(\r\n this._clampPositionToGround(Cesium.Cartesian3.fromDegrees(center[0], center[1], center[2] || 0))\r\n );\r\n return;\r\n }\r\n // 按句柄 ID 解析真实控制点索引(扇形跳过了索引 0,不能直接使用 forEach 索引)\r\n const match = handle.id.match(/__edit_handle_(\\d+)$/);\r\n if (match) {\r\n const cpIndex = parseInt(match[1], 10);\r\n const cp = controlPoints[cpIndex];\r\n handle.position = new Cesium.ConstantPositionProperty(\r\n this._clampPositionToGround(Cesium.Cartesian3.fromDegrees(cp[0], cp[1], cp[2] || 0))\r\n );\r\n }\r\n });\r\n\r\n this._originalPositions = this._getEntityPositions(this._selectedEntity);\r\n }\r\n\r\n _selectEntity(entity) {\r\n // 先取消之前的选中\r\n this._deselectEntity();\r\n\r\n this._selectedEntity = entity;\r\n this._selectedEntityId = entity.id;\r\n\r\n // 创建编辑控制点\r\n this._createEditHandles();\r\n\r\n // 高亮选中图元\r\n this._highlightEntity(entity, true);\r\n\r\n this._emitSelect(entity.id);\r\n }\r\n\r\n _deselectEntity() {\r\n if (this._selectedEntity) {\r\n this._highlightEntity(this._selectedEntity, false);\r\n }\r\n\r\n this._clearEditHandles();\r\n this._selectedEntity = null;\r\n this._selectedEntityId = null;\r\n this._isDragging = false;\r\n this._dragHandle = null;\r\n // 确保取消选择时也恢复相机控制\r\n this._viewer.scene.screenSpaceCameraController.enableRotate = true;\r\n this._viewer.scene.screenSpaceCameraController.enableTranslate = true;\r\n }\r\n\r\n _createEditHandles() {\r\n this._clearEditHandles();\r\n\r\n // 标绘图元:显示控制点并重新生成几何\r\n if (this._selectedEntity && this._selectedEntity._isPlotGraphic) {\r\n this._createPlotControlHandles(this._selectedEntity);\r\n return;\r\n }\r\n\r\n const positions = this._getEditablePositions(this._selectedEntity);\r\n if (!positions || positions.length === 0) return;\r\n\r\n // 创建顶点编辑控制点\r\n this._createVertexHandles(positions);\r\n\r\n // 如果是多顶点图元(非圆形),创建中心控制点用于平移\r\n // 圆形在 _createVertexHandles 中已经创建了中心控制点\r\n if (positions.length > 1 && !this._isCircle(this._selectedEntity)) {\r\n this._createCenterHandleForVertexMode(positions);\r\n }\r\n }\r\n\r\n /**\r\n * 将位置转换为贴地位置(高度设为0)\r\n * @param {Cesium.Cartesian3} position \r\n * @returns {Cesium.Cartesian3}\r\n */\r\n _clampPositionToGround(position) {\r\n if (!position) return position;\r\n const cartographic = Cesium.Cartographic.fromCartesian(position);\r\n return Cesium.Cartesian3.fromDegrees(\r\n Cesium.Math.toDegrees(cartographic.longitude),\r\n Cesium.Math.toDegrees(cartographic.latitude),\r\n 0\r\n );\r\n }\r\n\r\n /**\r\n * 创建标绘图元的控制点\r\n * @param {Cesium.Entity} entity 标绘图元实体\r\n */\r\n _createPlotControlHandles(entity) {\r\n const controlPoints = entity._controlPoints || [];\r\n if (controlPoints.length === 0) return;\r\n\r\n // 扇形:圆心作为平移控制点,不创建黄色顶点句柄\r\n const plotType = entity._plotType;\r\n const isSector = plotType === PlotGraphicType.SECTOR;\r\n const isEllipse = plotType === PlotGraphicType.ELLIPSE;\r\n\r\n controlPoints.forEach((cp, index) => {\r\n if ((isSector || isEllipse) && index === 0) return; // 扇形/椭圆圆心/中心由中心控制点处理\r\n\r\n const clampedPos = this._clampPositionToGround(\r\n Cesium.Cartesian3.fromDegrees(cp[0], cp[1], cp[2] || 0)\r\n );\r\n const handle = this.createTempEntity(`__edit_handle_${index}`, {\r\n position: clampedPos,\r\n point: {\r\n color: Cesium.Color.YELLOW,\r\n pixelSize: 12,\r\n outlineColor: Cesium.Color.RED,\r\n outlineWidth: 2,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND\r\n }\r\n });\r\n this._editHandles.push(handle);\r\n });\r\n\r\n // 显示轮廓辅助线\r\n if (controlPoints.length > 1) {\r\n this._createPlotPositionOutline();\r\n }\r\n\r\n // 椭圆:显示两条半轴辅助线\r\n if (isEllipse) {\r\n this._createEllipseAxisLines();\r\n }\r\n\r\n // 创建中心平移控制点\r\n if (controlPoints.length > 1) {\r\n if (isSector || isEllipse) {\r\n // 扇形/椭圆:中心点即为中心平移控制点\r\n this._createPlotCenterHandle(controlPoints, controlPoints[0]);\r\n } else {\r\n this._createPlotCenterHandle(controlPoints);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 创建标绘图元的中心平移控制点\r\n * @param {Array} controlPoints 控制点\r\n * @param {Array|null} centerPoint 指定中心点位置;为空时使用控制点重心\r\n */\r\n _createPlotCenterHandle(controlPoints, centerPoint = null) {\r\n const center = centerPoint || this._getPlotControlPointsCenter(controlPoints);\r\n if (!center) return;\r\n\r\n this._originalEntityCenter = this._clampPositionToGround(\r\n Cesium.Cartesian3.fromDegrees(center[0], center[1], center[2] || 0)\r\n );\r\n\r\n const handle = this.createTempEntity('__edit_handle_center_plot', {\r\n position: this._originalEntityCenter,\r\n point: {\r\n color: Cesium.Color.CYAN,\r\n pixelSize: 14,\r\n outlineColor: Cesium.Color.BLUE,\r\n outlineWidth: 2,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND\r\n }\r\n });\r\n this._editHandles.push(handle);\r\n }\r\n\r\n /**\r\n * 计算标绘控制点的中心点\r\n * @param {Array} controlPoints 控制点 [lon, lat, height][]\r\n */\r\n _getPlotControlPointsCenter(controlPoints) {\r\n if (!controlPoints || controlPoints.length === 0) return null;\r\n\r\n let x = 0, y = 0, z = 0;\r\n controlPoints.forEach(cp => {\r\n x += cp[0];\r\n y += cp[1];\r\n z += cp[2] || 0;\r\n });\r\n return [x / controlPoints.length, y / controlPoints.length, z / controlPoints.length];\r\n }\r\n\r\n /**\r\n * 创建标绘图元轮廓辅助线\r\n */\r\n _createPlotPositionOutline() {\r\n const self = this;\r\n const entity = this._selectedEntity;\r\n const isLine = Cesium.defined(entity.polyline);\r\n\r\n // 以下标绘图元的控制点连线会干扰真实几何,不绘制轮廓辅助线\r\n const skipOutlineTypes = new Set([\r\n PlotGraphicType.FINE_ARROW,\r\n PlotGraphicType.ASSAULT_DIRECTION,\r\n PlotGraphicType.ATTACK_ARROW,\r\n PlotGraphicType.SWALLOWTAIL_ATTACK_ARROW,\r\n PlotGraphicType.SQUAD_COMBAT,\r\n PlotGraphicType.SWALLOWTAIL_SQUAD_COMBAT,\r\n PlotGraphicType.DOUBLE_ARROW,\r\n PlotGraphicType.CURVED_ARROW,\r\n PlotGraphicType.CURVE\r\n ]);\r\n\r\n this._positionOutline = this.createTempEntity(this.generateId('temp_plot_outline'), {\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(function () {\r\n const handles = self._editHandles;\r\n if (!handles || handles.length === 0) return [];\r\n\r\n const plotType = entity._plotType;\r\n if (skipOutlineTypes.has(plotType)) {\r\n return [];\r\n }\r\n\r\n // 扇形/椭圆:直接沿实际几何边界绘制辅助线\r\n if (plotType === PlotGraphicType.SECTOR || plotType === PlotGraphicType.ELLIPSE) {\r\n const hierarchy = entity.polygon?.hierarchy;\r\n let positions = null;\r\n if (hierarchy) {\r\n if (typeof hierarchy.getValue === 'function') {\r\n const value = hierarchy.getValue(Cesium.JulianDate.now());\r\n positions = value ? value.positions : null;\r\n } else if (hierarchy.positions) {\r\n positions = hierarchy.positions;\r\n }\r\n }\r\n if (positions && positions.length > 2) {\r\n // 复制并显式闭合,避免 polygon 顶点重复导致 polyline 退化\r\n const closed = positions.slice();\r\n closed.push(positions[0]);\r\n return closed;\r\n }\r\n return positions || [];\r\n }\r\n\r\n const degrees = [];\r\n handles.forEach(handle => {\r\n // 跳过中心平移控制点\r\n if (handle.id && handle.id.includes('center')) return;\r\n\r\n const pos = handle.position.getValue(Cesium.JulianDate.now());\r\n if (pos) {\r\n const c = Cesium.Cartographic.fromCartesian(pos);\r\n degrees.push(Cesium.Math.toDegrees(c.longitude));\r\n degrees.push(Cesium.Math.toDegrees(c.latitude));\r\n degrees.push(c.height || 0);\r\n }\r\n });\r\n\r\n if (degrees.length === 0) return [];\r\n\r\n const cartesians = Cesium.Cartesian3.fromDegreesArrayHeights(degrees);\r\n if (isLine) {\r\n return cartesians;\r\n }\r\n return [...cartesians, cartesians[0]];\r\n }, false),\r\n material: Cesium.Color.YELLOW,\r\n width: 2,\r\n clampToGround: true\r\n }\r\n });\r\n this._positionOutline._isPreview = true;\r\n this._tempEntities.push(this._positionOutline);\r\n }\r\n\r\n /**\r\n * 创建椭圆半轴辅助线(中心到长/短半轴端点)\r\n */\r\n _createEllipseAxisLines() {\r\n const self = this;\r\n const axisLine = this.createTempEntity(this.generateId('temp_ellipse_axis'), {\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(function () {\r\n const entity = self._selectedEntity;\r\n const cps = entity?._controlPoints;\r\n if (!cps || cps.length < 3) return [];\r\n\r\n const center = Cesium.Cartesian3.fromDegrees(cps[0][0], cps[0][1], cps[0][2] || 0);\r\n const major = Cesium.Cartesian3.fromDegrees(cps[1][0], cps[1][1], cps[1][2] || 0);\r\n const minor = Cesium.Cartesian3.fromDegrees(cps[2][0], cps[2][1], cps[2][2] || 0);\r\n return [center, major, center, minor];\r\n }, false),\r\n material: Cesium.Color.YELLOW,\r\n width: 2,\r\n clampToGround: true\r\n }\r\n });\r\n axisLine._isPreview = true;\r\n this._tempEntities.push(axisLine);\r\n }\r\n\r\n /**\r\n * 创建顶点编辑控制点\r\n * @param {Array} positions 可编辑位置数组\r\n */\r\n _createVertexHandles(positions) {\r\n // 判断是否是矩形(4个顶点形成矩形)\r\n const isRectangle = Cesium.defined(this._selectedEntity.polygon) && positions.length === 4 &&\r\n this._isRectangle(positions);\r\n\r\n if (isRectangle) {\r\n this._rectangleOriginalPositions = positions.slice();\r\n\r\n const vertexIndices = [0, 1, 2, 3];\r\n\r\n vertexIndices.forEach((vertexIdx, handleIdx) => {\r\n // 修复:位置贴地\r\n const clampedPos = this._clampPositionToGround(positions[vertexIdx]);\r\n const handle = this.createTempEntity(`__edit_handle_${handleIdx}`, {\r\n position: clampedPos,\r\n point: {\r\n color: Cesium.Color.YELLOW,\r\n pixelSize: 12,\r\n outlineColor: Cesium.Color.RED,\r\n outlineWidth: 2,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,\r\n }\r\n });\r\n this._editHandles.push(handle);\r\n });\r\n\r\n this._handleVertexIndices = [0, 1, 2, 3];\r\n } else if (this._isCircle(this._selectedEntity)) {\r\n const circleInfo = this._getCircleInfo(this._selectedEntity);\r\n if (!circleInfo) return;\r\n\r\n const { center, radius } = circleInfo;\r\n // 修复:圆心位置贴地\r\n const centerCartesian = Cesium.Cartesian3.fromDegrees(center[0], center[1], 0);\r\n const radiusPoint = this._getPointOnCircle(center, radius, 0);\r\n const radiusCartesian = Cesium.Cartesian3.fromDegrees(radiusPoint[0], radiusPoint[1], 0);\r\n\r\n // 圆心控制点(可平移)- 使用与其他类型不同的ID格式\r\n const centerHandle = this.createTempEntity('__edit_handle_center', {\r\n position: centerCartesian,\r\n point: {\r\n color: Cesium.Color.CYAN,\r\n pixelSize: 14,\r\n outlineColor: Cesium.Color.BLUE,\r\n outlineWidth: 2,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND\r\n }\r\n });\r\n this._editHandles.push(centerHandle);\r\n\r\n // 半径控制点\r\n const radiusHandle = this.createTempEntity('__edit_handle_radius', {\r\n position: radiusCartesian,\r\n point: {\r\n color: Cesium.Color.RED,\r\n pixelSize: 12,\r\n outlineColor: Cesium.Color.YELLOW,\r\n outlineWidth: 2,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND\r\n }\r\n });\r\n this._editHandles.push(radiusHandle);\r\n\r\n this._handleVertexIndices = ['center', 'radius'];\r\n this._originalCircleCenter = center;\r\n this._originalCircleRadius = radius;\r\n this._rectangleOriginalPositions = null;\r\n\r\n this._createCircleOutline();\r\n } else {\r\n this._rectangleOriginalPositions = null;\r\n this._handleVertexIndices = null;\r\n\r\n positions.forEach((pos, index) => {\r\n const clampedPos = this._clampPositionToGround(pos);\r\n const handle = this.createTempEntity(`__edit_handle_${index}`, {\r\n position: clampedPos,\r\n point: {\r\n color: Cesium.Color.YELLOW,\r\n pixelSize: 12,\r\n outlineColor: Cesium.Color.RED,\r\n outlineWidth: 2,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n // heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,\r\n }\r\n });\r\n this._editHandles.push(handle);\r\n });\r\n }\r\n\r\n if (positions.length > 1) {\r\n this._createPositionOutline();\r\n }\r\n }\r\n\r\n /**\r\n * 在 VERTEX 模式下创建中心控制点用于平移\r\n * @param {Array} positions 顶点位置数组\r\n */\r\n _createCenterHandleForVertexMode(positions) {\r\n const center = this._getEntityCenter(this._selectedEntity);\r\n if (!center) return;\r\n\r\n // 修复:中心点贴地\r\n const clampedCenter = this._clampPositionToGround(center);\r\n this._originalEntityCenter = clampedCenter;\r\n\r\n // 圆形特殊处理:保存圆心和半径用于 undo\r\n if (this._isCircle(this._selectedEntity)) {\r\n const circleInfo = this._getCircleInfo(this._selectedEntity);\r\n if (circleInfo) {\r\n this._originalCircleCenter = circleInfo.center.slice();\r\n this._originalCircleRadius = circleInfo.radius;\r\n }\r\n }\r\n\r\n // 创建中心控制点(使用不同的 ID 区分)\r\n const handle = this.createTempEntity('__edit_handle_center_vertex', {\r\n position: clampedCenter,\r\n point: {\r\n color: Cesium.Color.CYAN,\r\n pixelSize: 14,\r\n outlineColor: Cesium.Color.BLUE,\r\n outlineWidth: 2,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND\r\n }\r\n });\r\n this._editHandles.push(handle);\r\n }\r\n\r\n /**\r\n * 更新中心控制点位置(在顶点编辑后重新计算)\r\n */\r\n _updateCenterHandlePosition() {\r\n // 圆形不需要更新中心点,因为圆心就是中心\r\n if (this._isCircle(this._selectedEntity)) return;\r\n\r\n const centerHandle = this._editHandles.find(h => h.id && h.id.includes('center'));\r\n if (!centerHandle) return;\r\n\r\n // 重新计算当前几何中心\r\n const newCenter = this._getEntityCenter(this._selectedEntity);\r\n if (!newCenter) return;\r\n\r\n // 修复:中心点贴地\r\n const clampedCenter = this._clampPositionToGround(newCenter);\r\n\r\n // 更新中心控制点位置\r\n centerHandle.position = new Cesium.ConstantPositionProperty(clampedCenter);\r\n // 更新原始中心点缓存(用于下次平移计算)\r\n this._originalEntityCenter = clampedCenter;\r\n }\r\n\r\n _createPositionOutline() {\r\n // 从控制点获取位置,性能更好(避免每次从实体重新获取和转换)\r\n const self = this;\r\n const isPolyline = Cesium.defined(this._selectedEntity.polyline);\r\n\r\n this._positionOutline = this.createTempEntity(this.generateId('temp_outline'), {\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(function () {\r\n // 从控制点获取位置(已被更新),排除中心控制点\r\n const handles = self._editHandles;\r\n if (!handles || handles.length === 0) return [];\r\n\r\n // 收集所有控制点的当前位置,排除中心控制点\r\n const degrees = [];\r\n handles.forEach(handle => {\r\n // 跳过所有中心控制点(用于平移)- 修复:统一使用 includes('center')\r\n if (handle.id && handle.id.includes('center')) return;\r\n\r\n const pos = handle.position.getValue(Cesium.JulianDate.now());\r\n if (pos) {\r\n const c = Cesium.Cartographic.fromCartesian(pos);\r\n degrees.push(Cesium.Math.toDegrees(c.longitude));\r\n degrees.push(Cesium.Math.toDegrees(c.latitude));\r\n degrees.push(c.height || 0);\r\n }\r\n });\r\n\r\n if (degrees.length === 0) return [];\r\n\r\n // 线不闭合,面需要闭合\r\n if (isPolyline) {\r\n return Cesium.Cartesian3.fromDegreesArrayHeights(degrees);\r\n }\r\n // 闭合多边形(首尾点相同)\r\n return Cesium.Cartesian3.fromDegreesArrayHeights([...degrees, degrees[0], degrees[1], degrees[2] || 0]);\r\n }, false),\r\n material: Cesium.Color.YELLOW,\r\n width: 2,\r\n clampToGround: true\r\n }\r\n });\r\n this._positionOutline._isPreview = true;\r\n this._tempEntities.push(this._positionOutline);\r\n }\r\n\r\n _clearEditHandles() {\r\n this._editHandles.forEach(handle => {\r\n this.removeTempEntity(handle);\r\n });\r\n this._editHandles = [];\r\n this._positionOutline = null;\r\n this._polygonPreview = null;\r\n this._handleVertexIndices = null;\r\n this._rectangleOriginalPositions = null;\r\n this._originalCircleCenter = null;\r\n this._originalCircleRadius = null;\r\n this._originalEntityCenter = null;\r\n this._radiusLine = null;\r\n\r\n this._tempEntities.forEach(entity => {\r\n this.removeTempEntity(entity);\r\n });\r\n this._tempEntities = [];\r\n }\r\n\r\n _getEditablePositions(entity) {\r\n if (!entity) return [];\r\n\r\n if (Cesium.defined(entity.polyline) && Cesium.defined(entity.polyline.positions)) {\r\n return entity.polyline.positions.getValue(Cesium.JulianDate.now());\r\n }\r\n\r\n if (Cesium.defined(entity.polygon) && Cesium.defined(entity.polygon.hierarchy)) {\r\n const hierarchy = entity.polygon.hierarchy.getValue(Cesium.JulianDate.now());\r\n if (hierarchy && hierarchy.positions) {\r\n let positions = hierarchy.positions;\r\n\r\n // ✅ 检查并移除闭合点(首尾相同)\r\n if (positions.length >= 2) {\r\n const first = positions[0];\r\n const last = positions[positions.length - 1];\r\n // 使用距离判断而不是精确相等(避免浮点误差)\r\n const distance = Cesium.Cartesian3.distance(first, last);\r\n if (distance < EditTool.CLOSE_POINT_TOLERANCE) {\r\n positions = positions.slice(0, -1); // 移除最后一个点\r\n }\r\n }\r\n\r\n return positions;\r\n }\r\n }\r\n\r\n if (Cesium.defined(entity.position)) {\r\n return [entity.position.getValue(Cesium.JulianDate.now())];\r\n }\r\n\r\n return [];\r\n }\r\n\r\n _getEntityPositions(entity) {\r\n return this._getEditablePositions(entity);\r\n }\r\n\r\n /**\r\n * 获取图元中心点\r\n */\r\n _getEntityCenter(entity) {\r\n const positions = this._getEditablePositions(entity);\r\n if (!positions || positions.length === 0) return null;\r\n\r\n let x = 0, y = 0, z = 0;\r\n positions.forEach(p => {\r\n x += p.x;\r\n y += p.y;\r\n z += p.z;\r\n });\r\n const count = positions.length;\r\n return new Cesium.Cartesian3(x / count, y / count, z / count);\r\n }\r\n\r\n /**\r\n * 平移整个图元\r\n * @param {Cesium.Cartesian3} newCenter 新中心点\r\n */\r\n _translateEntity(newCenter) {\r\n if (!this._selectedEntity || !this._originalEntityCenter) {\r\n console.log('Translate skipped: no entity or no original center', {\r\n hasEntity: !!this._selectedEntity,\r\n originalCenter: this._originalEntityCenter\r\n });\r\n return;\r\n }\r\n\r\n // 修复:新中心点贴地\r\n const clampedNewCenter = this._clampPositionToGround(newCenter);\r\n\r\n // 计算偏移量\r\n const deltaX = clampedNewCenter.x - this._originalEntityCenter.x;\r\n const deltaY = clampedNewCenter.y - this._originalEntityCenter.y;\r\n const deltaZ = clampedNewCenter.z - this._originalEntityCenter.z;\r\n\r\n // 计算真正的新中心位置(不是鼠标位置)\r\n const actualNewCenter = new Cesium.Cartesian3(\r\n this._originalEntityCenter.x + deltaX,\r\n this._originalEntityCenter.y + deltaY,\r\n this._originalEntityCenter.z + deltaZ\r\n );\r\n\r\n // 更新原始中心(用于下次平移计算)\r\n this._originalEntityCenter = actualNewCenter;\r\n\r\n // 更新中心控制点位置\r\n this._dragHandle.position = new Cesium.ConstantPositionProperty(actualNewCenter);\r\n\r\n if (Cesium.defined(this._selectedEntity.polyline)) {\r\n // 线图元:平移所有位置\r\n const newPositions = this._originalPositions.map(p => {\r\n const newPos = new Cesium.Cartesian3(p.x + deltaX, p.y + deltaY, p.z + deltaZ);\r\n // 修复:贴地\r\n return this._clampPositionToGround(newPos);\r\n });\r\n this._selectedEntity.polyline.positions = newPositions;\r\n \r\n // 修复:更新所有顶点控制点位置,同时更新中心控制点位置\r\n this._editHandles.forEach((handle) => {\r\n // 修复:统一使用 includes('center') 来判断中心控制点\r\n if (handle.id && handle.id.includes('center')) {\r\n // 中心控制点已经更新过了\r\n return;\r\n }\r\n // 找到对应的顶点索引\r\n const match = handle.id.match(/__edit_handle_(\\d+)$/);\r\n if (match) {\r\n const index = parseInt(match[1], 10);\r\n if (newPositions[index]) {\r\n handle.position = new Cesium.ConstantPositionProperty(newPositions[index]);\r\n }\r\n }\r\n });\r\n \r\n // 更新原始位置缓存\r\n this._originalPositions = newPositions;\r\n } else if (Cesium.defined(this._selectedEntity.polygon)) {\r\n if (this._isCircle(this._selectedEntity)) {\r\n // 圆形平移\r\n const oldCenter = this._selectedEntity._circleCenter; // [lon, lat]\r\n\r\n // 将旧的圆心经纬度转为 Cartesian3\r\n const oldCenterCartesian = Cesium.Cartesian3.fromDegrees(oldCenter[0], oldCenter[1], 0);\r\n\r\n // 应用偏移量计算新的 Cartesian3 位置\r\n const newCenterCartesian = new Cesium.Cartesian3(\r\n oldCenterCartesian.x + deltaX,\r\n oldCenterCartesian.y + deltaY,\r\n oldCenterCartesian.z + deltaZ\r\n );\r\n\r\n // 将新的 Cartesian3 转回经纬度\r\n const newCenterCartographic = Cesium.Cartographic.fromCartesian(newCenterCartesian);\r\n const newCenterLon = Cesium.Math.toDegrees(newCenterCartographic.longitude);\r\n const newCenterLat = Cesium.Math.toDegrees(newCenterCartographic.latitude);\r\n\r\n this._selectedEntity._circleCenter = [newCenterLon, newCenterLat];\r\n\r\n // 更新多边形顶点\r\n const positions = this._generateCirclePositions(\r\n this._selectedEntity._circleCenter,\r\n this._selectedEntity._circleRadius,\r\n 256\r\n );\r\n const flat = positions.flatMap(c => [c[0], c[1], 0]);\r\n this._selectedEntity.polygon.hierarchy = new Cesium.PolygonHierarchy(\r\n Cesium.Cartesian3.fromDegreesArrayHeights(flat)\r\n );\r\n\r\n // 更新圆心控制点位置\r\n const centerHandle = this._editHandles.find(h => h.id && h.id.includes('__edit_handle_center'));\r\n if (centerHandle) {\r\n centerHandle.position = new Cesium.ConstantPositionProperty(newCenterCartesian);\r\n }\r\n } else {\r\n // 普通多边形:平移所有顶点\r\n const newPositions = this._originalPositions.map(p => {\r\n const newPos = new Cesium.Cartesian3(p.x + deltaX, p.y + deltaY, p.z + deltaZ);\r\n // 修复:贴地\r\n return this._clampPositionToGround(newPos);\r\n });\r\n // 添加闭合点\r\n newPositions.push(newPositions[0].clone());\r\n this._selectedEntity.polygon.hierarchy = new Cesium.PolygonHierarchy(newPositions);\r\n \r\n // 修复:更新顶点控制点位置,使用更可靠的ID匹配\r\n this._editHandles.forEach((handle) => {\r\n // 修复:统一使用 includes('center') 来判断中心控制点\r\n if (handle.id && handle.id.includes('center')) {\r\n return;\r\n }\r\n // 提取数字索引\r\n const match = handle.id.match(/__edit_handle_(\\d+)$/);\r\n if (match) {\r\n const index = parseInt(match[1], 10);\r\n if (newPositions[index]) {\r\n handle.position = new Cesium.ConstantPositionProperty(newPositions[index]);\r\n }\r\n }\r\n });\r\n \r\n // 更新原始位置缓存\r\n this._originalPositions = newPositions.slice(0, -1);\r\n }\r\n } else if (Cesium.defined(this._selectedEntity.position)) {\r\n // 点/文本图元:平移位置\r\n this._selectedEntity.position = new Cesium.ConstantPositionProperty(actualNewCenter);\r\n this._originalPositions = [actualNewCenter];\r\n }\r\n }\r\n\r\n _isRectangle(positions) {\r\n if (positions.length !== 4) return false;\r\n\r\n const relativeTolerance = 0.001; // 0.1% 相对误差\r\n\r\n // 提取XY坐标(忽略Z)\r\n const xy = positions.map(p => ({ x: p.x, y: p.y }));\r\n\r\n const [v0, v1, v2, v3] = xy;\r\n\r\n // 计算XY平面上的距离\r\n const dist = (p1, p2) => Math.sqrt(\r\n Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2)\r\n );\r\n\r\n const d01 = dist(v0, v1);\r\n const d12 = dist(v1, v2);\r\n const d23 = dist(v2, v3);\r\n const d30 = dist(v3, v0);\r\n const d02 = dist(v0, v2);\r\n const d13 = dist(v1, v3);\r\n\r\n const oppositeSidesEqual =\r\n Math.abs(d01 - d23) / Math.max(d01, d23) < relativeTolerance &&\r\n Math.abs(d12 - d30) / Math.max(d12, d30) < relativeTolerance;\r\n\r\n const diagonalsEqual = Math.abs(d02 - d13) / Math.max(d02, d13) < relativeTolerance;\r\n\r\n return oppositeSidesEqual && diagonalsEqual;\r\n }\r\n\r\n /**\r\n * 检测 entity 是否为圆\r\n */\r\n _isCircle(entity) {\r\n return entity && entity._isCircle === true;\r\n }\r\n\r\n /**\r\n * 获取圆的中心点和半径\r\n */\r\n _getCircleInfo(entity) {\r\n if (!this._isCircle(entity)) return null;\r\n return {\r\n center: entity._circleCenter, // [lon, lat]\r\n radius: entity._circleRadius // 米\r\n };\r\n }\r\n\r\n /**\r\n * 生成圆的多边形顶点(用于更新圆的形状)\r\n * @param {Array} center [lon, lat]\r\n * @param {number} radius 半径(米)\r\n * @param {number} segments 顶点数\r\n * @returns {Array} 经纬度数组\r\n */\r\n _generateCirclePositions(center, radius, segments = 256) {\r\n const [lon, lat] = center;\r\n const radPerDeg = Math.PI / 180;\r\n const positions = [];\r\n\r\n // 当前纬度的经度米数(随纬度变化)\r\n const metersPerLonDeg = 111320 * Math.cos(lat * radPerDeg);\r\n const metersPerLatDeg = 110540; // 纬度方向相对固定\r\n\r\n for (let i = 0; i <= segments; i++) {\r\n const angle = (i / segments) * Math.PI * 2;\r\n const dLon = (radius * Math.cos(angle) / metersPerLonDeg);\r\n const dLat = (radius * Math.sin(angle) / metersPerLatDeg);\r\n positions.push([lon + dLon, lat + dLat]);\r\n }\r\n\r\n return positions;\r\n }\r\n\r\n /**\r\n * 计算圆周上的点\r\n * @param {Array} center [lon, lat]\r\n * @param {number} radius 半径(米)\r\n * @param {number} angleRadians 角度(弧度)\r\n * @returns {Array} [lon, lat]\r\n */\r\n _getPointOnCircle(center, radius, angleRadians) {\r\n const [lon, lat] = center;\r\n const radPerDeg = Math.PI / 180;\r\n const metersPerLonDeg = 111320 * Math.cos(lat * radPerDeg);\r\n const metersPerLatDeg = 110540;\r\n\r\n const dLon = (radius * Math.cos(angleRadians) / metersPerLonDeg);\r\n const dLat = (radius * Math.sin(angleRadians) / metersPerLatDeg);\r\n return [lon + dLon, lat + dLat];\r\n }\r\n\r\n /**\r\n * 将 oldAxis 绕原点旋转到与 newAxis 垂直,并保持原长度和相对方向(顺/逆时针)\r\n * @param {Array} newAxis [dx, dy]\r\n * @param {Array} oldAxis [dx, dy]\r\n * @returns {Array} [rx, ry]\r\n */\r\n _rotatePerpendicular(newAxis, oldAxis) {\r\n const newLen = Math.hypot(newAxis[0], newAxis[1]);\r\n const oldLen = Math.hypot(oldAxis[0], oldAxis[1]);\r\n if (newLen === 0 || oldLen === 0) return [0, 0];\r\n\r\n const ux = newAxis[0] / newLen;\r\n const uy = newAxis[1] / newLen;\r\n\r\n // 叉积判断 oldAxis 在 newAxis 的左侧还是右侧\r\n const cross = newAxis[0] * oldAxis[1] - newAxis[1] * oldAxis[0];\r\n const sign = cross >= 0 ? 1 : -1;\r\n\r\n // 将 newAxis 旋转 ±90° 得到新的垂直方向,并保持 oldAxis 长度\r\n return [-sign * uy * oldLen, sign * ux * oldLen];\r\n }\r\n\r\n /**\r\n * 创建圆形辅助线\r\n */\r\n _createCircleOutline() {\r\n const self = this;\r\n\r\n // 圆周辅助线(黄色)\r\n this._positionOutline = this.createTempEntity(this.generateId('temp_circle_outline'), {\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(function () {\r\n const circleInfo = self._getCircleInfo(self._selectedEntity);\r\n if (!circleInfo) return [];\r\n\r\n const { center, radius } = circleInfo;\r\n const positions = self._generateCirclePositions(center, radius, 256);\r\n const flat = positions.flatMap(c => [c[0], c[1], 0]);\r\n return Cesium.Cartesian3.fromDegreesArrayHeights(flat);\r\n }, false),\r\n material: Cesium.Color.YELLOW,\r\n width: 2,\r\n clampToGround: true\r\n }\r\n });\r\n this._positionOutline._isPreview = true;\r\n this._tempEntities.push(this._positionOutline);\r\n\r\n // 半径连线(红色,从圆心到编辑点)\r\n // 修复:正确获取半径控制点的位置\r\n this._radiusLine = this.createTempEntity(this.generateId('temp_radius_line'), {\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(function () {\r\n const circleInfo = self._getCircleInfo(self._selectedEntity);\r\n if (!circleInfo) return [];\r\n\r\n const { center } = circleInfo;\r\n // 修复:通过ID查找半径控制点,而不是固定索引\r\n const radiusHandle = self._editHandles.find(h => h.id && h.id.includes('__edit_handle_radius'));\r\n if (!radiusHandle) return [];\r\n\r\n const radiusPos = radiusHandle.position.getValue(Cesium.JulianDate.now());\r\n if (!radiusPos) return [];\r\n\r\n const centerCart = Cesium.Cartesian3.fromDegrees(center[0], center[1], 0);\r\n return [centerCart, radiusPos];\r\n }, false),\r\n material: Cesium.Color.RED,\r\n width: 3,\r\n clampToGround: true\r\n }\r\n });\r\n this._radiusLine._isPreview = true;\r\n this._tempEntities.push(this._radiusLine);\r\n }\r\n\r\n /**\r\n * 计算两点之间的距离(米)\r\n * @param {Array} coord1 [lon, lat]\r\n * @param {Array} coord2 [lon, lat]\r\n * @returns {number} 距离(米)\r\n */\r\n _calcDistance(coord1, coord2) {\r\n const earthRadius = 6371000; // 米\r\n const [lon1, lat1] = coord1.map(d => d * Math.PI / 180);\r\n const [lon2, lat2] = coord2.map(d => d * Math.PI / 180);\r\n\r\n const dLat = lat2 - lat1;\r\n const dLon = lon2 - lon1;\r\n\r\n const a = Math.sin(dLat / 2) ** 2 +\r\n Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLon / 2) ** 2;\r\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n\r\n return earthRadius * c;\r\n }\r\n\r\n /**\r\n * 计算矩形拖拽后的新顶点位置\r\n * @param {Cesium.Cartesian3} newPos - 拖拽的新位置\r\n * @param {Array} originalPositions - 原始4个顶点位置\r\n * @param {number} draggedIndex - 被拖拽的顶点索引 (0,1,2,3)\r\n * @returns {Array} 新的4个顶点位置数组\r\n */\r\n _computeRectangleNewPositions(newPos, originalPositions, draggedIndex) {\r\n // 对角顶点索引:0->2, 1->3, 2->0, 3->1\r\n const oppositeIndex = (draggedIndex + 2) % 4;\r\n const newP = Cesium.Cartographic.fromCartesian(newPos);\r\n const currentPos = originalPositions.map(p => Cesium.Cartographic.fromCartesian(p));\r\n const oppositePos = currentPos[oppositeIndex];\r\n\r\n const newPositions = new Array(4);\r\n newPositions[draggedIndex] = newPos; // 拖拽点为新位置\r\n newPositions[oppositeIndex] = originalPositions[oppositeIndex]; // 对角点固定\r\n\r\n // 计算相邻两个顶点\r\n // draggedIndex 的相邻顶点是 (draggedIndex + 1) % 4 和 (draggedIndex + 3) % 4\r\n const neighbor1 = (draggedIndex + 1) % 4;\r\n const neighbor2 = (draggedIndex + 3) % 4;\r\n\r\n // neighbor1 使用 newPos 的 longitude 和 opposite 的 latitude\r\n newPositions[neighbor1] = Cesium.Cartesian3.fromRadians(\r\n newP.longitude,\r\n oppositePos.latitude,\r\n oppositePos.height\r\n );\r\n\r\n // neighbor2 使用 opposite 的 longitude 和 newPos 的 latitude\r\n newPositions[neighbor2] = Cesium.Cartesian3.fromRadians(\r\n oppositePos.longitude,\r\n newP.latitude,\r\n oppositePos.height\r\n );\r\n\r\n return newPositions;\r\n }\r\n\r\n _updateEntityPosition(newLonLat) {\r\n if (!this._selectedEntity) return;\r\n\r\n const handleIndex = this._editHandles.indexOf(this._dragHandle);\r\n if (handleIndex === -1) return;\r\n\r\n // 修复:新位置贴地(高度设为0)\r\n const newCartesian = Cesium.Cartesian3.fromDegrees(newLonLat[0], newLonLat[1], 0);\r\n\r\n // 标绘图元:拖拽控制点重新生成几何\r\n if (this._selectedEntity._isPlotGraphic) {\r\n const handleId = this._dragHandle.id;\r\n\r\n // 拖拽中心控制点:平移整个标绘图元\r\n if (handleId && handleId.includes('center') && this._originalEntityCenter) {\r\n const clampedNewCenter = this._clampPositionToGround(newCartesian);\r\n this._translatePlotControlPoints(clampedNewCenter, this._originalEntityCenter);\r\n this._originalEntityCenter = clampedNewCenter;\r\n return;\r\n }\r\n\r\n const handleMatch = handleId.match(/__edit_handle_(\\d+)$/);\r\n if (!handleMatch) return;\r\n\r\n const index = parseInt(handleMatch[1], 10);\r\n const plotType = this._selectedEntity._plotType;\r\n\r\n // 扇形:拖拽圆心(索引0)时整体平移,保持两半径等长\r\n if (plotType === PlotGraphicType.SECTOR && index === 0) {\r\n const oldCenter = this._selectedEntity._controlPoints[0];\r\n const oldCenterCart = Cesium.Cartesian3.fromDegrees(oldCenter[0], oldCenter[1], oldCenter[2] || 0);\r\n const clampedNewCenter = this._clampPositionToGround(newCartesian);\r\n this._translatePlotControlPoints(clampedNewCenter, oldCenterCart);\r\n // 中心控制点固定在圆心\r\n this._originalEntityCenter = this._clampPositionToGround(\r\n Cesium.Cartesian3.fromDegrees(\r\n this._selectedEntity._controlPoints[0][0],\r\n this._selectedEntity._controlPoints[0][1],\r\n this._selectedEntity._controlPoints[0][2] || 0\r\n )\r\n );\r\n return;\r\n }\r\n\r\n const controlPoints = this._selectedEntity._controlPoints.map((cp, i) =>\r\n i === index ? [newLonLat[0], newLonLat[1], cp[2] || 0] : cp\r\n );\r\n\r\n // 扇形:两个半径控制点同步缩放,保持半径一致\r\n if (plotType === PlotGraphicType.SECTOR && index > 0) {\r\n const center = controlPoints[0];\r\n // 使用球面距离(米)作为新半径,与 createSector 保持一致\r\n const newRadius = PlotGeometryUtil._calcSphericalDistance(controlPoints[index], center);\r\n const otherIndex = index === 1 ? 2 : 1;\r\n const otherCp = controlPoints[otherIndex];\r\n // 保持另一个控制点的真实地理方位角,按新半径在球面圆上重新定位\r\n const otherBearing = PlotGeometryUtil._getBearing(center, otherCp);\r\n const newOtherPoint = PlotGeometryUtil._getPointAtBearingAndDistance(center, newRadius, otherBearing);\r\n controlPoints[otherIndex] = [newOtherPoint[0], newOtherPoint[1], otherCp[2] || 0];\r\n }\r\n\r\n // 椭圆:长短半轴端点控制,保持两轴垂直\r\n if (plotType === PlotGraphicType.ELLIPSE && (index === 1 || index === 2)) {\r\n const center = controlPoints[0];\r\n if (index === 1) {\r\n // 长轴端点移动:改变长轴长度/方向,短轴端点跟随旋转并保持长度\r\n const newMajor = [controlPoints[1][0] - center[0], controlPoints[1][1] - center[1]];\r\n const oldMinor = [\r\n this._selectedEntity._controlPoints[2][0] - center[0],\r\n this._selectedEntity._controlPoints[2][1] - center[1]\r\n ];\r\n const newMinor = this._rotatePerpendicular(newMajor, oldMinor);\r\n controlPoints[2] = [center[0] + newMinor[0], center[1] + newMinor[1], center[2] || 0];\r\n } else if (index === 2) {\r\n // 短轴端点移动:只改变短轴长度,投影到过中心且与长轴垂直的直线上\r\n const major = [controlPoints[1][0] - center[0], controlPoints[1][1] - center[1]];\r\n const majorLen = Math.hypot(major[0], major[1]);\r\n if (majorLen > 0) {\r\n const ux = major[0] / majorLen;\r\n const uy = major[1] / majorLen;\r\n // 长轴逆时针旋转 90° 得到垂直方向\r\n const perpUx = -uy;\r\n const perpUy = ux;\r\n const mouseVec = [newLonLat[0] - center[0], newLonLat[1] - center[1]];\r\n const projectedLen = mouseVec[0] * perpUx + mouseVec[1] * perpUy;\r\n controlPoints[2] = [\r\n center[0] + perpUx * projectedLen,\r\n center[1] + perpUy * projectedLen,\r\n center[2] || 0\r\n ];\r\n }\r\n }\r\n }\r\n\r\n // 更新控制点缓存\r\n this._selectedEntity._controlPoints = controlPoints;\r\n\r\n // 重新生成几何\r\n const wrapper = this._graphicModule.wrapperMap.get(this._selectedEntity.id);\r\n if (wrapper) {\r\n wrapper.setControlPoints(controlPoints);\r\n }\r\n\r\n // 更新控制点位置(不含中心控制点)\r\n this._editHandles.forEach((handle) => {\r\n if (handle.id && handle.id.includes('center')) return;\r\n // 按句柄 ID 解析真实控制点索引(扇形跳过了索引 0)\r\n const match = handle.id.match(/__edit_handle_(\\d+)$/);\r\n if (match) {\r\n const cpIndex = parseInt(match[1], 10);\r\n const cp = controlPoints[cpIndex];\r\n handle.position = new Cesium.ConstantPositionProperty(\r\n this._clampPositionToGround(Cesium.Cartesian3.fromDegrees(cp[0], cp[1], cp[2] || 0))\r\n );\r\n }\r\n });\r\n\r\n // 更新中心控制点位置\r\n const centerHandle = this._editHandles.find(h => h.id && h.id.includes('center'));\r\n if (centerHandle) {\r\n // 扇形/椭圆:中心控制点固定在中心;其他类型使用重心\r\n const newCenter = (plotType === PlotGraphicType.SECTOR || plotType === PlotGraphicType.ELLIPSE)\r\n ? controlPoints[0]\r\n : this._getPlotControlPointsCenter(controlPoints);\r\n centerHandle.position = new Cesium.ConstantPositionProperty(\r\n this._clampPositionToGround(Cesium.Cartesian3.fromDegrees(newCenter[0], newCenter[1], newCenter[2] || 0))\r\n );\r\n this._originalEntityCenter = this._clampPositionToGround(\r\n Cesium.Cartesian3.fromDegrees(newCenter[0], newCenter[1], newCenter[2] || 0)\r\n );\r\n }\r\n\r\n // 更新原始位置缓存\r\n this._originalPositions = this._getEntityPositions(this._selectedEntity);\r\n return;\r\n }\r\n\r\n const hierarchy = this._selectedEntity.polygon?.hierarchy?.getValue(Cesium.JulianDate.now());\r\n\r\n // 拖动中心控制点:平移整个图元\r\n // 修复:统一使用 includes('center') 来判断\r\n if (this._dragHandle.id && this._dragHandle.id.includes('center') && this._originalEntityCenter) {\r\n this._translateEntity(newCartesian);\r\n return;\r\n }\r\n\r\n // 矩形特殊情况:重新计算所有4个顶点\r\n // 确保是数字索引(矩形用 [0,1,2,3],圆用 ['center','radius'])\r\n if (this._handleVertexIndices &&\r\n Array.isArray(this._handleVertexIndices) &&\r\n typeof this._handleVertexIndices[0] === 'number' &&\r\n Cesium.defined(this._selectedEntity.polygon)) {\r\n if (!hierarchy || !hierarchy.positions || hierarchy.positions.length < 4) return;\r\n\r\n const draggedVertexIndex = this._handleVertexIndices[handleIndex];\r\n const newPositions = this._computeRectangleNewPositions(newCartesian, hierarchy.positions, draggedVertexIndex);\r\n\r\n // 修复:所有新位置贴地\r\n const clampedPositions = newPositions.map(pos => this._clampPositionToGround(pos));\r\n\r\n // 更新多边形\r\n this._selectedEntity.polygon.hierarchy = new Cesium.PolygonHierarchy(clampedPositions);\r\n\r\n // 更新所有控制点位置(使用 ConstantPositionProperty 确保正确更新)\r\n this._editHandles.forEach((handle, i) => {\r\n // 修复:跳过中心控制点\r\n if (handle.id && handle.id.includes('center')) return;\r\n handle.position = new Cesium.ConstantPositionProperty(clampedPositions[i]);\r\n });\r\n\r\n // 修复:顶点编辑后重新计算并更新中心控制点位置\r\n this._updateCenterHandlePosition();\r\n\r\n return;\r\n }\r\n\r\n // 圆形特殊情况:编辑半径或圆心\r\n if (this._handleVertexIndices &&\r\n Array.isArray(this._handleVertexIndices) &&\r\n this._isCircle(this._selectedEntity)) {\r\n\r\n const circleInfo = this._getCircleInfo(this._selectedEntity);\r\n if (!circleInfo) return;\r\n\r\n const handleId = this._dragHandle.id;\r\n\r\n // 拖拽圆心:平移整个圆\r\n if (handleId && handleId.includes('__edit_handle_center')) {\r\n // 计算新圆心\r\n const newCenterLonLat = newLonLat;\r\n\r\n // 更新圆心控制点位置\r\n this._dragHandle.position = newCartesian;\r\n\r\n // 更新圆的实体属性\r\n this._selectedEntity._circleCenter = newCenterLonLat;\r\n\r\n // 更新多边形顶点\r\n const positions = this._generateCirclePositions(newCenterLonLat, circleInfo.radius, 256);\r\n const flat = positions.flatMap(c => [c[0], c[1], 0]);\r\n this._selectedEntity.polygon.hierarchy = new Cesium.PolygonHierarchy(\r\n Cesium.Cartesian3.fromDegreesArrayHeights(flat)\r\n );\r\n\r\n // 更新半径控制点位置\r\n const radiusHandle = this._editHandles.find(h => h.id && h.id.includes('radius'));\r\n if (radiusHandle) {\r\n const radiusPoint = this._getPointOnCircle(newCenterLonLat, circleInfo.radius, 0);\r\n radiusHandle.position = new Cesium.ConstantPositionProperty(\r\n Cesium.Cartesian3.fromDegrees(radiusPoint[0], radiusPoint[1], 0)\r\n );\r\n }\r\n\r\n return;\r\n }\r\n\r\n // 拖拽半径:计算新半径\r\n let newRadius = this._calcDistance(circleInfo.center, newLonLat);\r\n // 更新半径控制点位置(在圆周上)\r\n const angle = Math.atan2(newLonLat[1] - circleInfo.center[1], newLonLat[0] - circleInfo.center[0]);\r\n const radiusPoint = this._getPointOnCircle(circleInfo.center, newRadius, angle);\r\n this._dragHandle.position = new Cesium.ConstantPositionProperty(\r\n Cesium.Cartesian3.fromDegrees(radiusPoint[0], radiusPoint[1], 0)\r\n );\r\n\r\n // 更新圆的实体属性\r\n this._selectedEntity._circleCenter = circleInfo.center;\r\n this._selectedEntity._circleRadius = newRadius;\r\n\r\n // 更新多边形顶点\r\n const positions = this._generateCirclePositions(circleInfo.center, newRadius, 256);\r\n const flat = positions.flatMap(c => [c[0], c[1], 0]);\r\n this._selectedEntity.polygon.hierarchy = new Cesium.PolygonHierarchy(\r\n Cesium.Cartesian3.fromDegreesArrayHeights(flat)\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (Cesium.defined(this._selectedEntity.polyline)) {\r\n const positions = this._selectedEntity.polyline.positions.getValue(Cesium.JulianDate.now());\r\n if (positions && positions[handleIndex]) {\r\n // 直接修改数组元素触发更新\r\n positions[handleIndex] = newCartesian;\r\n this._selectedEntity.polyline.positions = positions;\r\n this._dragHandle.position = new Cesium.ConstantPositionProperty(newCartesian);\r\n \r\n // 修复:线编辑后重新计算并更新中心控制点位置\r\n this._updateCenterHandlePosition();\r\n }\r\n } else if (Cesium.defined(this._selectedEntity.polygon)) {\r\n // 获取当前实际顶点数(不包含闭合点)\r\n const actualVertexCount = this._editHandles.filter(h => !h.id.includes('center')).length;\r\n\r\n // 构建新位置数组\r\n const newPositions = [];\r\n let vertexIndex = 0;\r\n for (let i = 0; i < this._editHandles.length; i++) {\r\n const handle = this._editHandles[i];\r\n // 修复:跳过中心控制点\r\n if (handle.id && handle.id.includes('center')) continue;\r\n \r\n if (handle === this._dragHandle) {\r\n newPositions.push(newCartesian);\r\n } else {\r\n // 从控制点获取当前位置\r\n const pos = handle.position.getValue(Cesium.JulianDate.now());\r\n // 修复:确保位置贴地\r\n newPositions.push(this._clampPositionToGround(pos));\r\n }\r\n vertexIndex++;\r\n }\r\n\r\n // ✅ 添加闭合点\r\n newPositions.push(newPositions[0].clone());\r\n\r\n // 更新多边形\r\n this._selectedEntity.polygon.hierarchy = new Cesium.PolygonHierarchy(newPositions);\r\n\r\n // 更新控制点\r\n this._dragHandle.position = new Cesium.ConstantPositionProperty(newCartesian);\r\n \r\n // 修复:多边形编辑后重新计算并更新中心控制点位置\r\n this._updateCenterHandlePosition();\r\n\r\n return;\r\n } else if (Cesium.defined(this._selectedEntity.position)) {\r\n this._selectedEntity.position = new Cesium.ConstantPositionProperty(newCartesian);\r\n this._dragHandle.position = new Cesium.ConstantPositionProperty(newCartesian);\r\n }\r\n }\r\n\r\n _highlightEntity(entity, highlight) {\r\n if (!entity) return;\r\n\r\n if (Cesium.defined(entity.point)) {\r\n if (highlight) {\r\n entity.point.outlineColor = Cesium.Color.CYAN;\r\n entity.point.outlineWidth = 3;\r\n } else {\r\n entity.point.outlineColor = Cesium.Color.WHITE;\r\n entity.point.outlineWidth = 1;\r\n }\r\n }\r\n\r\n if (Cesium.defined(entity.polyline)) {\r\n if (highlight) {\r\n entity.polyline.material = Cesium.Color.CYAN;\r\n } else {\r\n entity.polyline.material = Cesium.Color.BLUE;\r\n }\r\n }\r\n\r\n if (Cesium.defined(entity.polygon)) {\r\n if (highlight) {\r\n entity.polygon.outlineColor = Cesium.Color.CYAN;\r\n } else {\r\n entity.polygon.outlineColor = Cesium.Color.WHITE;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 获取当前选中的图元 ID\r\n */\r\n getSelectedEntityId() {\r\n return this._selectedEntityId;\r\n }\r\n\r\n /**\r\n * 获取编辑前的原始位置(用于撤销)\r\n */\r\n getOriginalPositions() {\r\n return this._originalPositions;\r\n }\r\n\r\n /**\r\n * 撤销编辑,恢复原始位置\r\n */\r\n undo() {\r\n if (!this._selectedEntity) return;\r\n\r\n // 圆形特殊处理:恢复圆心和半径\r\n if (this._isCircle(this._selectedEntity) && this._originalCircleCenter && this._originalCircleRadius) {\r\n const center = this._originalCircleCenter;\r\n const radius = this._originalCircleRadius;\r\n\r\n // 恢复圆的实体属性\r\n this._selectedEntity._circleCenter = center;\r\n this._selectedEntity._circleRadius = radius;\r\n\r\n // 更新多边形顶点\r\n const positions = this._generateCirclePositions(center, radius, 256);\r\n const flat = positions.flatMap(c => [c[0], c[1], 0]);\r\n this._selectedEntity.polygon.hierarchy = new Cesium.PolygonHierarchy(\r\n Cesium.Cartesian3.fromDegreesArrayHeights(flat)\r\n );\r\n\r\n this._createEditHandles();\r\n this._emitEditComplete();\r\n return;\r\n }\r\n\r\n // 优先使用矩形原始位置,其次使用一般原始位置\r\n const originalPositions = this._rectangleOriginalPositions || this._originalPositions;\r\n if (!originalPositions) return;\r\n\r\n // 拷贝一份避免直接修改原始数据\r\n const positionsCopy = originalPositions.map(p => p.clone ? p.clone() : p);\r\n\r\n if (Cesium.defined(this._selectedEntity.polyline)) {\r\n this._selectedEntity.polyline.positions = positionsCopy;\r\n } else if (Cesium.defined(this._selectedEntity.polygon)) {\r\n this._selectedEntity.polygon.hierarchy = new Cesium.PolygonHierarchy(positionsCopy);\r\n }\r\n\r\n this._createEditHandles();\r\n this._emitEditComplete();\r\n }\r\n\r\n _emitSelect(entityId) {\r\n if (this._options.onSelect) {\r\n this._options.onSelect({ entityId });\r\n }\r\n }\r\n\r\n _emitEditComplete() {\r\n if (this._options.onEditComplete) {\r\n this._options.onEditComplete({\r\n entityId: this._selectedEntityId,\r\n positions: this._getEntityPositions(this._selectedEntity)\r\n });\r\n }\r\n }\r\n}","import { BaseTool } from './BaseTool.js';\r\n\r\n/**\r\n * 选择类型枚举\r\n */\r\nexport const SelectType = {\r\n POINT: 'point', // 点选\r\n RECTANGLE: 'rectangle', // 矩形框选\r\n CIRCLE: 'circle' // 圆形框选\r\n};\r\n\r\n/**\r\n * 选择工具\r\n * 支持点选和框选(矩形、圆形)\r\n */\r\nexport class SelectTool extends BaseTool {\r\n constructor(editorModule, options = {}) {\r\n super(editorModule, options);\r\n this._selectType = options.selectType || SelectType.POINT;\r\n this._isSelecting = false;\r\n this._startPos = null;\r\n this._tempEntities = [];\r\n this._selectedIds = new Set();\r\n this._selectionRect = null;\r\n this._originalStyles = new Map(); // 记录选中前的原始样式\r\n }\r\n\r\n /**\r\n * 设置选择类型\r\n * @param {string} type SelectType\r\n */\r\n setSelectType(type) {\r\n this._selectType = type;\r\n return this;\r\n }\r\n\r\n getSelectType() {\r\n return this._selectType;\r\n }\r\n\r\n onActivate() {\r\n this.registerObserver('mouse:click', this._onClick.bind(this));\r\n this.registerObserver('mouse:move', this._onMove.bind(this));\r\n this.registerObserver('mouse:down', this._onMouseDown.bind(this));\r\n this.registerObserver('mouse:up', this._onMouseUp.bind(this));\r\n }\r\n\r\n onDeactivate() {\r\n this._cancelSelection();\r\n this._clearSelectionRect();\r\n }\r\n\r\n _onMouseDown(data) {\r\n // mouse:down passes movement object from BaseTool\r\n const screenPos = data.position || data.endPosition;\r\n if (!screenPos) return;\r\n\r\n if (this._selectType !== SelectType.POINT) {\r\n const lonLat = this.screenToLonLat({ x: screenPos.x, y: screenPos.y });\r\n if (lonLat) {\r\n this._startPos = lonLat;\r\n this._isSelecting = true;\r\n this._createSelectionStartMarker(lonLat);\r\n }\r\n }\r\n }\r\n\r\n _onMouseUp(data) {\r\n const screenPos = data.position || data.endPosition;\r\n if (!screenPos) return;\r\n\r\n if (this._isSelecting && this._startPos) {\r\n const lonLat = this.screenToLonLat({ x: screenPos.x, y: screenPos.y });\r\n if (lonLat) {\r\n this._finishSelection(lonLat);\r\n }\r\n }\r\n }\r\n\r\n _onClick(_lngLat, _entity, movement) {\r\n if (this._selectType !== SelectType.POINT) return;\r\n\r\n const screenPos = movement.position || (movement && movement.endPosition);\r\n if (!screenPos) return;\r\n\r\n const picked = this._viewer.scene.pick({ x: screenPos.x, y: screenPos.y });\r\n\r\n if (Cesium.defined(picked) && Cesium.defined(picked.id)) {\r\n const entityId = picked.id.id;\r\n\r\n // 忽略临时图元\r\n if (entityId && entityId.startsWith('__temp_')) return;\r\n if (entityId && entityId.startsWith('__edit_handle_')) return;\r\n\r\n if (this._isSelected(entityId)) {\r\n this._deselect(entityId);\r\n } else {\r\n this._select(entityId);\r\n }\r\n } else {\r\n // 点击空白处,清除所有选择\r\n this._clearAllSelections();\r\n }\r\n }\r\n\r\n _onMove(data) {\r\n // mouse:move passes movement object from BaseTool\r\n const screenPos = data.position || data.endPosition;\r\n if (!screenPos) return;\r\n\r\n if (!this._isSelecting || !this._startPos) return;\r\n\r\n const lonLat = this.screenToLonLat({ x: screenPos.x, y: screenPos.y });\r\n if (!lonLat) return;\r\n\r\n this._updateSelectionRectPreview(lonLat);\r\n\r\n // 实时框选\r\n if (this._selectType === SelectType.RECTANGLE) {\r\n const insideIds = this._getEntitiesInRectangle(this._startPos, lonLat);\r\n this._highlightEntitiesInSelection(insideIds);\r\n } else if (this._selectType === SelectType.CIRCLE) {\r\n const insideIds = this._getEntitiesInCircle(this._startPos, lonLat);\r\n this._highlightEntitiesInSelection(insideIds);\r\n }\r\n }\r\n\r\n _createSelectionStartMarker(pos) {\r\n const marker = this.createTempEntity(this.generateId('sel_start'), {\r\n position: Cesium.Cartesian3.fromDegrees(...pos),\r\n point: {\r\n color: Cesium.Color.GREEN,\r\n pixelSize: 10\r\n }\r\n });\r\n this._tempEntities.push(marker);\r\n }\r\n\r\n _updateSelectionRectPreview(currentPos) {\r\n if (this._selectType === SelectType.RECTANGLE) {\r\n this._updateRectPreview(currentPos);\r\n } else if (this._selectType === SelectType.CIRCLE) {\r\n this._updateCirclePreview(currentPos);\r\n }\r\n }\r\n\r\n _updateRectPreview(currentPos) {\r\n const corner1 = this._startPos;\r\n const corner2 = currentPos;\r\n\r\n if (!corner1 || !corner2) return;\r\n\r\n if (!this._selectionRect) {\r\n this._selectionRect = this.createTempEntity(this.generateId('sel_rect'), {\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n const pos = this._getRectPositions(corner1, corner2);\r\n return Cesium.Cartesian3.fromDegreesArrayHeights(pos.flatMap(c => [c[0], c[1], 0]));\r\n }, false),\r\n material: Cesium.Color.CYAN,\r\n width: 2\r\n },\r\n polygon: {\r\n hierarchy: new Cesium.CallbackProperty(() => {\r\n const pos = this._getRectPositions(corner1, corner2);\r\n return new Cesium.PolygonHierarchy(\r\n Cesium.Cartesian3.fromDegreesArrayHeights(pos.flatMap(c => [c[0], c[1], 0]))\r\n );\r\n }, false),\r\n material: Cesium.Color.CYAN.withAlpha(0.2),\r\n outline: false\r\n }\r\n });\r\n this._selectionRect._isPreview = true;\r\n this._tempEntities.push(this._selectionRect);\r\n }\r\n }\r\n\r\n _updateCirclePreview(currentPos) {\r\n const center = this._startPos;\r\n\r\n if (!center || !currentPos) return;\r\n\r\n if (!this._selectionRect) {\r\n this._selectionRect = this.createTempEntity(this.generateId('sel_circle'), {\r\n polygon: {\r\n hierarchy: new Cesium.CallbackProperty(() => {\r\n const radius = this._calcDistance(center, currentPos);\r\n const positions = this._generateCirclePositions(center, radius, 36);\r\n return new Cesium.PolygonHierarchy(\r\n Cesium.Cartesian3.fromDegreesArrayHeights(\r\n positions.flatMap(c => [c[0], c[1], 0])\r\n )\r\n );\r\n }, false),\r\n material: Cesium.Color.CYAN.withAlpha(0.2),\r\n outline: true,\r\n outlineColor: Cesium.Color.CYAN\r\n }\r\n });\r\n this._selectionRect._isPreview = true;\r\n this._tempEntities.push(this._selectionRect);\r\n }\r\n }\r\n\r\n _getRectPositions(corner1, corner2) {\r\n return [\r\n [corner1[0], corner1[1]],\r\n [corner2[0], corner1[1]],\r\n [corner2[0], corner2[1]],\r\n [corner1[0], corner2[1]],\r\n [corner1[0], corner1[1]]\r\n ];\r\n }\r\n\r\n _clearSelectionRect() {\r\n this._tempEntities.forEach(entity => {\r\n if (entity._isPreview) {\r\n this.removeTempEntity(entity);\r\n }\r\n });\r\n this._tempEntities = this._tempEntities.filter(e => !e._isPreview);\r\n this._selectionRect = null;\r\n }\r\n\r\n _finishSelection(endPos) {\r\n let selectedIds = [];\r\n\r\n if (this._selectType === SelectType.RECTANGLE) {\r\n selectedIds = this._getEntitiesInRectangle(this._startPos, endPos);\r\n } else if (this._selectType === SelectType.CIRCLE) {\r\n selectedIds = this._getEntitiesInCircle(this._startPos, endPos);\r\n }\r\n\r\n // 框选模式:选中框内所有图元\r\n selectedIds.forEach(id => {\r\n this._select(id, false); // 不触发事件\r\n });\r\n\r\n this._cancelSelection();\r\n this._emitSelectionComplete(Array.from(this._selectedIds));\r\n }\r\n\r\n _cancelSelection() {\r\n this._isSelecting = false;\r\n this._startPos = null;\r\n this._isSelecting = false;\r\n this._selectionRect = null;\r\n this._tempEntities.forEach(entity => {\r\n this.removeTempEntity(entity);\r\n });\r\n this._tempEntities = [];\r\n }\r\n\r\n _select(entityId, emitEvent = true) {\r\n if (this._selectedIds.has(entityId)) return;\r\n\r\n this._selectedIds.add(entityId);\r\n this._highlightEntity(entityId, true);\r\n\r\n if (emitEvent) {\r\n this._emitSelect(entityId);\r\n }\r\n }\r\n\r\n _deselect(entityId) {\r\n if (!this._selectedIds.has(entityId)) return;\r\n\r\n this._selectedIds.delete(entityId);\r\n this._highlightEntity(entityId, false);\r\n }\r\n\r\n _clearAllSelections() {\r\n this._selectedIds.forEach(id => {\r\n this._highlightEntity(id, false);\r\n });\r\n this._selectedIds.clear();\r\n this._emitSelectionChange([]);\r\n }\r\n\r\n _highlightEntity(entityId, highlight) {\r\n const entity = this._graphicModule.getGraphic(entityId);\r\n if (!entity) return;\r\n\r\n const styleKey = entityId;\r\n\r\n if (Cesium.defined(entity.point)) {\r\n if (highlight) {\r\n if (!this._originalStyles.has(styleKey)) {\r\n this._originalStyles.set(styleKey, {\r\n point: {\r\n outlineColor: entity.point.outlineColor,\r\n outlineWidth: entity.point.outlineWidth\r\n }\r\n });\r\n }\r\n entity.point.outlineColor = Cesium.Color.YELLOW;\r\n entity.point.outlineWidth = 2;\r\n } else {\r\n const original = this._originalStyles.get(styleKey)?.point;\r\n if (original) {\r\n entity.point.outlineColor = original.outlineColor;\r\n entity.point.outlineWidth = original.outlineWidth;\r\n } else {\r\n entity.point.outlineColor = Cesium.Color.WHITE;\r\n entity.point.outlineWidth = 1;\r\n }\r\n }\r\n }\r\n\r\n if (Cesium.defined(entity.polyline)) {\r\n if (highlight) {\r\n if (!this._originalStyles.has(styleKey)) {\r\n this._originalStyles.set(styleKey, {\r\n polyline: {\r\n material: entity.polyline.material\r\n }\r\n });\r\n }\r\n entity.polyline.material = Cesium.Color.CYAN;\r\n } else {\r\n const original = this._originalStyles.get(styleKey)?.polyline;\r\n entity.polyline.material = original?.material || Cesium.Color.BLUE;\r\n }\r\n }\r\n\r\n if (Cesium.defined(entity.polygon)) {\r\n if (highlight) {\r\n if (!this._originalStyles.has(styleKey)) {\r\n this._originalStyles.set(styleKey, {\r\n polygon: {\r\n outlineColor: entity.polygon.outlineColor\r\n }\r\n });\r\n }\r\n entity.polygon.outlineColor = Cesium.Color.CYAN;\r\n } else {\r\n const original = this._originalStyles.get(styleKey)?.polygon;\r\n entity.polygon.outlineColor = original?.outlineColor || Cesium.Color.WHITE;\r\n }\r\n }\r\n\r\n if (!highlight) {\r\n this._originalStyles.delete(styleKey);\r\n }\r\n }\r\n\r\n _highlightEntitiesInSelection(entityIds) {\r\n // 先取消所有选择的高亮\r\n this._selectedIds.forEach(id => {\r\n if (!entityIds.includes(id)) {\r\n this._highlightEntity(id, false);\r\n this._selectedIds.delete(id);\r\n }\r\n });\r\n\r\n // 高亮框内图元\r\n entityIds.forEach(id => {\r\n if (!this._selectedIds.has(id)) {\r\n this._selectedIds.add(id);\r\n this._highlightEntity(id, true);\r\n }\r\n });\r\n }\r\n\r\n _getOriginalColor(entity) {\r\n // 已废弃:原始样式由 _originalStyles 统一维护\r\n return null;\r\n }\r\n\r\n _getEntitiesInRectangle(corner1, corner2) {\r\n const minLon = Math.min(corner1[0], corner2[0]);\r\n const maxLon = Math.max(corner1[0], corner2[0]);\r\n const minLat = Math.min(corner1[1], corner2[1]);\r\n const maxLat = Math.max(corner1[1], corner2[1]);\r\n\r\n const allIds = this._getAllGraphicIds();\r\n return this._filterEntitiesInBounds(allIds, minLon, maxLon, minLat, maxLat);\r\n }\r\n\r\n _getEntitiesInCircle(center, edge) {\r\n const radius = this._calcDistance(center, edge);\r\n const allIds = this._getAllGraphicIds();\r\n const result = [];\r\n\r\n allIds.forEach(id => {\r\n const entity = this._graphicModule.getGraphic(id);\r\n if (!entity) return;\r\n\r\n const entityPos = this._getEntityPosition(entity);\r\n if (!entityPos) return;\r\n\r\n const distance = this._calcDistance(center, entityPos);\r\n if (distance <= radius) {\r\n result.push(id);\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n _getAllGraphicIds() {\r\n // 从 GraphicModule 获取所有图元 ID\r\n const ids = [];\r\n this._graphicModule.graphicMap.forEach((entity, id) => {\r\n if (!id.startsWith('__temp_') && !id.startsWith('__edit_handle_')) {\r\n ids.push(id);\r\n }\r\n });\r\n return ids;\r\n }\r\n\r\n _filterEntitiesInBounds(ids, minLon, maxLon, minLat, maxLat) {\r\n const result = [];\r\n\r\n ids.forEach(id => {\r\n const entity = this._graphicModule.getGraphic(id);\r\n if (!entity) return;\r\n\r\n const positions = this._getEntityPositions(entity);\r\n if (!positions || positions.length === 0) return;\r\n\r\n // 检查是否所有点都在范围内\r\n let allInBounds = true;\r\n for (const pos of positions) {\r\n const c = Cesium.Cartographic.fromCartesian(pos);\r\n const lon = Cesium.Math.toDegrees(c.longitude);\r\n const lat = Cesium.Math.toDegrees(c.latitude);\r\n\r\n if (lon < minLon || lon > maxLon || lat < minLat || lat > maxLat) {\r\n allInBounds = false;\r\n break;\r\n }\r\n }\r\n\r\n if (allInBounds) {\r\n result.push(id);\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n _getEntityPosition(entity) {\r\n if (Cesium.defined(entity.position)) {\r\n const pos = entity.position.getValue(Cesium.JulianDate.now());\r\n if (pos) {\r\n const c = Cesium.Cartographic.fromCartesian(pos);\r\n return [\r\n Cesium.Math.toDegrees(c.longitude),\r\n Cesium.Math.toDegrees(c.latitude)\r\n ];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n _getEntityPositions(entity) {\r\n if (Cesium.defined(entity.polyline) && Cesium.defined(entity.polyline.positions)) {\r\n return entity.polyline.positions.getValue(Cesium.JulianDate.now());\r\n }\r\n if (Cesium.defined(entity.polygon) && Cesium.defined(entity.polygon.hierarchy)) {\r\n const hierarchy = entity.polygon.hierarchy.getValue(Cesium.JulianDate.now());\r\n return hierarchy ? hierarchy.positions : [];\r\n }\r\n return [];\r\n }\r\n\r\n _calcDistance(coord1, coord2) {\r\n const earthRadius = 6371000;\r\n const [lon1, lat1] = coord1.map(d => d * Math.PI / 180);\r\n const [lon2, lat2] = coord2.map(d => d * Math.PI / 180);\r\n\r\n const dLat = lat2 - lat1;\r\n const dLon = lon2 - lon1;\r\n\r\n const a = Math.sin(dLat / 2) ** 2 +\r\n Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLon / 2) ** 2;\r\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n\r\n return earthRadius * c;\r\n }\r\n\r\n _generateCirclePositions(center, radius, segments) {\r\n const positions = [];\r\n const [lon, lat] = center;\r\n const radPerDeg = Math.PI / 180;\r\n\r\n for (let i = 0; i <= segments; i++) {\r\n const angle = (i / segments) * Math.PI * 2;\r\n const dLon = (radius / 111320) * Math.cos(angle) / radPerDeg;\r\n const dLat = (radius / 110540) / radPerDeg;\r\n positions.push([lon + dLon, lat + dLat]);\r\n }\r\n return positions;\r\n }\r\n\r\n _isSelected(entityId) {\r\n return this._selectedIds.has(entityId);\r\n }\r\n\r\n /**\r\n * 获取当前所有选中的图元 ID\r\n */\r\n getSelectedIds() {\r\n return Array.from(this._selectedIds);\r\n }\r\n\r\n _emitSelect(entityId) {\r\n if (this._options.onSelect) {\r\n this._options.onSelect({ entityId });\r\n }\r\n }\r\n\r\n _emitSelectionChange(ids) {\r\n if (this._options.onSelectionChange) {\r\n this._options.onSelectionChange({ selectedIds: ids });\r\n }\r\n }\r\n\r\n _emitSelectionComplete(ids) {\r\n if (this._options.onSelectionComplete) {\r\n this._options.onSelectionComplete({ selectedIds: ids });\r\n }\r\n }\r\n}\r\n","import { BaseTool } from './BaseTool.js';\r\n\r\n/**\r\n * 删除模式枚举\r\n */\r\nexport const DeleteMode = {\r\n SINGLE: 'single', // 单个删除(点击删除)\r\n SELECTED: 'selected' // 删除已选择的图元\r\n};\r\n\r\n/**\r\n * 删除工具\r\n * 支持单个删除和批量删除已选择的图元\r\n */\r\nexport class DeleteTool extends BaseTool {\r\n constructor(editorModule, options = {}) {\r\n super(editorModule, options);\r\n this._deleteMode = options.deleteMode || DeleteMode.SINGLE;\r\n this._hoveredEntity = null;\r\n this._hoverEntity = null; // 悬停高亮\r\n this._originalStyles = new Map(); // 记录悬停前的原始样式\r\n }\r\n\r\n /**\r\n * 设置删除模式\r\n * @param {string} mode DeleteMode\r\n */\r\n setDeleteMode(mode) {\r\n this._deleteMode = mode;\r\n return this;\r\n }\r\n\r\n getDeleteMode() {\r\n return this._deleteMode;\r\n }\r\n\r\n onActivate() {\r\n this.registerObserver('mouse:click', this._onClick.bind(this));\r\n this.registerObserver('mouse:move', this._onMove.bind(this));\r\n }\r\n\r\n onDeactivate() {\r\n this._clearHoverHighlight();\r\n }\r\n\r\n _onClick(_lngLat, _entity, movement) {\r\n const screenPos = movement.position || (movement && movement.endPosition);\r\n if (!screenPos) return;\r\n\r\n const picked = this._viewer.scene.pick({ x: screenPos.x, y: screenPos.y });\r\n\r\n if (Cesium.defined(picked) && Cesium.defined(picked.id)) {\r\n const entityId = picked.id.id;\r\n\r\n // 忽略临时图元\r\n if (entityId && entityId.startsWith('__temp_')) return;\r\n if (entityId && entityId.startsWith('__edit_handle_')) return;\r\n\r\n // 忽略编辑器自身的控制点\r\n if (entityId && entityId.startsWith('__sel_')) return;\r\n\r\n if (this._deleteMode === DeleteMode.SINGLE) {\r\n this._deleteSingle(entityId);\r\n }\r\n }\r\n }\r\n\r\n _onMove(data) {\r\n const screenPos = data.position || data.endPosition;\r\n if (!screenPos) return;\r\n\r\n const picked = this._viewer.scene.pick({ x: screenPos.x, y: screenPos.y });\r\n\r\n let hoveredId = null;\r\n\r\n if (Cesium.defined(picked) && Cesium.defined(picked.id)) {\r\n const entityId = picked.id.id;\r\n if (!entityId.startsWith('__temp_') && !entityId.startsWith('__edit_handle_')) {\r\n hoveredId = entityId;\r\n }\r\n }\r\n\r\n if (hoveredId !== this._hoveredEntity) {\r\n this._clearHoverHighlight();\r\n this._hoveredEntity = hoveredId;\r\n\r\n if (hoveredId) {\r\n this._highlightAsDeletable(hoveredId);\r\n }\r\n }\r\n }\r\n\r\n _deleteSingle(entityId) {\r\n const entity = this._graphicModule.getGraphic(entityId);\r\n if (!entity) return;\r\n\r\n // 发送删除前事件(可撤销)\r\n this._emitBeforeDelete({\r\n entityId,\r\n entity: entity\r\n });\r\n\r\n // 执行删除\r\n this._graphicModule.removeGraphic(entityId);\r\n\r\n // 发送删除完成事件\r\n this._emitDelete({\r\n entityId\r\n });\r\n }\r\n\r\n /**\r\n * 删除多个图元\r\n * @param {string[]} entityIds 图元 ID 数组\r\n */\r\n deleteMultiple(entityIds) {\r\n const deleted = [];\r\n const failed = [];\r\n\r\n entityIds.forEach(id => {\r\n const success = this._graphicModule.removeGraphic(id);\r\n if (success) {\r\n deleted.push(id);\r\n } else {\r\n failed.push(id);\r\n }\r\n });\r\n\r\n this._emitDeleteMultiple({ deleted, failed });\r\n\r\n return { deleted, failed };\r\n }\r\n\r\n /**\r\n * 删除所有图元\r\n */\r\n deleteAll() {\r\n const allIds = [];\r\n this._graphicModule.graphicMap.forEach((entity, id) => {\r\n if (!id.startsWith('__temp_') && !id.startsWith('__edit_handle_')) {\r\n allIds.push(id);\r\n }\r\n });\r\n\r\n return this.deleteMultiple(allIds);\r\n }\r\n\r\n _highlightAsDeletable(entityId) {\r\n const entity = this._graphicModule.getGraphic(entityId);\r\n if (!entity) return;\r\n\r\n this._hoverEntity = entity;\r\n const styleKey = entityId;\r\n\r\n // 红色高亮表示可删除,先保存原始样式\r\n if (Cesium.defined(entity.point)) {\r\n if (!this._originalStyles.has(styleKey)) {\r\n this._originalStyles.set(styleKey, {\r\n point: {\r\n outlineColor: entity.point.outlineColor,\r\n outlineWidth: entity.point.outlineWidth\r\n }\r\n });\r\n }\r\n entity.point.outlineColor = Cesium.Color.RED;\r\n entity.point.outlineWidth = 3;\r\n }\r\n\r\n if (Cesium.defined(entity.polyline)) {\r\n if (!this._originalStyles.has(styleKey)) {\r\n this._originalStyles.set(styleKey, {\r\n polyline: {\r\n material: entity.polyline.material\r\n }\r\n });\r\n }\r\n entity.polyline.material = Cesium.Color.RED;\r\n }\r\n\r\n if (Cesium.defined(entity.polygon)) {\r\n if (!this._originalStyles.has(styleKey)) {\r\n this._originalStyles.set(styleKey, {\r\n polygon: {\r\n outlineColor: entity.polygon.outlineColor\r\n }\r\n });\r\n }\r\n entity.polygon.outlineColor = Cesium.Color.RED;\r\n }\r\n\r\n // 更改鼠标样式\r\n if (this._viewer.container) {\r\n this._viewer.container.style.cursor = 'pointer';\r\n }\r\n }\r\n\r\n _clearHoverHighlight() {\r\n if (!this._hoverEntity) return;\r\n\r\n const entity = this._hoverEntity;\r\n const styleKey = this._hoveredEntity;\r\n const original = styleKey ? this._originalStyles.get(styleKey) : null;\r\n\r\n // 恢复原始样式\r\n if (Cesium.defined(entity.point)) {\r\n if (original?.point) {\r\n entity.point.outlineColor = original.point.outlineColor;\r\n entity.point.outlineWidth = original.point.outlineWidth;\r\n } else {\r\n entity.point.outlineColor = Cesium.Color.WHITE;\r\n entity.point.outlineWidth = 1;\r\n }\r\n }\r\n\r\n if (Cesium.defined(entity.polyline)) {\r\n entity.polyline.material = original?.polyline?.material || Cesium.Color.BLUE;\r\n }\r\n\r\n if (Cesium.defined(entity.polygon)) {\r\n entity.polygon.outlineColor = original?.polygon?.outlineColor || Cesium.Color.WHITE;\r\n }\r\n\r\n // 恢复鼠标样式\r\n if (this._viewer.container) {\r\n this._viewer.container.style.cursor = 'default';\r\n }\r\n\r\n if (styleKey) {\r\n this._originalStyles.delete(styleKey);\r\n }\r\n this._hoverEntity = null;\r\n this._hoveredEntity = null;\r\n }\r\n\r\n _emitBeforeDelete(data) {\r\n if (this._options.onBeforeDelete) {\r\n this._options.onBeforeDelete(data);\r\n }\r\n }\r\n\r\n _emitDelete(data) {\r\n if (this._options.onDelete) {\r\n this._options.onDelete(data);\r\n }\r\n }\r\n\r\n _emitDeleteMultiple(data) {\r\n if (this._options.onDeleteMultiple) {\r\n this._options.onDeleteMultiple(data);\r\n }\r\n }\r\n}\r\n","import { Config } from '../core/Config.js';\r\nimport { DrawTool, DrawType } from './tools/DrawTool.js';\r\nimport { EditTool, EditMode } from './tools/EditTool.js';\r\nimport { SelectTool, SelectType } from './tools/SelectTool.js';\r\nimport { DeleteTool, DeleteMode } from './tools/DeleteTool.js';\r\n\r\n/**\r\n * 工具名称枚举\r\n */\r\nexport const ToolName = {\r\n DRAW: 'draw',\r\n EDIT: 'edit',\r\n SELECT: 'select',\r\n DELETE: 'delete'\r\n};\r\n\r\n/**\r\n * 编辑器模块\r\n * 负责工具的注册、切换、激活管理\r\n */\r\nexport class EditorModule {\r\n constructor(viewer, options = {}) {\r\n this.viewer = viewer;\r\n this.config = Config.getInstance().getConfig();\r\n this.graphicModule = null; // 依赖注入\r\n this.eventModule = null; // 依赖注入\r\n this.toolMap = new Map(); // 工具缓存\r\n this.currentTool = null; // 当前激活的工具\r\n this.currentToolName = null;\r\n this._isActive = false;\r\n }\r\n\r\n /**\r\n * 设置依赖模块\r\n * @param {object} deps 依赖模块 { graphicModule, eventModule }\r\n */\r\n setDependencies(deps) {\r\n this.graphicModule = deps.graphicModule;\r\n this.eventModule = deps.eventModule;\r\n return this;\r\n }\r\n\r\n /**\r\n * 初始化编辑器,注册所有内置工具\r\n */\r\n init() {\r\n // 注册内置工具\r\n this.registerTool(ToolName.DRAW, new DrawTool(this));\r\n this.registerTool(ToolName.EDIT, new EditTool(this));\r\n this.registerTool(ToolName.SELECT, new SelectTool(this));\r\n this.registerTool(ToolName.DELETE, new DeleteTool(this));\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 注册工具\r\n * @param {string} name 工具名称\r\n * @param {BaseTool} tool 工具实例\r\n * @returns {EditorModule}\r\n */\r\n registerTool(name, tool) {\r\n this.toolMap.set(name, tool);\r\n return this;\r\n }\r\n\r\n /**\r\n * 获取工具\r\n * @param {string} name 工具名称\r\n * @returns {BaseTool|undefined}\r\n */\r\n getTool(name) {\r\n return this.toolMap.get(name);\r\n }\r\n\r\n /**\r\n * 获取当前激活的工具\r\n * @returns {BaseTool|null}\r\n */\r\n getCurrentTool() {\r\n return this.currentTool;\r\n }\r\n\r\n /**\r\n * 获取当前激活的工具名称\r\n * @returns {string|null}\r\n */\r\n getCurrentToolName() {\r\n return this.currentToolName;\r\n }\r\n\r\n /**\r\n * 激活指定工具\r\n * @param {string} name 工具名称\r\n * @returns {EditorModule}\r\n */\r\n activateTool(name) {\r\n const tool = this.toolMap.get(name);\r\n if (!tool) {\r\n console.warn(`工具 ${name} 未注册`);\r\n return this;\r\n }\r\n\r\n // 停用当前工具\r\n if (this.currentTool) {\r\n this.currentTool.deactivate();\r\n }\r\n\r\n // 激活新工具\r\n this.currentTool = tool;\r\n this.currentToolName = name;\r\n this.currentTool.activate();\r\n this._isActive = true;\r\n\r\n console.log(`工具 ${name} 已激活`);\r\n return this;\r\n }\r\n\r\n /**\r\n * 停用当前工具\r\n * @returns {EditorModule}\r\n */\r\n deactivateTool() {\r\n if (this.currentTool) {\r\n this.currentTool.deactivate();\r\n }\r\n this.currentTool = null;\r\n this.currentToolName = null;\r\n this._isActive = false;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 激活绘制工具并设置类型\r\n * @param {string} type 绘制类型 DrawType\r\n * @returns {EditorModule}\r\n */\r\n activateDrawTool(type = DrawType.POINT) {\r\n const drawTool = this.toolMap.get(ToolName.DRAW);\r\n if (drawTool) {\r\n drawTool.setDrawType(type);\r\n }\r\n return this.activateTool(ToolName.DRAW);\r\n }\r\n\r\n /**\r\n * 激活选择工具并设置类型\r\n * @param {string} type 选择类型 SelectType\r\n * @returns {EditorModule}\r\n */\r\n activateSelectTool(type = SelectType.POINT) {\r\n const selectTool = this.toolMap.get(ToolName.SELECT);\r\n if (selectTool) {\r\n selectTool.setSelectType(type);\r\n }\r\n return this.activateTool(ToolName.SELECT);\r\n }\r\n\r\n /**\r\n * 激活编辑工具并设置模式\r\n * @param {string} mode 编辑模式 EditMode\r\n * @returns {EditorModule}\r\n */\r\n activateEditTool(mode = EditMode.VERTEX) {\r\n const editTool = this.toolMap.get(ToolName.EDIT);\r\n if (editTool) {\r\n editTool.setEditMode(mode);\r\n }\r\n return this.activateTool(ToolName.EDIT);\r\n }\r\n\r\n /**\r\n * 激活删除工具并设置模式\r\n * @param {string} mode 删除模式 DeleteMode\r\n * @returns {EditorModule}\r\n */\r\n activateDeleteTool(mode = DeleteMode.SINGLE) {\r\n const deleteTool = this.toolMap.get(ToolName.DELETE);\r\n if (deleteTool) {\r\n deleteTool.setDeleteMode(mode);\r\n }\r\n return this.activateTool(ToolName.DELETE);\r\n }\r\n\r\n /**\r\n * 获取绘制工具(快捷方法)\r\n * @returns {DrawTool}\r\n */\r\n getDrawTool() {\r\n return this.toolMap.get(ToolName.DRAW);\r\n }\r\n\r\n /**\r\n * 获取选择工具(快捷方法)\r\n * @returns {SelectTool}\r\n */\r\n getSelectTool() {\r\n return this.toolMap.get(ToolName.SELECT);\r\n }\r\n\r\n /**\r\n * 获取编辑工具(快捷方法)\r\n * @returns {EditTool}\r\n */\r\n getEditTool() {\r\n return this.toolMap.get(ToolName.EDIT);\r\n }\r\n\r\n /**\r\n * 获取删除工具(快捷方法)\r\n * @returns {DeleteTool}\r\n */\r\n getDeleteTool() {\r\n return this.toolMap.get(ToolName.DELETE);\r\n }\r\n\r\n // ========== 公开回调 setter ==========\r\n\r\n /**\r\n * 设置绘制完成回调\r\n * @param {Function} callback\r\n */\r\n onDrawComplete(callback) {\r\n this.getDrawTool()._options.onGraphicCreated = callback;\r\n return this;\r\n }\r\n\r\n /**\r\n * 设置绘制进度回调\r\n * @param {Function} callback\r\n */\r\n onDrawProgress(callback) {\r\n this.getDrawTool()._options.onDrawProgress = callback;\r\n return this;\r\n }\r\n\r\n /**\r\n * 设置绘制取消回调\r\n * @param {Function} callback\r\n */\r\n onDrawCancel(callback) {\r\n this.getDrawTool()._options.onDrawCancel = callback;\r\n return this;\r\n }\r\n\r\n /**\r\n * 设置编辑完成回调\r\n * @param {Function} callback\r\n */\r\n onEditComplete(callback) {\r\n this.getEditTool()._options.onEditComplete = callback;\r\n return this;\r\n }\r\n\r\n /**\r\n * 设置编辑选中回调\r\n * @param {Function} callback\r\n */\r\n onEditSelect(callback) {\r\n this.getEditTool()._options.onSelect = callback;\r\n return this;\r\n }\r\n\r\n /**\r\n * 设置选择回调\r\n * @param {Function} callback\r\n */\r\n onSelect(callback) {\r\n this.getSelectTool()._options.onSelect = callback;\r\n return this;\r\n }\r\n\r\n /**\r\n * 设置选择变化回调\r\n * @param {Function} callback\r\n */\r\n onSelectionChange(callback) {\r\n this.getSelectTool()._options.onSelectionChange = callback;\r\n return this;\r\n }\r\n\r\n /**\r\n * 设置框选完成回调\r\n * @param {Function} callback\r\n */\r\n onSelectionComplete(callback) {\r\n this.getSelectTool()._options.onSelectionComplete = callback;\r\n return this;\r\n }\r\n\r\n /**\r\n * 设置删除前回调\r\n * @param {Function} callback\r\n */\r\n onBeforeDelete(callback) {\r\n this.getDeleteTool()._options.onBeforeDelete = callback;\r\n return this;\r\n }\r\n\r\n /**\r\n * 设置删除完成回调\r\n * @param {Function} callback\r\n */\r\n onDelete(callback) {\r\n this.getDeleteTool()._options.onDelete = callback;\r\n return this;\r\n }\r\n\r\n /**\r\n * 设置批量删除完成回调\r\n * @param {Function} callback\r\n */\r\n onDeleteMultiple(callback) {\r\n this.getDeleteTool()._options.onDeleteMultiple = callback;\r\n return this;\r\n }\r\n\r\n /**\r\n * 获取所有已选择的图元 ID(需要先使用选择工具)\r\n * @returns {string[]}\r\n */\r\n getSelectedIds() {\r\n const selectTool = this.getSelectTool();\r\n if (selectTool) {\r\n return selectTool.getSelectedIds();\r\n }\r\n return [];\r\n }\r\n\r\n /**\r\n * 删除所有已选择的图元\r\n * @returns {object} { deleted, failed }\r\n */\r\n deleteSelected() {\r\n const selectTool = this.getSelectTool();\r\n if (selectTool) {\r\n const ids = selectTool.getSelectedIds();\r\n const deleteTool = this.getDeleteTool();\r\n if (deleteTool) {\r\n return deleteTool.deleteMultiple(ids);\r\n }\r\n }\r\n return { deleted: [], failed: [] };\r\n }\r\n\r\n /**\r\n * 检查编辑器是否处于激活状态\r\n * @returns {boolean}\r\n */\r\n isActive() {\r\n return this._isActive;\r\n }\r\n\r\n /**\r\n * 销毁编辑器\r\n */\r\n destroy() {\r\n this.deactivateTool();\r\n this.toolMap.clear();\r\n this.graphicModule = null;\r\n this.eventModule = null;\r\n }\r\n}\r\n\r\n// 导出工具类型枚举\r\nexport { DrawType } from './tools/DrawTool.js';\r\nexport { EditMode } from './tools/EditTool.js';\r\nexport { SelectType } from './tools/SelectTool.js';\r\nexport { DeleteMode } from './tools/DeleteTool.js';\r\n","/**\r\n * 模块管理器(对应平台 GetModule 逻辑)\r\n * 统一管理场景、图元、事件模块的实例\r\n */\r\nimport { SceneModule } from '../modules/SceneModule.js';\r\nimport { GraphicModule } from '../modules/GraphicModule.js';\r\nimport { EventModule } from '../modules/EventModule.js';\r\nimport { EditorModule } from '../modules/EditorModule.js';\r\nimport { Config } from './Config.js';\r\n\r\nexport class ModuleManager {\r\n static instance = null;\r\n static getInstance() {\r\n if (!this.instance) {\r\n this.instance = new ModuleManager();\r\n }\r\n return this.instance;\r\n }\r\n\r\n constructor() {\r\n this.modules = new Map(); // 模块缓存\r\n this.cesiumViewer = null; // Cesium Viewer 实例(全局唯一)\r\n }\r\n\r\n /**\r\n * 初始化 Cesium 核心实例(插件初始化逻辑)\r\n * @param {string|HTMLElement} container 容器ID/元素\r\n * @returns {Cesium.Viewer} Cesium 实例\r\n */\r\n initViewer(container) {\r\n if (this.cesiumViewer) return this.cesiumViewer;\r\n const config = Config.getInstance().getConfig();\r\n\r\n this.cesiumViewer = new Cesium.Viewer(container, config.scene);\r\n // 隐藏版权信息(可选,对齐平台界面规范)\r\n const creditContainer = this.cesiumViewer.cesiumWidget?.creditContainer;\r\n if (creditContainer) {\r\n creditContainer.style.display = 'none';\r\n }\r\n\r\n // 初始化所有模块(注入 Viewer 实例)\r\n this.registerModule('SceneModule', new SceneModule(this.cesiumViewer));\r\n this.registerModule('GraphicModule', new GraphicModule(this.cesiumViewer));\r\n this.registerModule('EventModule', new EventModule(this.cesiumViewer));\r\n\r\n // 初始化编辑器模块(依赖其他模块)\r\n const editorModule = new EditorModule(this.cesiumViewer);\r\n editorModule.setDependencies({\r\n graphicModule: this.getModule('GraphicModule'),\r\n eventModule: this.getModule('EventModule')\r\n }).init();\r\n this.registerModule('EditorModule', editorModule);\r\n\r\n return this.cesiumViewer;\r\n }\r\n\r\n /**\r\n * 获取模块实例(对应平台 GetModule 函数)\r\n * @param {string} moduleName 模块名称(SceneModule/GraphicModule/EventModule)\r\n * @returns {Object} 模块实例\r\n */\r\n getModule(moduleName) {\r\n if (!this.modules.has(moduleName)) {\r\n throw new Error(`模块 ${moduleName} 未注册,请先初始化 Viewer`);\r\n }\r\n return this.modules.get(moduleName);\r\n }\r\n\r\n /**\r\n * Cesium Viewer 快捷访问\r\n * @returns {Cesium.Viewer}\r\n */\r\n get viewer() {\r\n return this.cesiumViewer;\r\n }\r\n\r\n /**\r\n * 场景模块快捷访问\r\n * @returns {SceneModule}\r\n */\r\n get sceneModule() {\r\n return this.getModule('SceneModule');\r\n }\r\n\r\n /**\r\n * 图元模块快捷访问\r\n * @returns {GraphicModule}\r\n */\r\n get graphicModule() {\r\n return this.getModule('GraphicModule');\r\n }\r\n\r\n /**\r\n * 事件模块快捷访问\r\n * @returns {EventModule}\r\n */\r\n get eventModule() {\r\n return this.getModule('EventModule');\r\n }\r\n\r\n /**\r\n * 编辑器模块快捷访问\r\n * @returns {EditorModule}\r\n */\r\n get editorModule() {\r\n return this.getModule('EditorModule');\r\n }\r\n\r\n /**\r\n * 注册模块(内部使用)\r\n * @param {string} moduleName 模块名称\r\n * @param {Object} moduleInstance 模块实例\r\n */\r\n registerModule(moduleName, moduleInstance) {\r\n this.modules.set(moduleName, moduleInstance);\r\n }\r\n\r\n /**\r\n * 销毁实例(对应平台插件 Destroy 逻辑)\r\n */\r\n destroy() {\r\n if (this.cesiumViewer) {\r\n // 先通知各模块释放资源\r\n try {\r\n const eventModule = this.modules.get('EventModule');\r\n if (eventModule && typeof eventModule.unregisterAllObservers === 'function') {\r\n eventModule.unregisterAllObservers();\r\n }\r\n } catch (e) {\r\n console.warn('EventModule 注销失败:', e);\r\n }\r\n\r\n try {\r\n const editorModule = this.modules.get('EditorModule');\r\n if (editorModule && typeof editorModule.destroy === 'function') {\r\n editorModule.destroy();\r\n }\r\n } catch (e) {\r\n console.warn('EditorModule 销毁失败:', e);\r\n }\r\n\r\n this.cesiumViewer.destroy();\r\n this.cesiumViewer = null;\r\n this.modules.clear();\r\n }\r\n }\r\n\r\n /**\r\n * 重置 ModuleManager 单例(用于完全重新初始化)\r\n */\r\n static reset() {\r\n if (ModuleManager.instance) {\r\n ModuleManager.instance.destroy();\r\n ModuleManager.instance = null;\r\n }\r\n }\r\n}","/**\r\n * 坐标转换工具(对齐平台 屏幕/世界/地理坐标转换)\r\n */\r\nexport class CoordinateUtil {\r\n /**\r\n * 坐标转换核心方法\r\n * @param {Cesium.Viewer} viewer Cesium 实例\r\n * @param {Cesium.Cartesian3|Array<number>} coord 源坐标\r\n * @param {string} from 源类型(screen/world/scene)\r\n * @param {string} to 目标类型(screen/world/scene)\r\n * @returns {Cesium.Cartesian3|Cesium.Cartographic} 转换后坐标\r\n */\r\n static transform(viewer, coord, from, to) {\r\n // 统一坐标格式\r\n let sourceCoord = coord;\r\n if (Array.isArray(coord)) {\r\n if (from === 'scene') {\r\n // 地理坐标转世界坐标\r\n sourceCoord = Cesium.Cartesian3.fromDegrees(...coord);\r\n } else if (from === 'world') {\r\n sourceCoord = new Cesium.Cartesian3(coord[0], coord[1], coord[2]);\r\n } else if (from === 'screen') {\r\n // 屏幕坐标数组需先转为 Cartesian2\r\n sourceCoord = new Cesium.Cartesian2(coord[0], coord[1]);\r\n }\r\n }\r\n\r\n // 转换逻辑\r\n switch (`${from}_${to}`) {\r\n // 屏幕坐标 -> 世界坐标\r\n case 'screen_world':\r\n return viewer.camera.pickEllipsoid(sourceCoord);\r\n // 屏幕坐标 -> 地理坐标\r\n case 'screen_scene':\r\n const worldCoord = viewer.camera.pickEllipsoid(sourceCoord);\r\n const cartographic = Cesium.Cartographic.fromCartesian(worldCoord);\r\n return [\r\n Cesium.Math.toDegrees(cartographic.longitude),\r\n Cesium.Math.toDegrees(cartographic.latitude),\r\n cartographic.height\r\n ];\r\n // 世界坐标 -> 屏幕坐标\r\n case 'world_screen':\r\n return Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, sourceCoord);\r\n // 世界坐标 -> 地理坐标\r\n case 'world_scene':\r\n const carto = Cesium.Cartographic.fromCartesian(sourceCoord);\r\n return [\r\n Cesium.Math.toDegrees(carto.longitude),\r\n Cesium.Math.toDegrees(carto.latitude),\r\n carto.height\r\n ];\r\n // 地理坐标 -> 世界坐标(已在入参处理)\r\n case 'scene_world':\r\n return sourceCoord;\r\n // 地理坐标 -> 屏幕坐标\r\n case 'scene_screen':\r\n return Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, sourceCoord);\r\n default:\r\n return sourceCoord;\r\n }\r\n }\r\n}","/**\r\n * 地理计算工具(距离、面积、高程)\r\n */\r\nexport class GeoCalcUtil {\r\n /**\r\n * 计算两点地理坐标距离(米)\r\n * @param {Array<number>} point1 [lng, lat, height]\r\n * @param {Array<number>} point2 [lng, lat, height]\r\n * @returns {number} 距离\r\n */\r\n static calcDistance(point1, point2) {\r\n const coord1 = Cesium.Cartesian3.fromDegrees(...point1);\r\n const coord2 = Cesium.Cartesian3.fromDegrees(...point2);\r\n return Cesium.Cartesian3.distance(coord1, coord2);\r\n }\r\n\r\n /**\r\n * 计算多边形面积(平方米)\r\n * 使用球面多边形面积公式(基于 Cesium 几何顶点)\r\n * @param {Array<Array<number>>} points 地理坐标点集 [lon, lat, height?]\r\n * @returns {number} 面积\r\n */\r\n static calcArea(points) {\r\n if (!points || points.length < 3) return 0;\r\n\r\n const positions = points.map(p => Cesium.Cartesian3.fromDegrees(p[0], p[1], p[2] || 0));\r\n const polygon = new Cesium.PolygonGeometry({\r\n polygonHierarchy: new Cesium.PolygonHierarchy(positions)\r\n });\r\n const geometry = Cesium.PolygonGeometry.createGeometry(polygon);\r\n\r\n if (!geometry || !geometry.attributes || !geometry.attributes.position) {\r\n return 0;\r\n }\r\n\r\n const values = geometry.attributes.position.values;\r\n const vertexPositions = [];\r\n for (let i = 0; i < values.length; i += 3) {\r\n vertexPositions.push(new Cesium.Cartesian3(values[i], values[i + 1], values[i + 2]));\r\n }\r\n\r\n // 球面多边形面积(基于单位球上的多边形面积公式)\r\n const area = GeoCalcUtil.#sphericalPolygonArea(vertexPositions);\r\n return Math.abs(area);\r\n }\r\n\r\n /**\r\n * 单位球面上多边形的有向面积(平方米)\r\n * 采用局部切平面投影法:以多边形重心为原点建立切平面,投影后计算二维多边形面积。\r\n * 对于常规 GIS 多边形精度足够;极大规模多边形可后续替换为更严格的球面 excess 算法。\r\n * @param {Cesium.Cartesian3[]} positions 世界坐标顶点\r\n * @returns {number} 面积(平方米)\r\n */\r\n static #sphericalPolygonArea(positions) {\r\n const ellipsoid = Cesium.Ellipsoid.WGS84;\r\n const n = positions.length;\r\n if (n < 3) return 0;\r\n\r\n // 计算近似重心(归一化到椭球面)\r\n let center = new Cesium.Cartesian3(0, 0, 0);\r\n for (const p of positions) {\r\n center = Cesium.Cartesian3.add(center, p, center);\r\n }\r\n center = Cesium.Cartesian3.normalize(center, new Cesium.Cartesian3());\r\n center = ellipsoid.scaleToGeodeticSurface(center, new Cesium.Cartesian3()) || center;\r\n\r\n // 在重心处建立东北天(ENU)局部坐标系\r\n const tangentPlane = new Cesium.EllipsoidTangentPlane(center, ellipsoid);\r\n\r\n // 投影到切平面\r\n const projected = positions.map(p => tangentPlane.projectPointOntoPlane(p, new Cesium.Cartesian2()));\r\n\r\n // 计算二维多边形面积(Shoelace 公式)\r\n let area2 = 0;\r\n for (let i = 0; i < n; i++) {\r\n const p1 = projected[i];\r\n const p2 = projected[(i + 1) % n];\r\n area2 += p1.x * p2.y - p2.x * p1.y;\r\n }\r\n\r\n return Math.abs(area2) * 0.5;\r\n }\r\n\r\n /**\r\n * 获取指定地理坐标的高程\r\n * @param {Cesium.Viewer} viewer Cesium 实例\r\n * @param {Array<number>} coord [lng, lat]\r\n * @returns {Promise<number>} 高程值\r\n */\r\n static async getHeight(viewer, coord) {\r\n const cartographic = Cesium.Cartographic.fromDegrees(coord[0], coord[1]);\r\n const results = await Cesium.sampleTerrainMostDetailed(viewer.terrainProvider, [cartographic]);\r\n return results[0]?.height ?? 0;\r\n }\r\n}","// src/index.js\r\nimport { Config } from './core/Config.js';\r\nimport { ModuleManager } from './core/ModuleManager.js';\r\nimport { SceneModule, LayerType } from './modules/SceneModule.js';\r\nimport { GraphicModule } from './modules/GraphicModule.js';\r\nimport { EventModule } from './modules/EventModule.js';\r\nimport { EditorModule, DrawType, EditMode, SelectType, DeleteMode, ToolName } from './modules/EditorModule.js';\r\nimport { PlotGraphicType } from './modules/PlotGraphicType.js';\r\nimport { CoordinateUtil } from './utils/CoordinateUtil.js';\r\nimport { GeoCalcUtil } from './utils/GeoCalcUtil.js';\r\n\r\n// 核心 SDK 实例(直接导出,无嵌套)\r\nconst xs3d = {\r\n // 初始化 SDK\r\n init: (container, config = {}) => {\r\n // 设置 Cesium Token(提前处理,避免内部模块重复设置)\r\n if (config.cesiumToken) {\r\n window.Cesium.Ion.defaultAccessToken = config.cesiumToken;\r\n }\r\n // 设置全局配置\r\n Config.getInstance().setConfig(config);\r\n // 初始化模块管理器\r\n const moduleManager = ModuleManager.getInstance();\r\n moduleManager.initViewer(container);\r\n return moduleManager;\r\n },\r\n // 获取模块\r\n getModule: (moduleName) => {\r\n return ModuleManager.getInstance().getModule(moduleName);\r\n },\r\n // 销毁 SDK\r\n destroy: () => {\r\n ModuleManager.reset();\r\n Config.getInstance().setConfig({});\r\n if (window.Cesium?.Ion) {\r\n window.Cesium.Ion.defaultAccessToken = '';\r\n }\r\n },\r\n // 暴露核心类(方便高级使用)\r\n Config,\r\n ModuleManager,\r\n SceneModule,\r\n GraphicModule,\r\n EventModule,\r\n EditorModule,\r\n CoordinateUtil,\r\n GeoCalcUtil,\r\n // 导出工具枚举\r\n DrawType,\r\n EditMode,\r\n SelectType,\r\n DeleteMode,\r\n ToolName,\r\n LayerType,\r\n PlotGraphicType\r\n};\r\n\r\n// 仅默认导出(Rollup 会自动处理 UMD 全局变量)\r\nexport default xs3d;"],"names":[],"mappings":"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"}