@teeechina/teee-map 0.0.37 → 0.1.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.
- package/README.md +0 -3
- package/dist/index.cjs +34 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1388 -0
- package/dist/index.d.ts +1388 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/package.json +80 -33
- package/dist/.vite/license.md +0 -406
- package/dist/teee-map.css +0 -2
- package/dist/teee-map.mjs +0 -53084
- package/dist/teee-map.umd.js +0 -1284
- package/index.d.ts +0 -525
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/teeeMap.ts","../src/modules/icon-creator/canvas/index.ts","../src/modules/icon-creator/canvas/antiRunning.ts","../src/constants/mapColor.ts","../src/modules/icon-creator/canvas/baseFeature.ts","../src/modules/icon-creator/canvas/catenaryEnd.ts","../src/modules/icon-creator/canvas/derailingStop.ts","../src/modules/icon-creator/canvas/door.ts","../src/modules/icon-creator/canvas/locomotive.ts","../src/modules/icon-creator/image/index.ts","../src/enums/featureEnum.ts","../src/enums/interlockEnum.ts","../src/enums/preventionEnum.ts","../src/constants/interlock.ts","../src/constants/prevention.ts","../src/modules/icon-creator/image/canvasToImg.ts","../src/modules/source-factory/index.ts","../src/modules/layer-factory/graph-layer/backgroundLayer.ts","../src/modules/layer-factory/graph-layer/trackLayer.ts","../src/modules/layer-factory/graph-layer/trackCircuitLayer.ts","../src/modules/layer-factory/graph-layer/signalLayer.ts","../src/modules/layer-factory/graph-layer/switchLayer.ts","../src/modules/layer-factory/graph-layer/switchLocLayer.ts","../src/modules/layer-factory/graph-layer/bumperLayer.ts","../src/modules/layer-factory/graph-layer/labelLayer.ts","../src/modules/layer-factory/graph-layer/insulationLayer.ts","../src/modules/layer-factory/graph-layer/preventionLayer.ts","../src/modules/layer-factory/graph-layer/regionLayer.ts","../src/modules/layer-factory/graph-layer/displayPolygonLayer.ts","../src/modules/layer-factory/graph-layer/displayLineLayer.ts","../src/modules/layer-factory/graph-layer/displayPointLayer.ts","../src/modules/layer-factory/graph-layer/index.ts","../src/modules/layer-factory/geom-layer/trackLayer.ts","../src/modules/layer-factory/geom-layer/signalLayer.ts","../src/modules/layer-factory/geom-layer/bumperLayer.ts","../src/modules/layer-factory/geom-layer/backgroundLayer.ts","../src/modules/layer-factory/geom-layer/prevention.ts","../src/modules/layer-factory/geom-layer/index.ts","../src/modules/layer-factory/raster-layer/index.ts","../src/modules/layer-factory/geojson-layer/backgroundLayer.ts","../src/modules/layer-factory/geojson-layer/trackLayer.ts","../src/modules/layer-factory/geojson-layer/trackCircuitLayer.ts","../src/modules/layer-factory/geojson-layer/signalLayer.ts","../src/modules/layer-factory/geojson-layer/switchLayer.ts","../src/modules/layer-factory/geojson-layer/switchLocLayer.ts","../src/modules/layer-factory/geojson-layer/bumperLayer.ts","../src/modules/layer-factory/geojson-layer/labelLayer.ts","../src/modules/layer-factory/geojson-layer/insulationLayer.ts","../src/modules/layer-factory/geojson-layer/preventionLayer.ts","../src/modules/layer-factory/geojson-layer/bridgeLayer.ts","../src/modules/layer-factory/geojson-layer/tunnelLayer.ts","../src/modules/layer-factory/geojson-layer/regionSignalLayer.ts","../src/modules/layer-factory/geojson-layer/index.ts","../src/modules/layer-factory/geojson-geom-layer/trackLayer.ts","../src/modules/layer-factory/geojson-geom-layer/signalLayer.ts","../src/modules/layer-factory/geojson-geom-layer/bumperLayer.ts","../src/modules/layer-factory/geojson-geom-layer/preventionLayer.ts","../src/modules/layer-factory/geojson-geom-layer/bridgeLayer.ts","../src/modules/layer-factory/geojson-geom-layer/tunnelLayer.ts","../src/modules/layer-factory/geojson-geom-layer/regionSignalLayer.ts","../src/modules/layer-factory/geojson-geom-layer/index.ts","../src/modules/layer-factory/index.ts","../src/modules/tool-factory/baseTool.ts","../src/modules/interlock/interlockProtocol.ts","../src/modules/interlock/interlockInsulation.ts","../src/modules/interlock/interlockVisualization.ts","../src/modules/tool-factory/graphLayerTool.ts","../src/modules/tool-factory/geojsonLayerTool.ts","../src/modules/tool-factory/encryptTool.ts","../src/modules/tool-factory/index.ts","../src/core/mapForge.ts","../src/utils/coordTransform.ts","../src/utils/measure.ts","../src/utils/setTrackAngle.ts"],"names":["canvas_exports","__export","createAutoDerailingStopCanvas","createBumperCanvas","createCatenaryEndCanvas","createDerailingStopCanvas","createFastenerCanvas","createIronShoesCanvas","createJflcLocomotiveImg","createLocomotiveImg","createManualBrakingCanvas","createOverLimitCanvas","createSignalCanvas","createTrackDoorCanvas","createUnknowJflcLocomotiveImg","direction","color","canvas","ctx","text","sign","signX","textX","MapColor","stype","positionSide","context","sizeW","sizeH","lineWidth","crossWidth","centerX","centerY","radius","innerLimit","dir","tH","tirangleH","stateColor","rate","rectLength","lineLength","width","opt_options","deltaX","options","headText","headWidth","headColor","headTextColor","rearText","rearWidth","rearColor","rearTextColor","canvasHeight","marker","rotate","image_exports","createAllIcons","createBumperIcon","createDerailingStopIcon","createDoorIcon","createJcwIcon","createOverLimitIcon","createSignalIcon","StationFeatureCodeEnums","InterLockSignalStateEnums","SignalColorEnums","InterLockCircuitStateEnums","InterLockSwitchlocStateEnums","BsSignalStateEnums","PreventionEnums","INTERLOCK_SIGNAL_MAP","INTERLOCK_SIGNAL_COLOR_MAP","INTERLOCK_CIRCUIT_MAP","INTERLOCK_SWITCHLOC_MAP","BS_SIGNAL_MAP","PREVENTION_TYPES","type","img","resolve","reject","signalIconHR","signalIconHL","signalIconLR","signalIconLL","bumperImg","cjwIcon","doorIcon","stopIcon","types","dirs","graphSignalColors","item","graphSignalVariants","h","d","c","allGraphSignals","height","index","v","createRasterSourceConfigs","url","createGraphSourceConfigs","createMbtilesSourceConfigs","createGeomSourceConfigs","createGeoJsonSourceConfigs","data","createImageSourceConfigs","coordinates","createVideoSourceConfigs","urls","createCanvasSourceConfigs","canvasId","SourceFactory","backgroundLayer","config","sourceLayers","trackLayer","trackCircuitLayer","signalLayer","size","signalLayers","switchLayer","switchLocLayer","bumperLayer","labelLayer","insulationLayer","preventionLayer","regionLayer","displayPolygonLayer","displayLineLayer","displayPointLayer","GENERAL_LAYER_MAP","createLayerConfigs","layers","configLayers","configSourceLayers","layer","LayerClass","layersParams","LAYER_MAP","rasterLayer","id","sourceId","bridgeLayer","tunnelLayer","regionSignalLayer","GEOJSON_LAYER_MAP","layerTypes","sourceIds","layerType","LayerFn","result","colorLayers","GEOJSON_GEOM_LAYER_MAP","LayerFactory","addVectorTileSource","map","addRasterTileSource","addGeoJsonSource","sourceConfig","error","removeSource","updateGeoJsonSource","source","getGeoJsonSourceData","features","addGeoJsonLayer","layerId","paint","layout","defaultPaint","layerConfig","updateLayerStyle","key","removeLayer","onFeatureClick","layerIds","callback","e","feature","lngLatToTile","lng","lat","z","n","x","latRad","y","getTileCoords","bounds","zoom","west","south","east","north","maxTile","topLeft","bottomRight","minX","maxX","minY","maxY","tiles","fetchAllTiles","sourceUrl","fetched","results","resp","buffer","vt","VectorTile","PbfReader","layerName","i","geojson","code","baseTool","target","InterlockProtocol","signal","splitInfoList","signalsInfoList","switchsInfoList","circuitsInfoList","yardCode","startOffset","yardProduct","signalsInfo","signalInfo","parts","switchsInfo","switchInfo","circuitsInfo","circuitInfo","InterLockInsulation","f","upsignal","downsignal","name","signalKey","insulationKey","InterLockVisualization","splitInfo","res","val","interlocks","_yardProduct","fromCode","toCode","xCode","matched","xState","switchInterlock","handTrackCodes","startName","trackCode","startSwitch","signalSwitchList","trackCodes","existsSwitch","switchiInfo","switchLocItems","tCode","sCode","track","fromLyr","toLyr","findCode","findLyr","findSwitch","findName","sInfo","insulationKeys","lastSignalState","circuitState","whiteSignalState","_index","insulationSignals","signalState","linkInsulationKey","k","nextCircuit","nextInsulationSignals","nextFromCode","nextToCode","markedCircuit","startInsulationKey","next","stcode","state","switchFeature","switchCode","switchLocFeatures","circuits","findCircuit","switchArr","switchPositionArr","p","switchPosition","switchName","switchState","switchList","s","arr","stationSignalState","filterCodes","utc","yardList","dataList","yard","value","stateNum","switcher","newState","newCircuitMap","dedupKey","circuit","_","revColor","swLocAll","sw","refLoc","swState","sn","entry","circuitDedup","dk","cs","getFeatureTypeByCode","typeChar11","typeChar10","initGraphFeatureState","initState","properties","attach","functionType","initMapInterlock","acc","graphLayerTool","initGeoJsonState","initMixGeoJsonMapState","initGeoJsonFeatureState","initMapGeoJsonInterlock","mapType","knownKeys","sources","match","geojsonLayerTool","getScrambledXYZ","zBig","xBig","yBig","s0","keyZ","keyX","keyY","scrambledZ","scrambledX","scrambledY","encryptTool","resourceType","finalUrl","urlObj","pathParts","yWithExt","ext","scrambled","pathPrefix","ToolFactory","createRasterMapConfigs","createGraphMapConfigs","createGeomMapConfigs","createRAGEMapConfigs","subUrl","createGeoJsonMapConfigs","createRSWPMapConfigs","createMbtilesMapConfigs","MapForge","R","mercatorToLngLat","hasCoords","geometry","transformCoords","coords","transformGeoJsonFrom3857","transformGeoJsonProperties","props","offsetFeatureCollection","featureCollection","offsetX","offsetY","shiftCoords","coord","shiftGeometry","g","_MeasureTool","style","prevCoords","total","closeBtn","ev","ele","allPoints","line","len","pts","polygon","area","el","m","MeasureTool","TeeeMap","container","emptyStyle","Ct","reason","timeout","timer","err","cb","onError","mapParams","mixingMap","onLoad","icons","icon","l","_imageIds","trackFeature","geom","stashOnIdle","mapLoad","mapParam","backgroundSourceIds","run","baseMapConfig","Source","subMapConfig","subSource","graphSource","graphLayers","POINT_STATE_STYLES","DEFAULT_POINT_COLOR","DEFAULT_POINT_STROKE","toStateMatch","pick","fallback","GeomSource","GeomLayers","stationDatas","showImage","t","geojsonSources","stationData","raw","SOURCE_ID","LAYER_ID","trackGeojsonData","trackBbox","bbox","mapDatas","resMapData","mapData","regionData","regionCode","regionDatas","offectGeojson","geoJsonSourceId","layerSources","allFeatures","uniqueByCode","fc","stashF","transform","circuitCodes","featureType","tempSourceId","highlightLayerId","duration","blinkSpeed","baseColor","minAlpha","maxAlpha","strokeWidthBase","strokeWidthRange","startTime","animationId","iconId","imageData","animate","timestamp","elapsed","blinkState","alpha","cleanup","outlineLayerId","asLineParts","coordCount","part","nearestSegment","lineGeom","pointGeom","turfPoint","j","best","snapped","dist","getTrackBearing","seg","x1","y1","x2","y2","attachTrackAngle","pointSourceLayer","trackSourceLayer","controlFeatures","filterPoint","angleOffset","layerSuffix","trackCodeByFeatureCode","trackByCode","prev","angleByCode","point","matchExpr","angle"],"mappings":"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","file":"index.js","sourcesContent":["import type { SourceSpecification, StyleSpecification, Map as maplibre } from 'maplibre-gl'\nimport type { LayerType, MapParams, MapForgeConfig, RegionLayerType } from '@/types'\nimport type { InterLockVisualization } from '@/modules/interlock'\n\nimport * as maplibregl from 'maplibre-gl'\nimport { bbox } from '@turf/turf'\nimport { imageCreater } from '@/modules/icon-creator'\nimport { SourceFactory } from '@/modules/source-factory'\nimport { LayerFactory } from '@/modules/layer-factory'\nimport { ToolFactory } from '@/modules/tool-factory'\nimport { MapForge } from './mapForge'\nimport { transformGeoJsonFrom3857, transformGeoJsonProperties, offsetFeatureCollection } from '@/utils/coordTransform'\nimport { MeasureTool } from '@/utils/measure'\n\n/** stashFeatures Map 中存储的要素状态条目 */\ninterface StashEntry {\n sourceLayer: string\n [key: string]: unknown\n}\n\n/**\n * 太昌业务地图 SDK 主类。\n * 基于 maplibre-gl 封装,提供一键式地图初始化、图层管理、要素状态控制、加密瓦片及离线包支持。\n */\nexport class TeeeMap {\n /** 底层 maplibre-gl Map 实例 */\n public map: maplibre\n /** 地图方向 */\n public mapDir: 'left' | 'right' = 'left'\n /** 当前地图的构建参数(由 MapForge 生成) */\n public mapConfigs!: MapForgeConfig\n public mixingMapConfigs = new Map<string, MapForgeConfig>()\n /** 要素缓存池:key 为要素 code,value 为 { sourceLayer, ...state } */\n public stashFeatures = new Map<string | number, StashEntry>()\n\n // baseTool 挂载的工具函数\n /** 测量工具(initMap / initMixMap 时挂载) */\n public measureTool?: MeasureTool\n /** 联锁可视化实例(createGraphMap / create*GeoJson*Map 时挂载,可能为 undefined) */\n public interLockVisualization: InterLockVisualization | undefined\n /** 拉取指定范围所有瓦片的全部要素并加入缓存(baseTool 挂载) */\n public fetchAllTiles!: (zoom?: number) => Promise<void>\n /** 添加 GeoJSON 数据源(baseTool 挂载) */\n public addGeoJsonSource!: (id: string, data?: GeoJSON.GeoJSON) => void\n /** 添加矢量瓦片数据源(baseTool 挂载) */\n public addVectorTileSource!: (id: string, url: string) => void\n /** 添加栅格瓦片数据源(baseTool 挂载) */\n public addRasterTileSource!: (id: string, url: string) => void\n /** 更新 GeoJSON 数据源内容(baseTool 挂载) */\n public updateGeoJsonSource!: (id: string, data: GeoJSON.GeoJSON) => void\n /** 获取 GeoJSON 源当前数据(baseTool 挂载) */\n public getGeoJsonSourceData!: (id: string) => GeoJSON.FeatureCollection | null\n /** 移除指定数据源(baseTool 挂载) */\n public removeSource!: (id: string) => void\n /** 添加 GeoJSON 图层(baseTool 挂载) */\n public addGeoJsonLayer!: (\n layerId: string,\n sourceId: string,\n type?: 'fill' | 'line' | 'circle' | 'symbol',\n paint?: Record<string, unknown>,\n layout?: Record<string, unknown>\n ) => void\n /** 动态更新图层 paint 样式(baseTool 挂载) */\n public updateLayerStyle!: (layerId: string, paint: Record<string, unknown>) => void\n /** 移除指定图层(baseTool 挂载) */\n public removeLayer!: (layerId: string) => void\n /** 为指定图层绑定要素点击事件(baseTool 挂载) */\n public onFeatureClick!: (layerIds: string | string[], callback: (feature: maplibregl.MapGeoJSONFeature, lngLat: maplibregl.LngLat) => void) => void\n\n // graphLayerTool 挂载的工具函数\n /** 为指定要素初始化业务状态(graphLayerTool 挂载) */\n public initGraphFeatureState?: (f: maplibregl.GeoJSONFeature) => void\n\n // geojsonLayerTool 挂载的工具函数\n /** 为指定要素初始化 GeoJSON 图层业务状态(geojsonLayerTool 挂载) */\n public initGeoJsonFeatureState?: (f: maplibregl.GeoJSONFeature, layerType: string) => void\n /** 初始化全部 GeoJSON 图层业务状态(geojsonLayerTool 挂载) */\n public initGeoJsonState?: () => void\n /** 初始化混合地图 GeoJSON 图层业务状态(geojsonLayerTool 挂载) */\n public initMixGeoJsonMapState?: () => void\n\n /** GeoJSON 图层要素缓存:key 为图层名,value 为该图层所有 GeoJSONFeature */\n private layerFeaturesCache = new Map<string, maplibregl.GeoJSONFeature[]>()\n /** 当前活跃的闪烁动画清理函数,新的闪烁触发前自动清除旧的,确保新要素能正常闪烁 */\n private _activeBlinkCleanup: (() => void) | null = null\n /**\n * 要素缓存(stashFeatures)就绪信号。\n * 每次 initMap / initMixMap 开始构建时重建,stash 完成后 resolve。\n * 调用方通过 whenStashed() 等待,避免在缓存为空时调用 initGeoJsonState 而静默失效。\n */\n private _stashReady: Promise<void> = Promise.resolve()\n private _stashReadyResolve: (() => void) | null = null\n private _stashReadyReject: ((reason?: unknown) => void) | null = null\n\n /**\n * 创建 TeeeMap 实例。\n * @param container - 地图容器 DOM 元素或其 ID\n */\n constructor(container: string | HTMLElement) {\n const emptyStyle: StyleSpecification = {\n version: 8, // Mapbox GL 样式规范版本\n sources: {}, // 没有任何数据源\n layers: [] // 没有任何图层\n }\n // 初始化基础地图\n this.map = new maplibregl.Map({\n container,\n style: emptyStyle,\n center: [0, 0],\n zoom: 14,\n attributionControl: false,\n maxZoom: 24\n })\n ToolFactory.base(this)\n }\n\n /**\n * 获取底层 maplibre-gl Map 实例。\n * @returns maplibre Map 实例\n */\n public getMap(): maplibre {\n return this.map\n }\n\n /**\n * 获取当前地图的配置对象。\n * @returns MapForgeConfig\n */\n public getMapConfigs(): MapForgeConfig {\n return this.mapConfigs\n }\n\n /**\n * 销毁地图实例并释放所有资源。\n * 清理闪烁动画、事件监听、内部缓存及底层 maplibre-gl Map 实例。\n */\n public destroy(): void {\n // 清除活跃的闪烁动画\n this._activeBlinkCleanup?.()\n this._activeBlinkCleanup = null\n // 唤醒仍在等待的 whenStashed(),避免调用方永久挂起\n this.invalidateStashReady()\n // 清空要素缓存\n this.stashFeatures.clear()\n this.layerFeaturesCache.clear()\n // 清空混合地图配置\n this.mixingMapConfigs.clear()\n // 移除底层 maplibre-gl 地图实例\n this.map.remove()\n }\n\n /**\n * 重置要素缓存就绪信号。必须在每次地图构建的同步段调用,\n * 保证调用方拿到的 whenStashed() 对应的是本轮构建。\n */\n private resetStashReady(): void {\n // 上一轮若仍处于 pending,先放行,避免旧的等待方永久挂起\n this._stashReadyResolve?.()\n this._stashReady = new Promise<void>((resolve, reject) => {\n this._stashReadyResolve = resolve\n this._stashReadyReject = reject\n })\n // 兜底捕获,防止无人 await 时抛出 unhandledrejection\n // void this._stashReady.catch(() => {})\n }\n\n /** 标记要素缓存已就绪,唤醒所有 whenStashed() 等待方。 */\n private markStashReady(): void {\n this._stashReadyResolve?.()\n this._stashReadyResolve = null\n this._stashReadyReject = null\n }\n\n /**\n * 使当前的要素缓存就绪信号失败,并唤醒所有 whenStashed() 等待方(以 reject 结束)。\n * 地图实例被销毁(destroy)时调用,避免等待方永久挂起。\n */\n public invalidateStashReady(reason?: string): void {\n this._stashReadyReject?.(new Error(reason ?? 'TeeeMap 已销毁:要素缓存不会再就绪'))\n this._stashReadyResolve = null\n this._stashReadyReject = null\n }\n\n /**\n * 等待要素缓存(stashFeatures)就绪。\n *\n * 地图构建是异步的:source/layer 注册 → 首次 idle → stashAllFeature 填充缓存。\n * 在缓存就绪前调用 initGeoJsonState / initMixGeoJsonMapState 会因遍历空 Map 而\n * 静默失效(不报错、不生效),因此调用方应先 await 本方法。\n *\n * @param timeout - 超时毫秒数,默认 30000。超时后 reject,避免调用方永久挂起;传 0 表示不限时。\n * @returns 缓存就绪时 resolve;超时或地图被销毁时 reject\n */\n public whenStashed(timeout = 30000): Promise<void> {\n if (timeout <= 0) return this._stashReady\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n reject(new Error(`whenStashed 超时(${timeout}ms):要素缓存未在预期时间内就绪`))\n }, timeout)\n this._stashReady.then(\n () => {\n clearTimeout(timer)\n resolve()\n },\n (err: unknown) => {\n clearTimeout(timer)\n reject(err instanceof Error ? err : new Error(String(err)))\n }\n )\n })\n }\n\n /**\n * 注册要素缓存就绪回调(事件风格 API,内部等价于 whenStashed().then(cb))。\n * 多次注册都会在缓存就绪后执行;缓存已就绪时注册会立即(微任务)执行。\n * @param cb - 缓存就绪后执行的回调\n * @param onError - 等待失败(超时/地图销毁)或回调执行抛错时的处理函数,缺省时打印错误日志\n */\n public onStashReady(cb: () => void, onError?: (err: unknown) => void): void {\n void this.whenStashed()\n .then(cb)\n .catch((err: unknown) => {\n if (onError) {\n onError(err)\n } else {\n console.error('onStashReady: 等待要素缓存就绪失败', err)\n }\n })\n }\n\n /**\n * 核心地图构建方法。\n * 注册主源、附源、图标及图层,并在首次 idle 后自动缓存要素。\n * @param mapParams - 地图初始化参数(源、图层、ID 等)\n * @param mixingMap - 是否是同时加载区间与站场\n */\n public initMap(mapParams: MapParams, mixingMap = false): void {\n // 必须在同步段重置:调用方拿到的 whenStashed() 才对应本轮构建\n this.resetStashReady()\n const onLoad = async () => {\n try {\n console.log(`开始构建业务地图: ${mapParams.id}`)\n\n // 注册主源\n if (Array.isArray(mapParams.source)) {\n if (mixingMap) {\n const { sourceLayers } = this.mixingMapConfigs.get(mapParams.id.split('_')[1]!)!\n if (!sourceLayers) return\n mapParams.source.forEach((source, index) => {\n this.map.addSource(sourceLayers[index]!, source)\n })\n } else {\n const { sourceLayers } = this.mapConfigs\n if (!sourceLayers) return\n mapParams.source.forEach((source, index) => {\n this.map.addSource(sourceLayers[index]!, source)\n })\n }\n } else {\n if (!this.map.getSource(mapParams.id)) {\n this.map.addSource(mapParams.id, mapParams.source)\n } else {\n console.warn(`地图源已存在,跳过添加: ${mapParams.id}`)\n }\n }\n\n // 注册副源源\n if (mapParams.subSourceId && mapParams.subSource) {\n if (!this.map.getSource(mapParams.subSourceId)) {\n this.map.addSource(mapParams.subSourceId, mapParams.subSource)\n } else {\n console.warn(`地图源已存在,跳过添加: ${mapParams.subSourceId}`)\n }\n }\n\n // 获取所有图标资源\n const icons = await imageCreater.createAllIcons()\n console.log(`图标列表 (${icons.length}):`, icons)\n\n // 注册所有图标\n icons.forEach((icon) => {\n if (!this.map.hasImage(icon.id)) {\n this.map.addImage(icon.id, icon.image)\n // console.debug(`图标添加成功: ${icon.id}`);\n } else {\n console.warn(`图标已存在,跳过添加: ${icon.id}`)\n }\n })\n\n if (mapParams.layers) {\n // 注册图层\n mapParams.layers.forEach((layerConfig) => {\n if (!this.map.getLayer(layerConfig.id)) {\n this.map.addLayer(layerConfig)\n } else {\n console.debug(`图层已存在: ${layerConfig.id}`)\n }\n })\n }\n\n // 注册测量工具\n this.measureTool = new MeasureTool(this.map)\n\n // 打印所有源\n const style = this.map.getStyle()\n const sources = style?.sources ?? {}\n // 获取源 ID 列表\n const sourceIds = Object.keys(sources)\n console.log(`源列表 (${sourceIds.length}):`, sourceIds, sources)\n\n // 打印所有图层\n const layers = this.map.getStyle().layers ?? []\n const layerIds = layers.map((l) => l.id)\n console.log(`图层列表 (${layerIds.length}):`, layers)\n\n // 打印所有图标\n const _imageIds = this.map.listImages()\n console.log(`图标列表 (${_imageIds.length}):`, _imageIds)\n\n // 计算当前站场数据地图方向\n const trackFeatures = this.layerFeaturesCache.get('track')\n const trackFeature = trackFeatures?.[0] ?? null\n if (trackFeature) {\n const geom = trackFeature.geometry as GeoJSON.LineString\n this.mapDir = geom.coordinates[0]![0]! - geom.coordinates[1]![0]! > 0 ? 'left' : 'right'\n }\n\n console.groupEnd()\n console.log(`地图构建全部完成: ${mapParams.id}`)\n } catch (error) {\n // 捕获错误\n console.error(`地图初始化失败: ${mapParams.id}`, error)\n\n if (error instanceof Error) {\n console.error(`错误详情: ${error.message}`)\n }\n }\n }\n\n const stashOnIdle = () => {\n // idle 在\"所有视口瓦片加载完毕 + 渲染完成\"时触发,保证 querySourceFeatures 拿到完整数据\n this.map.once('idle', () => {\n const stashing = mixingMap ? this.stashMixMapAllFeature() : this.stashAllFeature()\n void stashing\n .catch((error: unknown) => {\n // 缓存失败也要放行,否则 whenStashed() 的等待方会一直卡住\n console.error(`要素缓存失败: ${mapParams.id}`, error)\n })\n .finally(() => this.markStashReady())\n })\n }\n\n if (this.map.loaded()) {\n void onLoad()\n .then(stashOnIdle)\n .catch((error: unknown) => {\n console.error(error)\n })\n } else {\n this.map.on('load', () => {\n void onLoad()\n .then(stashOnIdle)\n .catch((error: unknown) => {\n console.error(error)\n })\n })\n }\n }\n\n /**\n * 创建混合地图(区间 + 站场)。\n * @param mapParams 地图初始化参数(源、图层、ID 等)\n */\n public initMixMap(mapParams: MapParams[]) {\n // 必须在同步段重置:调用方拿到的 whenStashed() 才对应本轮构建\n this.resetStashReady()\n\n const mapLoad = async () => {\n // 获取所有图标资源\n const icons = await imageCreater.createAllIcons()\n console.log(`图标列表 (${icons.length}):`, icons)\n\n // 注册所有图标\n icons.forEach((icon) => {\n if (!this.map.hasImage(icon.id)) {\n this.map.addImage(icon.id, icon.image)\n // console.debug(`图标添加成功: ${icon.id}`);\n } else {\n console.warn(`图标已存在,跳过添加: ${icon.id}`)\n }\n })\n\n for (const mapParam of mapParams) {\n // 注册主源\n if (Array.isArray(mapParam.source)) {\n const { sourceLayers } = this.mixingMapConfigs.get(mapParam.id.split('_')[1]!)!\n if (!sourceLayers) continue\n mapParam.source.forEach((source, index) => {\n this.map.addSource(sourceLayers[index]!, source)\n })\n } else {\n if (!this.map.getSource(mapParam.id)) {\n this.map.addSource(mapParam.id, mapParam.source)\n } else {\n console.warn(`地图源已存在,跳过添加: ${mapParam.id}`)\n }\n }\n\n if (mapParam.layers) {\n // 注册图层\n mapParam.layers.forEach((layerConfig) => {\n if (!this.map.getLayer(layerConfig.id)) {\n this.map.addLayer(layerConfig)\n } else {\n console.debug(`图层已存在: ${layerConfig.id}`)\n }\n })\n }\n }\n\n this.measureTool = new MeasureTool(this.map)\n\n // 打印所有源\n const style = this.map.getStyle()\n const sources = style?.sources ?? {}\n // 获取源 ID 列表\n const sourceIds = Object.keys(sources)\n console.log(`源列表 (${sourceIds.length}):`, sourceIds, sources)\n\n // 打印所有图层\n const layers = this.map.getStyle().layers ?? []\n const layerIds = layers.map((l) => l.id)\n console.log(`图层列表 (${layerIds.length}):`, layers)\n\n const backgroundSourceIds = sourceIds.filter((id) => id.endsWith('_background'))\n const backgroundLayersIds = layerIds.filter((id) => id.endsWith('_background'))\n\n backgroundLayersIds.slice(1).forEach((id) => {\n if (this.map.getLayer(id)) {\n this.map.removeLayer(id)\n }\n })\n backgroundSourceIds.slice(1).forEach((id) => {\n if (this.map.getSource(id)) {\n this.map.removeSource(id)\n }\n })\n\n // 计算当前站场数据地图方向\n const mapParam = mapParams[0]\n const trackFeatures = this.layerFeaturesCache.get(mapParam?.id.split('_')[1] + '_track')\n const trackFeature = trackFeatures?.[0] ?? null\n if (trackFeature) {\n const geom = trackFeature.geometry as GeoJSON.LineString\n this.mapDir = geom.coordinates[0]![0]! - geom.coordinates[1]![0]! > 0 ? 'left' : 'right'\n }\n\n await this.stashMixMapAllFeature()\n // 注册 GeoJSON 联锁工具\n ToolFactory.geojson(this)\n }\n\n const run = async () => {\n try {\n await mapLoad()\n } catch (err) {\n // 构建失败也要放行,否则 whenStashed() 的等待方会一直卡住\n console.error('混合地图构建失败', err)\n } finally {\n this.markStashReady()\n }\n }\n\n if (this.map.loaded()) {\n void run()\n } else {\n this.map.once('load', () => void run())\n }\n }\n\n /**\n * 创建人员定位图(RSWP)。\n * 由影像栅格底图 + GeoJSON 附源构成,用于人员/机车定位场景。\n * @param url - 栅格影像瓦片地址\n */\n public createRSWPMap(url: string): void {\n // 人员定位地图由 影像图和geojson源构成\n const baseMapConfig = MapForge.rswp(url)\n const Source = SourceFactory.raster(baseMapConfig.sourceUrl!)\n const layer = LayerFactory.raster(baseMapConfig.id)\n\n const subMapConfig = MapForge.geojson('rswp-geojson')\n const subSource = SourceFactory.geojson()\n\n const mapParams: MapParams = {\n id: baseMapConfig.id,\n source: Source,\n subSourceId: subMapConfig.id,\n subSource: subSource,\n layers: layer\n }\n this.mapConfigs = baseMapConfig\n this.mapConfigs.subSourceId = subMapConfig.id\n\n // 将 源 图层 构建成参数传给地图加载\n this.initMap(mapParams)\n }\n\n /**\n * 创建普通站场平面图(Graph)。\n * @param stcode - 车站编码\n * @param url - 矢量瓦片服务地址\n * @param layers - 需要加载的图层类型列表\n */\n public createGraphMap(stcode: string, url: string, layers: LayerType[]): void {\n // setupEncryptedTileTransform(this);\n // 生成地图配置参数\n this.mapConfigs = MapForge.graph(stcode, url, layers)\n\n // 根据配置参数生成 源 图层\n const graphSource = SourceFactory.graph(this.mapConfigs.sourceUrl!)\n const graphLayers = LayerFactory.graph(this.mapConfigs)\n\n const mapParams = {\n id: this.mapConfigs.id,\n source: graphSource,\n layers: graphLayers\n }\n // 将 源 图层 构建成参数传给地图加载\n this.initMap(mapParams)\n\n // 将CTC地图工具注册给地图\n ToolFactory.graph(this)\n }\n\n public createSscsGraphMap(url: string): void {\n // 示例:点要素按业务状态分派的颜色(接入真实业务时替换这里即可)\n // 状态通过要素 feature-state 'state' 传入。\n const POINT_STATE_STYLES: Record<string, { color: string; strokeColor: string }> = {\n normal: { color: '#1C5AFF', strokeColor: '#31E5FF' },\n reverse: { color: '#FFB400', strokeColor: '#31E5FF' },\n lock: { color: '#00C853', strokeColor: '#31E5FF' },\n fault: { color: '#E4002B', strokeColor: '#FFD700' },\n selected: { color: '#FFD700', strokeColor: '#FFFFFF' }\n }\n // 要素未设状态 / 状态不在表内时的默认颜色\n const DEFAULT_POINT_COLOR = '#1C5AFF'\n const DEFAULT_POINT_STROKE = '#31E5FF'\n // 把「状态 -> 颜色」编译为 feature-state 'state' 的 match 表达式\n const toStateMatch = (pick: (s: { color: string; strokeColor: string }) => string, fallback: string) => [\n 'match',\n ['feature-state', 'state'],\n ...Object.entries(POINT_STATE_STYLES).flatMap(([state, style]) => [state, pick(style)]),\n fallback\n ]\n\n const mapParams = {\n id: 'sscs_graph',\n source: {\n type: 'vector',\n tiles: [url],\n scheme: 'tms',\n promoteId: 'code'\n },\n layers: [\n {\n 'id': 'sscs_graph_line',\n 'type': 'line',\n 'source': 'sscs_graph',\n 'source-layer': 'cdst_trfc_line',\n 'paint': {\n 'line-color': 'orange',\n 'line-width': 2\n }\n },\n {\n 'id': 'sscs_graph_point',\n 'type': 'circle',\n 'source': 'sscs_graph',\n 'source-layer': 'cdst_trfc_point',\n 'paint': {\n 'circle-color': toStateMatch((s) => s.color, DEFAULT_POINT_COLOR),\n 'circle-radius': ['interpolate', ['linear'], ['zoom'], 10, 5, 13, 15, 22, 20],\n 'circle-opacity': 0.9,\n 'circle-stroke-color': toStateMatch((s) => s.strokeColor, DEFAULT_POINT_STROKE),\n 'circle-stroke-width': 2,\n 'circle-blur': 0.2\n }\n },\n {\n 'id': 'sscs_graph_line_label',\n 'type': 'symbol',\n 'source': 'sscs_graph',\n 'source-layer': 'cdst_trfc_line',\n 'minzoom': 10,\n 'layout': {\n 'text-field': ['get', 'name_abb'],\n 'symbol-placement': 'line',\n 'text-rotation-alignment': 'map',\n 'text-size': ['interpolate', ['linear'], ['zoom'], 10, 8, 22, 15]\n },\n 'paint': {\n 'text-color': '#333333',\n 'text-halo-color': '#ffffff',\n 'text-halo-width': 1.5\n }\n },\n {\n 'id': 'sscs_graph_point_label',\n 'type': 'symbol',\n 'source': 'sscs_graph',\n 'source-layer': 'cdst_trfc_point',\n 'minzoom': 10,\n 'layout': {\n 'text-field': ['get', 'name'],\n 'text-size': ['interpolate', ['linear'], ['zoom'], 10, 5, 13, 9, 22, 15],\n 'text-max-width': 3\n },\n 'paint': {\n 'text-color': 'white'\n }\n }\n ]\n } as MapParams\n // 将 源 图层 构建成参数传给地图加载\n this.initMap(mapParams)\n }\n\n /**\n * 设置 sscs 点要素的业务状态(与 createSscsGraphMap 配套使用)。\n * @param code - 要素code(即瓦片 promoteId 对应属性 code 的值)\n * @param state - 业务状态,需包含在 createSscsGraphMap 传入的 pointStateStyles 中,否则回退默认色\n */\n public setSscsPointState(code: string | number, state: string): void {\n this.map.setFeatureState({ source: 'sscs_graph', sourceLayer: 'cdst_trfc_point', id: code }, { state })\n }\n\n /**\n * 创建地理图(Geom)。\n * @param stcode - 车站编码\n * @param url - 矢量瓦片服务地址\n * @param layers - 需要加载的图层类型列表\n */\n public createGeomMap(stcode: string, url: string, layers: LayerType[]): void {\n // 生成地图配置参数\n this.mapConfigs = MapForge.geom(stcode, url, layers)\n\n // 根据配置参数生成 源 图层\n const GeomSource = SourceFactory.geom(this.mapConfigs.sourceUrl!)\n const GeomLayers = LayerFactory.geom(this.mapConfigs)\n\n const mapParams = {\n id: this.mapConfigs.id,\n source: GeomSource,\n layers: GeomLayers\n }\n // 将 源 图层 构建成参数传给地图加载\n this.initMap(mapParams)\n }\n\n /**\n * 创建加密地理图。\n * 自动注入瓦片解密转换器,其余逻辑同 createGeomMap。\n * @param stcode - 车站编码\n * @param url - 加密矢量瓦片服务地址\n * @param layers - 需要加载的图层类型列表\n */\n public createGeomEncryptedMap(stcode: string, url: string, layers: LayerType[]): void {\n ToolFactory.encrypt(this)\n this.mapConfigs = MapForge.geom(stcode, url, layers)\n\n // 根据配置参数生成 源 图层\n const GeomSource = SourceFactory.geom(this.mapConfigs.sourceUrl!)\n const GeomLayers = LayerFactory.geom(this.mapConfigs)\n\n const mapParams = {\n id: this.mapConfigs.id,\n source: GeomSource,\n layers: GeomLayers\n }\n // 将 源 图层 构建成参数传给地图加载\n this.initMap(mapParams)\n }\n\n /**\n * 创建 GeoJSON 站场地理图。\n * 每个图层类型对应一个独立的 GeoJSON source,数据通过 URL 数组传入。\n * @param stationDatas - 需要加载的图层类型与geojson数据列表\n * @param showImage - 是否加载高德影像底图\n */\n public async createGeoJsonGeomStationMap(\n stationDatas: {\n name: string\n data: GeoJSON.FeatureCollection | string\n }[],\n showImage = true\n ): Promise<void> {\n // 每个图层类型对应一个 source id,命名为 geojson_{layerType}\n const layerTypes = stationDatas.map((d) => d.name) as LayerType[] // 图层类型列表\n const sourceIds = layerTypes.map((t) => `geojson_${t}`)\n // 设置 mapConfigs 供 geojsonLayerTool 使用\n this.mapConfigs = MapForge.geojson('geojson')\n this.mapConfigs.layers = layerTypes\n this.mapConfigs.sourceLayers = sourceIds\n const geojsonSources = await Promise.all(\n stationDatas.map(async (stationData, i) => {\n const sourceId = sourceIds[i]\n const layerName = stationData.name\n if (this.map.getSource(sourceId!)) return\n const raw = stationData.data\n let data: string | GeoJSON.FeatureCollection\n if (typeof raw === 'string') {\n const res = await fetch(raw)\n data = (await res.json()) as GeoJSON.FeatureCollection\n transformGeoJsonProperties(layerName, data)\n } else {\n data = raw\n transformGeoJsonProperties(layerName, data)\n }\n this.layerFeaturesCache.set(layerName, data.features as maplibregl.GeoJSONFeature[])\n return SourceFactory.geojson(data)\n })\n )\n const mapParams = {\n id: this.mapConfigs.id,\n source: geojsonSources as SourceSpecification[],\n layers: LayerFactory.geojsonGeom(layerTypes, sourceIds)\n }\n this.initMap(mapParams)\n // 加载影像地图\n if (showImage) {\n const SOURCE_ID = 'gaode-satellite'\n const LAYER_ID = 'gaode-satellite-layer'\n this.map.on('load', () => {\n this.map.addSource(SOURCE_ID, {\n type: 'raster',\n tiles: ['https://wprd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=6&x={x}&y={y}&z={z}'],\n tileSize: 256,\n maxzoom: 18\n })\n this.map.addLayer({\n id: LAYER_ID,\n type: 'raster',\n source: SOURCE_ID\n })\n })\n }\n // 定位至数据范围\n const trackGeojsonData: GeoJSON.FeatureCollection | string | undefined = stationDatas.find((d) => d.name === 'track')?.data\n if (trackGeojsonData) {\n const trackBbox = bbox(trackGeojsonData as GeoJSON.FeatureCollection)\n this.map.fitBounds(\n [\n [trackBbox[0], trackBbox[1]],\n [trackBbox[2], trackBbox[3]]\n ],\n {\n padding: 100, // 内边距\n maxZoom: 15, // 防止缩太近\n duration: 0\n }\n )\n }\n // 注册 GeoJSON 联锁工具\n ToolFactory.geojson(this)\n }\n\n /**\n * 创建geojson数据来源的站场区间平面地图\n * @param mapDatas\n * @returns\n */\n public async createMixGeoJsonGeomMap(\n mapDatas: {\n code: string\n type: 'region' | 'station'\n geojsonData: {\n name: string\n data: GeoJSON.FeatureCollection | string\n }[]\n }[],\n showImage = true\n ) {\n if (mapDatas.length === 0) return\n const resMapData = await Promise.all(\n mapDatas.map(async (mapData) => {\n if (mapData.type === 'region') {\n const layerTypes = mapData.geojsonData.map((d) => d.name) as RegionLayerType[] // 图层类型列表\n const sourceIds = layerTypes.map((t) => `geojson_region_${mapData.code}_${t}`)\n this.mixingMapConfigs.set(mapData.code, {\n id: `geojson_${mapData.code}`,\n layers: layerTypes,\n sourceLayers: sourceIds,\n type: 'region'\n })\n const geojsonSources = await Promise.all(\n mapData.geojsonData.map(async (regionData, i) => {\n const sourceId = sourceIds[i]\n const layerName = regionData.name\n if (this.map.getSource(sourceId!)) return\n const raw = regionData.data\n let data: string | GeoJSON.FeatureCollection\n if (typeof raw === 'string') {\n const res = await fetch(raw)\n data = (await res.json()) as GeoJSON.FeatureCollection\n transformGeoJsonProperties(layerName, data)\n } else {\n data = raw\n transformGeoJsonProperties(layerName, data)\n }\n this.layerFeaturesCache.set(`${mapData.code}_${layerName}`, data.features as maplibregl.GeoJSONFeature[])\n return SourceFactory.geojson(data)\n })\n )\n return {\n id: `geojson_${mapData.code}`,\n source: geojsonSources as SourceSpecification[],\n layers: LayerFactory.geojsonGeom(layerTypes, sourceIds)\n }\n } else {\n const layerTypes = mapData.geojsonData.map((d) => d.name) as RegionLayerType[] // 图层类型列表\n const sourceIds = layerTypes.map((t) => `geojson_station_${mapData.code}_${t}`)\n this.mixingMapConfigs.set(mapData.code, {\n id: `geojson_${mapData.code}`,\n layers: layerTypes,\n sourceLayers: sourceIds,\n type: 'station'\n })\n const geojsonSources = await Promise.all(\n mapData.geojsonData.map(async (regionData, i) => {\n const sourceId = sourceIds[i]\n const layerName = regionData.name\n if (this.map.getSource(sourceId!)) return\n const raw = regionData.data\n let data: string | GeoJSON.FeatureCollection\n if (typeof raw === 'string') {\n const res = await fetch(raw)\n data = (await res.json()) as GeoJSON.FeatureCollection\n transformGeoJsonProperties(layerName, data)\n } else {\n data = raw\n transformGeoJsonProperties(layerName, data)\n }\n this.layerFeaturesCache.set(`${mapData.code}_${layerName}`, data.features as maplibregl.GeoJSONFeature[])\n return SourceFactory.geojson(data)\n })\n )\n return {\n id: `geojson_${mapData.code}`,\n source: geojsonSources as SourceSpecification[],\n layers: LayerFactory.geojsonGeom(layerTypes, sourceIds)\n }\n }\n })\n )\n this.initMixMap(resMapData)\n // 加载影像地图\n if (showImage) {\n const SOURCE_ID = 'gaode-satellite'\n const LAYER_ID = 'gaode-satellite-layer'\n this.map.on('load', () => {\n this.map.addSource(SOURCE_ID, {\n type: 'raster',\n tiles: ['https://wprd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=6&x={x}&y={y}&z={z}'],\n tileSize: 256,\n maxzoom: 18\n })\n this.map.addLayer({\n id: LAYER_ID,\n type: 'raster',\n source: SOURCE_ID\n })\n })\n }\n // 定位至数据范围\n const trackGeojsonData: GeoJSON.FeatureCollection | string | undefined = mapDatas[1]?.geojsonData.find((d) => d.name === 'track')?.data\n if (trackGeojsonData) {\n const trackBbox = bbox(trackGeojsonData as GeoJSON.FeatureCollection)\n this.map.fitBounds(\n [\n [trackBbox[0], trackBbox[1]],\n [trackBbox[2], trackBbox[3]]\n ],\n {\n padding: 100, // 内边距\n maxZoom: 15, // 防止缩太近\n duration: 0\n }\n )\n }\n // 注册 GeoJSON 联锁工具\n ToolFactory.geojson(this)\n }\n\n /**\n * 创建 GeoJSON 站场平面图。\n * 每个图层类型对应一个独立的 GeoJSON source,数据通过 URL 数组传入。\n * @param stationDatas - 需要加载的图层类型与geojson数据列表\n */\n public async createGeoJsonStationMap(\n stationDatas: {\n name: string\n data: GeoJSON.FeatureCollection | string\n }[]\n ): Promise<void> {\n // 每个图层类型对应一个 source id,命名为 geojson_{layerType}\n const layerTypes = stationDatas.map((d) => d.name) as LayerType[] // 图层类型列表\n const sourceIds = layerTypes.map((t) => `geojson_${t}`)\n // 设置 mapConfigs 供 geojsonLayerTool 使用\n this.mapConfigs = MapForge.geojson('geojson')\n this.mapConfigs.layers = layerTypes\n this.mapConfigs.sourceLayers = sourceIds\n const geojsonSources = await Promise.all(\n stationDatas.map(async (stationData, i) => {\n const sourceId = sourceIds[i]\n const layerName = stationData.name\n if (this.map.getSource(sourceId!)) return\n const raw = stationData.data\n let data: string | GeoJSON.FeatureCollection\n if (typeof raw === 'string') {\n const res = await fetch(raw)\n const geojson = (await res.json()) as GeoJSON.FeatureCollection\n data = transformGeoJsonFrom3857(geojson)\n transformGeoJsonProperties(layerName, data)\n } else {\n data = transformGeoJsonFrom3857(raw)\n transformGeoJsonProperties(layerName, data)\n }\n this.layerFeaturesCache.set(layerName, data.features as maplibregl.GeoJSONFeature[])\n return SourceFactory.geojson(data)\n })\n )\n const mapParams = {\n id: this.mapConfigs.id,\n source: geojsonSources as SourceSpecification[],\n layers: LayerFactory.geojson(layerTypes, sourceIds)\n }\n this.initMap(mapParams)\n // 定位至数据范围\n const trackGeojsonData: GeoJSON.FeatureCollection | string | undefined = stationDatas.find((d) => d.name === 'track')?.data\n if (trackGeojsonData) {\n const trackBbox = bbox(transformGeoJsonFrom3857(trackGeojsonData as GeoJSON.FeatureCollection))\n this.map.fitBounds(\n [\n [trackBbox[0], trackBbox[1]],\n [trackBbox[2], trackBbox[3]]\n ],\n {\n padding: 100, // 内边距\n maxZoom: 15, // 防止缩太近\n duration: 0\n }\n )\n }\n // 注册 GeoJSON 联锁工具\n ToolFactory.geojson(this)\n }\n\n /**\n * 创建 GeoJson 区间平面图\n * @param regionCode 区间code\n * @param regionDatas 区间数据\n */\n public async createGeoJsonRegionMap(\n regionCode: string,\n regionDatas: {\n name: string\n data: GeoJSON.FeatureCollection | string\n }[]\n ) {\n const layerTypes = regionDatas.map((d) => d.name) as RegionLayerType[] // 图层类型列表\n const sourceIds = layerTypes.map((t) => `geojson_region_${regionCode}_${t}`)\n // 设置 mapConfigs 供 geojsonLayerTool 使用\n this.mixingMapConfigs.set(regionCode, {\n id: `geojson_${regionCode}`,\n layers: layerTypes,\n sourceLayers: sourceIds,\n type: 'region'\n })\n\n const geojsonSources = await Promise.all(\n regionDatas.map(async (regionData, i) => {\n const sourceId = sourceIds[i]\n const layerName = regionData.name\n if (this.map.getSource(sourceId!)) return\n const raw = regionData.data\n let data: string | GeoJSON.FeatureCollection\n if (typeof raw === 'string') {\n const res = await fetch(raw)\n const geojson = (await res.json()) as GeoJSON.FeatureCollection\n data = transformGeoJsonFrom3857(geojson)\n transformGeoJsonProperties(layerName, data)\n } else {\n data = transformGeoJsonFrom3857(raw)\n transformGeoJsonProperties(layerName, data)\n }\n this.layerFeaturesCache.set(layerName, data.features as maplibregl.GeoJSONFeature[])\n return SourceFactory.geojson(data)\n })\n )\n const mapParams = {\n id: `geojson_${regionCode}`,\n source: geojsonSources as SourceSpecification[],\n layers: LayerFactory.geojson(layerTypes, sourceIds)\n }\n this.initMap(mapParams, true)\n // 定位至数据范围\n const trackGeojsonData: GeoJSON.FeatureCollection | string | undefined = regionDatas.find((d) => d.name === 'track')?.data\n if (trackGeojsonData) {\n const trackBbox = bbox(transformGeoJsonFrom3857(trackGeojsonData as GeoJSON.FeatureCollection))\n this.map.fitBounds(\n [\n [trackBbox[0], trackBbox[1]],\n [trackBbox[2], trackBbox[3]]\n ],\n {\n padding: 100, // 内边距\n maxZoom: 15, // 防止缩太近\n duration: 0\n }\n )\n }\n // 注册 GeoJSON 联锁工具\n ToolFactory.geojson(this)\n }\n\n /**\n * 创建geojson数据来源的站场区间平面地图\n * @param mapDatas\n * @returns\n */\n public async createMixGeoJsonMap(\n mapDatas: {\n code: string\n type: 'region' | 'station'\n geojsonData: {\n name: string\n data: GeoJSON.FeatureCollection | string\n }[]\n deltaInfo?: {\n deltax: number\n deltay: number\n }\n }[]\n ) {\n if (mapDatas.length === 0) return\n const resMapData = await Promise.all(\n mapDatas.map(async (mapData) => {\n if (mapData.type === 'region') {\n const layerTypes = mapData.geojsonData.map((d) => d.name) as RegionLayerType[] // 图层类型列表\n const sourceIds = layerTypes.map((t) => `geojson_region_${mapData.code}_${t}`)\n this.mixingMapConfigs.set(mapData.code, {\n id: `geojson_${mapData.code}`,\n layers: layerTypes,\n sourceLayers: sourceIds,\n type: 'region'\n })\n const geojsonSources = await Promise.all(\n mapData.geojsonData.map(async (regionData, i) => {\n const sourceId = sourceIds[i]\n const layerName = regionData.name\n if (this.map.getSource(sourceId!)) return\n const raw = regionData.data\n let data: string | GeoJSON.FeatureCollection\n if (typeof raw === 'string') {\n const res = await fetch(raw)\n const geojson = (await res.json()) as GeoJSON.FeatureCollection\n data = transformGeoJsonFrom3857(geojson)\n transformGeoJsonProperties(layerName, data)\n } else {\n data = transformGeoJsonFrom3857(raw)\n transformGeoJsonProperties(layerName, data)\n }\n this.layerFeaturesCache.set(`${mapData.code}_${layerName}`, data.features as maplibregl.GeoJSONFeature[])\n return SourceFactory.geojson(data)\n })\n )\n return {\n id: `geojson_${mapData.code}`,\n source: geojsonSources as SourceSpecification[],\n layers: LayerFactory.geojson(layerTypes, sourceIds)\n }\n } else {\n const layerTypes = mapData.geojsonData.map((d) => d.name) as RegionLayerType[] // 图层类型列表\n const sourceIds = layerTypes.map((t) => `geojson_station_${mapData.code}_${t}`)\n this.mixingMapConfigs.set(mapData.code, {\n id: `geojson_${mapData.code}`,\n layers: layerTypes,\n sourceLayers: sourceIds,\n type: 'station'\n })\n const geojsonSources = await Promise.all(\n mapData.geojsonData.map(async (regionData, i) => {\n const sourceId = sourceIds[i]\n const layerName = regionData.name\n if (this.map.getSource(sourceId!)) return\n const raw = regionData.data\n let data: string | GeoJSON.FeatureCollection\n if (typeof raw === 'string') {\n const res = await fetch(raw)\n const geojson = (await res.json()) as GeoJSON.FeatureCollection\n const offectGeojson = offsetFeatureCollection(geojson, mapData.deltaInfo?.deltax || 0, mapData.deltaInfo?.deltay || 0)\n data = transformGeoJsonFrom3857(offectGeojson)\n transformGeoJsonProperties(layerName, data)\n } else {\n const offectGeojson = offsetFeatureCollection(raw, mapData.deltaInfo?.deltax || 0, mapData.deltaInfo?.deltay || 0)\n data = transformGeoJsonFrom3857(offectGeojson)\n transformGeoJsonProperties(layerName, data)\n }\n this.layerFeaturesCache.set(`${mapData.code}_${layerName}`, data.features as maplibregl.GeoJSONFeature[])\n return SourceFactory.geojson(data)\n })\n )\n return {\n id: `geojson_${mapData.code}`,\n source: geojsonSources as SourceSpecification[],\n layers: LayerFactory.geojson(layerTypes, sourceIds)\n }\n }\n })\n )\n this.initMixMap(resMapData)\n // 定位至数据范围\n const trackGeojsonData: GeoJSON.FeatureCollection | string | undefined = mapDatas[1]?.geojsonData.find((d) => d.name === 'track')?.data\n if (trackGeojsonData) {\n const trackBbox = bbox(transformGeoJsonFrom3857(trackGeojsonData as GeoJSON.FeatureCollection))\n this.map.fitBounds(\n [\n [trackBbox[0], trackBbox[1]],\n [trackBbox[2], trackBbox[3]]\n ],\n {\n padding: 100, // 内边距\n maxZoom: 15, // 防止缩太近\n duration: 0\n }\n )\n }\n }\n\n /**\n * 创建影像图 / 栅格底图。\n * @param url - 栅格瓦片服务地址\n */\n public createRasterMap(url: string): void {\n // 生成地图配置参数\n this.mapConfigs = MapForge.raster(url)\n\n // 根据配置参数生成 源 图层\n const Source = SourceFactory.raster(this.mapConfigs.sourceUrl!)\n const layer = LayerFactory.raster(this.mapConfigs.id)\n // const Layers = LayerFactory.ctc(this.mapConfigs);\n\n const mapParams: MapParams = {\n id: this.mapConfigs.id,\n source: Source,\n layers: layer\n }\n\n // 将 源 图层 构建成参数传给地图加载\n this.initMap(mapParams)\n }\n\n /**\n * 创建加密栅格地图。\n * 自动注入瓦片解密转换器。\n * @param url - 加密栅格瓦片服务地址\n */\n public createEncryptedRasterMap(url: string): void {\n ToolFactory.encrypt(this)\n // 生成地图配置参数\n this.mapConfigs = MapForge.raster(url)\n\n // 根据配置参数生成 源 图层\n const Source = SourceFactory.raster(this.mapConfigs.sourceUrl!)\n const layer = LayerFactory.raster(this.mapConfigs.id)\n\n const mapParams: MapParams = {\n id: this.mapConfigs.id,\n source: Source,\n layers: layer\n }\n // 将 源 图层 构建成参数传给地图加载\n this.initMap(mapParams)\n }\n\n /**\n * 缓存当前视口内的全部要素信息。\n * key 为要素 properties.code,value 包含 sourceLayer 及后续状态。\n * 地图首次 idle 后自动执行,也可手动调用刷新缓存。\n */\n public async stashMixMapAllFeature(): Promise<void> {\n if (this.mixingMapConfigs.size === 0) return\n for (const [key, value] of this.mixingMapConfigs) {\n const type = value.type\n const layerTypes = value.layers ?? []\n await Promise.all(\n layerTypes.map(async (layerType: string) => {\n // if (layerType === 'prevention') return;\n const geoJsonSourceId = `geojson_${type}_${key}_${layerType}`\n const source: maplibregl.GeoJSONSource = this.map.getSource(geoJsonSourceId)!\n if (!source) return\n const geojson = await source.getData()\n const fc = geojson as GeoJSON.FeatureCollection\n fc.features?.forEach((f) => {\n const code = f.properties?.code as string\n if (code && !this.stashFeatures.get(code)) {\n this.stashFeatures.set(code, {\n sourceLayer: geoJsonSourceId,\n properties: f.properties\n })\n }\n })\n })\n )\n }\n }\n\n /**\n * 缓存当前视口内的全部要素信息。\n * key 为要素 properties.code,value 包含 sourceLayer 及后续状态。\n * 地图首次 idle 后自动执行,也可手动调用刷新缓存。\n */\n public async stashAllFeature(): Promise<void> {\n if (!this.mapConfigs) return\n\n const layerSources = this.mapConfigs.sourceLayers\n const layerTypes = this.mapConfigs.layers ?? []\n const sourceId = this.mapConfigs.id\n\n this.stashFeatures.clear()\n\n layerSources?.forEach((l, index) => {\n if (l.includes('prevention')) return\n const allFeatures = this.map.querySourceFeatures(sourceId, {\n sourceLayer: l\n })\n\n // 瓦片接缝处可能重复,按 code 去重\n const uniqueByCode = new Map<string, maplibregl.GeoJSONFeature>()\n allFeatures.forEach((f) => {\n const code = f.properties?.code as string | number\n if (!code) return\n this.stashFeatures.set(code, { sourceLayer: l })\n uniqueByCode.set(String(code), f)\n })\n\n // 供 InterLockVisualization.queryGeojsonFeatures 按图层类型查找\n const layerType = layerTypes[index]\n if (layerType) {\n this.layerFeaturesCache.set(layerType, Array.from(uniqueByCode.values()))\n }\n })\n\n await Promise.all(\n layerTypes.map(async (layerType: string) => {\n // if (layerType === 'prevention') return;\n const geoJsonSourceId = `geojson_${layerType}`\n const source: maplibregl.GeoJSONSource = this.map.getSource(geoJsonSourceId)!\n if (!source) return\n const geojson = await source.getData()\n const fc = geojson as GeoJSON.FeatureCollection\n const features = (fc.features ?? []) as maplibregl.GeoJSONFeature[]\n fc.features?.forEach((f) => {\n const code = f.properties?.code as string | number\n if (code && !this.stashFeatures.get(code)) {\n this.stashFeatures.set(code, {\n sourceLayer: geoJsonSourceId,\n properties: f.properties\n })\n }\n })\n if (features.length) {\n this.layerFeaturesCache.set(layerType, features)\n }\n })\n )\n }\n\n /**\n * 更新指定要素的业务状态。\n * 状态会合并到 stashFeatures 缓存中,并同步调用 map.setFeatureState。\n * 同时兼容矢量瓦片源(带 sourceLayer)和 GeoJSON 源(sourceLayer 即为 sourceId)。\n * @param code - 要素唯一编码\n * @param state - 状态对象(如 { state: '1', select: true })\n */\n public updateFeatureState(code: string | number, state: Record<string, unknown>): void {\n const stashF = this.stashFeatures.get(code)\n if (!stashF) return\n Object.assign(stashF, state)\n const isGeoJson = stashF.sourceLayer?.startsWith('geojson_')\n if (isGeoJson) {\n this.map.setFeatureState({ source: stashF.sourceLayer, id: code }, stashF)\n } else {\n if (!this.mapConfigs) return\n // console.log(stashF)\n this.map.setFeatureState(\n {\n source: this.mapConfigs.id,\n sourceLayer: stashF.sourceLayer,\n id: code\n },\n stashF\n )\n }\n }\n\n /**\n * 根据要素编码获取要素当前状态。\n * @param code 要素编码\n * @returns\n */\n public getFeatureState(code: string | number): StashEntry | undefined {\n const stashF = this.stashFeatures.get(code)\n if (!stashF) return undefined\n return stashF\n }\n\n /**\n * 定位 geojson 数据\n * @param data GeoJSON FeatureCollection\n */\n public locateGeojsonFeature(data: GeoJSON.FeatureCollection, transform = true) {\n const trackBbox = bbox(transform ? transformGeoJsonFrom3857(data) : data)\n this.map.fitBounds(\n [\n [trackBbox[0], trackBbox[1]],\n [trackBbox[2], trackBbox[3]]\n ],\n {\n padding: 50, // 内边距\n maxZoom: 18 // 防止缩太近\n }\n )\n }\n\n /**\n * 查询 geojson 图层所有 feature 要素\n * @param key 图层名称\n * @returns geojson 图层所有 feature 要素\n */\n public queryGeojsonFeatures(key: string): maplibregl.GeoJSONFeature[] {\n const types = Array.from(this.layerFeaturesCache.keys()).filter((t) => t.endsWith(key))\n if (!types.length) return []\n return types.flatMap((type) => {\n const features = this.layerFeaturesCache.get(type)\n return features ?? []\n })\n }\n\n /**\n * 根据要素编码获取要素 feature\n * @param circuitCodes 电路区段要素 codes\n * @returns 电路区段要素\n */\n public getTrackCircuitFeaturesByCodes(circuitCodes: string[]): maplibregl.GeoJSONFeature[] {\n const types = Array.from(this.layerFeaturesCache.keys()).filter((t) => t.endsWith('track_circuit'))\n if (!types.length) return []\n return (\n types\n .flatMap((type) => {\n const features = this.layerFeaturesCache.get(type)\n return features ?? []\n })\n .filter((f) => circuitCodes.includes(f.properties.code as string)) ?? []\n )\n }\n\n /**\n * 根据要素编码获取要素 feature\n * @param code 要素 code\n * @param layerType 图层类型\n * @returns 要素 feature\n */\n public getGeojsonLayerFeaturesByCode(code: string, layerType: LayerType): maplibregl.GeoJSONFeature | undefined {\n const types = Array.from(this.layerFeaturesCache.keys()).filter((t) => t.endsWith(layerType))\n if (!types.length) return\n return types\n .flatMap((type) => {\n const features = this.layerFeaturesCache.get(type)\n return features ?? []\n })\n .find((f) => f.properties.code === code)\n }\n\n /**\n * 根据要素编码与图层类型将地图缩放至该要素位置。\n * 内部复用 getGeojsonLayerFeaturesByCode 获取要素后,通过 bbox + fitBounds 定位。\n * @param code - 要素 code\n * @param layerType - 图层类型\n */\n public locateFeatureByCode(code: string, layerType: LayerType): void {\n const feature = this.getGeojsonLayerFeaturesByCode(code, layerType)\n if (!feature) {\n console.warn(`未找到要素,无法定位: code=${code}, layerType=${layerType}`)\n return\n }\n const featureCollection: GeoJSON.FeatureCollection = {\n type: 'FeatureCollection',\n features: [feature]\n }\n this.locateGeojsonFeature(featureCollection, false)\n }\n\n /**\n * 要素平滑闪烁高亮。\n * 在指定 source 上添加临时图层,通过正弦动画实现周期性显隐效果,动画结束后自动清理。\n * - featureType='line':添加 fill + line-outline 双图层,交替透明度与描边宽度\n * - featureType='point':添加 symbol 图层,通过 canvas 动态生成圆形图标,交替 icon-opacity\n * 返回清理函数,可用于提前终止动画并移除临时图层。\n * @param sourceId - 数据源 ID\n * @param featureFilter - 要素筛选条件(maplibre-gl filter 表达式)\n * @param featureType - 要素类型,'line' 使用填充+描边闪烁,'point' 使用图标闪烁\n * @param options - 动画参数(duration/blinkSpeed/baseColor/minAlpha/maxAlpha 等)\n * @returns 清理函数,调用后可提前终止闪烁并移除临时图层\n */\n public smoothBlinkFeature(\n code: string,\n layerType: LayerType,\n options: {\n /** 总动画时长(ms),默认 3000 */\n duration?: number\n /** 闪烁周期(ms),默认 500 */\n blinkSpeed?: number\n /** RGB 颜色三元组,默认 [0, 255, 0] */\n baseColor?: [number, number, number]\n /** 最小透明度,默认 0.3 */\n minAlpha?: number\n /** 最大透明度,默认 0.7 */\n maxAlpha?: number\n /** 描边基础宽度,默认 3 */\n strokeWidthBase?: number\n /** 描边宽度变化范围,默认 2 */\n strokeWidthRange?: number\n } = {}\n ) {\n // 根据 code 和 layerType 查找要素\n const feature = this.getGeojsonLayerFeaturesByCode(code, layerType)\n if (!feature) {\n console.warn(`未找到要素,无法高亮: code=${code}, layerType=${layerType}`)\n return\n }\n\n // 构建 FeatureCollection 作为临时数据源\n const featureCollection: GeoJSON.FeatureCollection = {\n type: 'FeatureCollection',\n features: [feature]\n }\n\n // 根据图层类型判断要素类型\n const pointTypes = ['signal', 'switch', 'bumper']\n const featureType: 'line' | 'point' = pointTypes.includes(layerType) ? 'point' : 'line'\n\n // 创建临时数据源\n const tempSourceId = `blink-temp-${code}-${layerType}`\n\n // 清除上一次的闪烁动画(如果存在),确保新要素能正常闪烁\n this._activeBlinkCleanup?.()\n this._activeBlinkCleanup = null\n\n // 移除旧的临时源(如果存在)\n if (this.map.getSource(tempSourceId)) {\n this.map.removeSource(tempSourceId)\n }\n\n this.map.addSource(tempSourceId, {\n type: 'geojson',\n data: featureCollection\n })\n\n const highlightLayerId = `${tempSourceId}-blink-highlight`\n\n const { duration = 3000, blinkSpeed = 500, baseColor = [0, 255, 0], minAlpha = 0.3, maxAlpha = 0.7, strokeWidthBase = 3, strokeWidthRange = 2 } = options\n\n let startTime: number | null = null\n let animationId: number | null = null\n\n if (featureType === 'point') {\n const iconId = `blink-point-icon-${tempSourceId}`\n // 通过 canvas 生成圆形图标\n if (!this.map.hasImage(iconId)) {\n const size = 36\n const canvas = document.createElement('canvas')\n canvas.width = size\n canvas.height = size\n const ctx = canvas.getContext('2d')\n // 外圈光晕\n ctx!.beginPath()\n ctx!.arc(size / 2, size / 2, size / 2 - 2, 0, Math.PI * 2)\n ctx!.fillStyle = `rgba(${baseColor.join(',')}, 0.3)`\n ctx!.fill()\n // 内圈实心\n ctx!.beginPath()\n ctx!.arc(size / 2, size / 2, size / 3, 0, Math.PI * 2)\n ctx!.fillStyle = `rgb(${baseColor.join(',')})`\n ctx!.fill()\n ctx!.strokeStyle = '#fff'\n ctx!.lineWidth = 2\n ctx!.stroke()\n const imageData = ctx!.getImageData(0, 0, size, size)\n this.map.addImage(iconId, { width: size, height: size, data: imageData.data })\n }\n\n // 先移除旧图层\n if (this.map.getLayer(highlightLayerId)) {\n this.map.removeLayer(highlightLayerId)\n }\n this.map.addLayer({\n id: highlightLayerId,\n type: 'symbol',\n source: tempSourceId,\n layout: {\n 'icon-image': iconId,\n 'icon-allow-overlap': true,\n 'icon-ignore-placement': true\n },\n paint: {\n 'icon-opacity': maxAlpha\n }\n })\n\n const animate = (timestamp: number) => {\n if (!startTime) startTime = timestamp\n const elapsed = timestamp - startTime\n if (elapsed < duration) {\n const blinkState = Math.sin((elapsed / blinkSpeed) * Math.PI * 2) * 0.5 + 0.5\n const alpha = minAlpha + (maxAlpha - minAlpha) * blinkState\n this.map.setPaintProperty(highlightLayerId, 'icon-opacity', alpha)\n animationId = requestAnimationFrame(animate)\n } else {\n if (this.map.getLayer(highlightLayerId)) this.map.removeLayer(highlightLayerId)\n if (this.map.getSource(tempSourceId)) this.map.removeSource(tempSourceId)\n animationId = null\n this._activeBlinkCleanup = null\n }\n }\n animationId = requestAnimationFrame(animate)\n const cleanup = () => {\n if (animationId) cancelAnimationFrame(animationId)\n if (this.map.getLayer(highlightLayerId)) this.map.removeLayer(highlightLayerId)\n if (this.map.getSource(tempSourceId)) this.map.removeSource(tempSourceId)\n }\n this._activeBlinkCleanup = cleanup\n return cleanup\n }\n\n // line 类型:添加描边图层\n const outlineLayerId = `${highlightLayerId}-outline`\n if (this.map.getLayer(outlineLayerId)) {\n this.map.removeLayer(outlineLayerId)\n }\n this.map.addLayer({\n id: outlineLayerId,\n type: 'line',\n source: tempSourceId,\n paint: {\n 'line-color': `rgb(${baseColor.join(',')})`,\n 'line-width': strokeWidthBase\n }\n })\n\n const animate = (timestamp: number) => {\n if (!startTime) startTime = timestamp\n const elapsed = timestamp - startTime\n if (elapsed < duration) {\n const blinkState = Math.sin((elapsed / blinkSpeed) * Math.PI * 2) * 0.5 + 0.5\n const _alpha = minAlpha + (maxAlpha - minAlpha) * blinkState\n const width = strokeWidthBase + strokeWidthRange * blinkState\n this.map.setPaintProperty(outlineLayerId, 'line-width', width)\n animationId = requestAnimationFrame(animate)\n } else {\n // 动画结束后移除临时图层和临时源\n if (this.map.getLayer(outlineLayerId)) this.map.removeLayer(outlineLayerId)\n if (this.map.getSource(tempSourceId)) this.map.removeSource(tempSourceId)\n animationId = null\n this._activeBlinkCleanup = null\n }\n }\n animationId = requestAnimationFrame(animate)\n const cleanup = () => {\n if (animationId) cancelAnimationFrame(animationId)\n if (this.map.getLayer(outlineLayerId)) this.map.removeLayer(outlineLayerId)\n if (this.map.getSource(tempSourceId)) this.map.removeSource(tempSourceId)\n }\n this._activeBlinkCleanup = cleanup\n return cleanup\n }\n}\n\nexport default TeeeMap\n","export { createIronShoesCanvas, createFastenerCanvas, createManualBrakingCanvas } from './antiRunning'\n\nexport { createSignalCanvas, createBumperCanvas, createOverLimitCanvas } from './baseFeature'\n\nexport { createCatenaryEndCanvas } from './catenaryEnd'\n\nexport { createAutoDerailingStopCanvas, createDerailingStopCanvas } from './derailingStop'\n\nexport { createTrackDoorCanvas } from './door'\n\nexport { createJflcLocomotiveImg, createUnknowJflcLocomotiveImg, createLocomotiveImg } from './locomotive'\n","/** * 生成铁鞋的canvas\n * @param width 铁鞋宽度\n * @param height 铁鞋高度\n * @param direction 铁鞋方向 right/left\n * @param color 颜色\n * @returns\n */\nconst createIronShoesCanvas = (direction: string, color: string) => {\n const width = 48\n const height = 48\n const canvas = document.createElement('canvas')\n canvas.width = width\n canvas.height = height\n\n const ctx = canvas.getContext('2d')\n if (!ctx) return canvas\n ctx.lineWidth = 6\n ctx.strokeStyle = color\n if (direction === 'right') {\n // 左三角\n ctx.beginPath()\n ctx.moveTo(0, height)\n ctx.lineTo(width, height)\n ctx.lineTo(width, 0)\n ctx.lineTo(0, height)\n ctx.fillStyle = color\n ctx.stroke()\n ctx.closePath()\n } else {\n // 右三角\n ctx.beginPath()\n ctx.moveTo(0, 0)\n ctx.lineTo(0, height)\n ctx.lineTo(width, height)\n ctx.lineTo(0, 0)\n ctx.fillStyle = color\n ctx.stroke()\n ctx.closePath()\n }\n return canvas\n}\n\n/**\n * 人力制动器 26*26 圆形底座加叉 手闸\n * @param color\n * @returns\n */\nconst createManualBrakingCanvas = (color: string) => {\n const width = 36\n const height = 36\n const lineWidth = 4\n const canvas = document.createElement('canvas')\n canvas.width = width\n canvas.height = height\n const ctx = canvas.getContext('2d')\n if (!ctx) return canvas\n ctx.lineWidth = lineWidth\n ctx.strokeStyle = color //'rgb(18, 200, 18)';\n ctx.beginPath()\n ctx.arc(0.5 * width, 0.5 * height, 0.3 * width, 0, 2 * Math.PI, false)\n ctx.stroke()\n ctx.beginPath()\n ctx.lineTo(0.3 * width, 0.3 * height)\n ctx.lineTo(0.7 * width, 0.7 * height)\n ctx.stroke()\n ctx.moveTo(0.3 * width, 0.7 * height)\n ctx.lineTo(0.7 * width, 0.3 * height)\n ctx.stroke()\n ctx.closePath()\n return canvas\n}\n\n/**\n * 紧固器符号\n * @param color 颜色\n * @param text 名称,也可以设置在外style\n * @returns\n */\nconst createFastenerCanvas = (color: string, text?: string) => {\n const width = 50\n const height = 56\n\n const lineWidth = 6\n const canvas = document.createElement('canvas')\n canvas.width = width\n canvas.height = height\n\n const ctx = canvas.getContext('2d')\n if (!ctx) return canvas\n ctx.lineWidth = lineWidth\n ctx.strokeStyle = color\n ctx.fillStyle = color\n ctx.textAlign = 'center'\n\n const sign = '$' // type === 2 ? '$' : '‖';\n\n // 计算文字中心点\n // 0.55为数字字体占宽像素比例\n const signX = 0.5 * width - 0.5 * 0.55 * 16 * sign.length\n ctx.font = 18 + 'px Arial,sans-serif'\n ctx.beginPath()\n ctx.fillText(sign, signX, 0.4 * height)\n ctx.stroke()\n\n if (text) {\n const textX = 0.5 * width + 0.5 * 0.55 * 10 * text.length\n ctx.font = 16 + 'px Calibri,sans-serif'\n\n ctx.beginPath()\n ctx.fillText(text, textX, 0.4 * height)\n ctx.stroke()\n }\n\n ctx.closePath()\n return canvas\n}\n\nexport { createIronShoesCanvas, createFastenerCanvas, createManualBrakingCanvas }\n","/**\n * 站场地图基础颜色定义\n */\nconst MapColor = {\n BASE_COLOR: 'rgb(85,120,182)',\n BG_COLOR: 'rgb(0,0,0)'\n} as const\n\nexport { MapColor }\n","import { MapColor } from '@/constants/mapColor'\n\n/**\n * 生成信号机的canvas\n * @param stype 1=高柱 2=矮柱\n * @param color 状态颜色\n * @param positionSide 左右手 1=左手 2=右手\n * @returns\n */\nconst createSignalCanvas = (stype: number, color: string, positionSide: number) => {\n const rate = 4 // 放大比例\n\n // 圆\n const circleRadius = 5 * rate\n const circleStroke = 1 * rate // 圆的宽度\n //立柱\n const pillarHeight = 10 * rate // 立柱的高度\n const pillarStroke = 1 * rate // 立柱的宽度\n // 悬挂杆\n const suspendLength = 5 * rate // 高柱悬挂杆长度\n const suspendStroke = 1 * rate // 高柱悬挂杆宽度\n //底座\n const pedestalHeight = 6 * rate // 底座的高度\n const pedestalWidth = 2 * rate // 底座的宽度\n // 计算canvas的长宽\n const sizeH = pedestalHeight + pillarHeight\n const sizeW = pedestalWidth / 2 + pillarStroke / 2 + suspendLength + circleRadius * 2\n const canvas = document.createElement('canvas') // 创建一个canvas标签\n canvas.width = sizeW\n canvas.height = sizeH\n const context = canvas.getContext('2d')\n if (!context) return canvas\n\n context.clearRect(0, 0, canvas.width, canvas.height)\n // 1=高柱\n if (positionSide === 2) {\n context.translate(sizeW, 0)\n context.scale(-1, 1) // 左右镜像翻转\n }\n if (stype === 1) {\n // 圆\n context.beginPath()\n context.arc(pedestalWidth / 2 + pillarStroke / 2 + suspendLength + circleRadius, circleRadius, circleRadius - circleStroke / 2, 0, Math.PI * 2)\n context.fillStyle = color || 'rgb(255,255,255,0)'\n context.strokeStyle = color || MapColor.BASE_COLOR\n context.lineWidth = circleStroke\n context.fill()\n context.stroke()\n\n // 悬挂杆\n context.beginPath()\n context.moveTo(pedestalWidth / 2 + pillarStroke / 2, pillarHeight / 2)\n context.lineTo(pedestalWidth / 2 + pillarStroke / 2 + suspendLength, pillarHeight / 2)\n context.lineWidth = suspendStroke\n context.strokeStyle = MapColor.BASE_COLOR\n context.stroke()\n\n // 立柱\n context.beginPath()\n context.lineCap = 'round'\n context.moveTo(pedestalWidth / 2, 0)\n context.lineTo(pedestalWidth / 2, pillarHeight)\n context.lineWidth = pillarStroke\n context.strokeStyle = MapColor.BASE_COLOR\n context.stroke()\n\n // 底座\n context.beginPath()\n context.moveTo(pedestalWidth / 2, pillarHeight)\n context.lineTo(pedestalWidth / 2, pillarHeight + pedestalHeight)\n context.lineWidth = pedestalWidth\n context.strokeStyle = MapColor.BASE_COLOR\n context.stroke()\n return canvas\n } else {\n // 圆\n context.beginPath()\n context.arc(pedestalWidth / 2 + pillarStroke / 2 + circleRadius, circleRadius, circleRadius - circleStroke / 2, 0, Math.PI * 2)\n context.fillStyle = color || 'rgb(255,255,255,0)'\n context.strokeStyle = color || MapColor.BASE_COLOR\n context.lineWidth = circleStroke\n context.fill()\n context.stroke()\n // 立柱\n context.beginPath()\n context.lineCap = 'round'\n context.moveTo(pedestalWidth / 2, 0)\n context.lineTo(pedestalWidth / 2, pillarHeight)\n context.lineWidth = pillarStroke\n context.strokeStyle = MapColor.BASE_COLOR\n context.stroke()\n\n // 底座\n context.beginPath()\n context.moveTo(pedestalWidth / 2, pillarHeight)\n context.lineTo(pedestalWidth / 2, pillarHeight + pedestalHeight)\n context.lineWidth = pedestalWidth\n context.strokeStyle = MapColor.BASE_COLOR\n context.stroke()\n return canvas\n }\n}\n\n/**\n * 创建土档canvas\n * @returns\n */\nconst createBumperCanvas = () => {\n const sizeW = 15\n const sizeH = 40\n const lineWidth = 4\n const canvas = document.createElement('canvas') // 创建一个canvas标签\n canvas.width = sizeW\n canvas.height = sizeH\n const context = canvas.getContext('2d')\n if (!context) return canvas\n\n context.clearRect(0, 0, canvas.width, canvas.height)\n context.beginPath()\n context.moveTo(0, lineWidth / 2)\n context.lineTo(sizeW - lineWidth / 2, lineWidth / 2)\n // shu\n context.moveTo(lineWidth / 2, lineWidth / 2)\n context.lineTo(lineWidth / 2, sizeH - lineWidth)\n //\n context.moveTo(0, sizeH - lineWidth)\n context.lineTo(sizeW - lineWidth / 2, sizeH - lineWidth)\n context.lineWidth = lineWidth\n context.strokeStyle = MapColor.BASE_COLOR\n context.stroke()\n return canvas\n}\n\nconst createOverLimitCanvas = () => {\n const canvas = document.createElement('canvas')\n\n const ctx = canvas.getContext('2d')\n if (!ctx) return canvas\n const sizeW = 40\n const sizeH = 40\n const lineWidth = 4\n const crossWidth = 4\n canvas.width = sizeW\n canvas.height = sizeH\n const centerX = sizeW / 2 // 圆心 X 坐标\n const centerY = sizeW / 2 // 圆心 Y 坐标\n const radius = sizeW / 2 - lineWidth / 2 // 圆的半径\n\n // const halfCross = crossWidth / 2;\n\n const innerLimit = radius - lineWidth * 2 // 十字线的内侧限制,确保不会超出圆环\n\n ctx.beginPath()\n\n // 设置十字的样式\n ctx.strokeStyle = '#ffffff'\n ctx.lineWidth = crossWidth\n ctx.lineCap = 'square'\n ctx.moveTo(centerX, centerY - innerLimit)\n ctx.lineTo(centerX, centerY + innerLimit)\n\n ctx.stroke()\n ctx.beginPath()\n ctx.arc(centerX, centerY, radius, 0, Math.PI * 2, false)\n\n // 设置线条颜色和宽度\n ctx.strokeStyle = 'red' // 圆环颜色\n ctx.lineWidth = lineWidth\n ctx.stroke() // 执行描边\n\n return canvas\n}\nexport { createSignalCanvas, createBumperCanvas, createOverLimitCanvas }\n","import { MapColor } from '@/constants/mapColor'\n\n/**\n * 创建接触网终点的canvas\n * @returns\n */\nconst createCatenaryEndCanvas = () => {\n const sizeW = 24\n const sizeH = 64\n const lineWidth = 8\n const canvas = document.createElement('canvas') // 创建一个canvas标签\n canvas.width = sizeW\n canvas.height = sizeH\n const context = canvas.getContext('2d')\n if (!context) return canvas\n // 设置填充颜色为黑色\n context.fillStyle = MapColor.BG_COLOR\n\n // 绘制并填充矩形\n context.fillRect(0, 0, sizeW, sizeH) // x, y, width, height\n\n // 设置边框颜色为红色及边框宽度\n context.strokeStyle = MapColor.BASE_COLOR\n context.lineWidth = lineWidth\n\n // 绘制矩形边框\n context.strokeRect(0, 0, sizeW, sizeH) // x, y, width, height\n return canvas\n}\n\nexport { createCatenaryEndCanvas }\n","import { MapColor } from '@/constants/mapColor'\n\n/**\n * 创建脱轨器canvas\n * @returns\n */\nconst createDerailingStopCanvas = () => {\n const sizeW = 60\n const sizeH = 40\n const lineWidth = 4\n const tH = 2 / 4\n const canvas = document.createElement('canvas') // 创建一个canvas标签\n canvas.width = sizeW\n canvas.height = sizeH\n const context = canvas.getContext('2d')\n if (!context) return canvas\n\n context.clearRect(0, 0, canvas.width, canvas.height)\n context.moveTo(sizeW / 2, 0) // 三角形顶点\n context.lineTo(0, sizeH) // 三角形左下角\n context.moveTo(sizeW / 2, 0) // 三角形顶点\n context.lineTo(sizeW, sizeH) // 三角形右下角\n context.lineWidth = lineWidth\n context.moveTo(sizeW / 2, sizeH * tH)\n context.lineTo(sizeW / 2, sizeH) // 11\n context.moveTo(sizeW / 2 - 10, sizeH * tH) // 11\n context.lineTo(sizeW / 2 + 10, sizeH * tH) // 22\n context.strokeStyle = MapColor.BASE_COLOR\n context.moveTo(0, sizeH) // 三角形左下角\n context.lineTo(sizeW, sizeH) // 三角形右下角\n context.closePath()\n context.stroke()\n return canvas\n}\n/**\n * 创建自动脱轨器canvas\n * @param dir 方向 1:左侧(成都) 2:右侧(重庆)\n * @returns\n */\nconst createAutoDerailingStopCanvas = (dir: number) => {\n const sizeW = 40\n const sizeH = 60\n const lineWidth = 4\n const tH = 1 / 3\n const tirangleH = 8\n const canvas = document.createElement('canvas') // 创建一个canvas标签\n canvas.width = sizeW\n canvas.height = sizeH\n const context = canvas.getContext('2d')\n if (!context) return canvas\n context.clearRect(0, 0, canvas.width, canvas.height)\n context.beginPath()\n context.moveTo(0, 0) // 正方形左上角\n context.lineTo(0, sizeH * tH)\n context.lineTo(sizeW, sizeH * tH)\n context.lineTo(sizeW, 0)\n context.closePath()\n context.lineWidth = lineWidth\n context.strokeStyle = MapColor.BASE_COLOR\n context.fillStyle = 'rgb(255,0,0)'\n context.fill()\n context.stroke()\n // 竖线\n context.beginPath()\n context.moveTo(sizeW / 2, sizeH * tH)\n context.lineTo(sizeW / 2, sizeH) // 11\n context.lineWidth = lineWidth\n context.strokeStyle = MapColor.BASE_COLOR\n context.stroke()\n context.closePath()\n // 底部三角形 1:左侧(成都) 3:右侧(重庆)\n if (dir === 1) {\n context.beginPath()\n context.moveTo(sizeW / 2, sizeH - tirangleH)\n context.lineTo(sizeW / 2, sizeH) // 11\n context.lineTo(0, sizeH) // 22\n context.lineTo(sizeW / 2, sizeH - tirangleH) // 22\n context.strokeStyle = MapColor.BASE_COLOR\n context.fillStyle = MapColor.BASE_COLOR\n context.fill()\n context.stroke()\n context.closePath()\n } else {\n context.beginPath()\n context.moveTo(sizeW / 2, sizeH - tirangleH)\n context.lineTo(sizeW / 2, sizeH) // 11\n context.lineTo(sizeW, sizeH) // 22\n context.lineTo(sizeW / 2, sizeH - tirangleH) // 22\n context.strokeStyle = MapColor.BASE_COLOR\n context.fillStyle = MapColor.BASE_COLOR\n context.fill()\n context.stroke()\n context.closePath()\n }\n\n return canvas\n}\n\nexport { createAutoDerailingStopCanvas, createDerailingStopCanvas }\n","import { MapColor } from '@/constants/mapColor'\n\n/**\n * 创建大门的canvas图标,外部显示时要考虑与股道的垂直角度\n * @param stateColor 状态颜色\n * @returns\n */\nconst createTrackDoorCanvas = (stateColor: string) => {\n const canvas = document.createElement('canvas') // 创建一个canvas标签\n const rate = 1\n const rectLength = 20 * rate\n const lineLength = 32 * rate\n const width = 2 * rate\n canvas.width = rectLength + rectLength + lineLength + width * 2\n canvas.height = rectLength + width\n const context = canvas.getContext('2d')\n if (!context) {\n throw new Error('Canvas 2D context is not available')\n }\n context.fillStyle = stateColor\n context.fillRect(width / 2, width / 2, rectLength, rectLength)\n context.strokeStyle = MapColor.BASE_COLOR\n context.lineWidth = width\n context.strokeRect(width / 2, width / 2, rectLength, rectLength)\n\n context.lineWidth = width\n context.strokeStyle = MapColor.BASE_COLOR\n context.moveTo(rectLength + width, rectLength / 2 + width / 2) // 横线\n context.lineTo(rectLength + lineLength, rectLength / 2 + width / 2)\n\n context.stroke()\n context.lineWidth = width\n context.fillStyle = stateColor\n context.fillRect(rectLength + lineLength, width / 2, rectLength, rectLength)\n context.strokeStyle = MapColor.BASE_COLOR\n context.strokeRect(rectLength + lineLength, width / 2, rectLength, rectLength)\n return canvas\n}\n\nexport { createTrackDoorCanvas }\n","/**\n * 生成机车图标\n * @type {[type]}\n */\nconst createLocomotiveImg = (opt_options?: Record<string, unknown>, deltaX?: number) => {\n const options = opt_options ?? {}\n // 车头标签文字\n const headText = (options.headText as string) || ''\n const headWidth = headText.length < 5 ? 5 * 10 : headText.length * 10\n // 车头标签背景色\n const headColor = (options.headColor as string) || '#ffffff'\n // 车头文字颜色\n const headTextColor = (options.headTextColor as string) || '#3385ff'\n // 车尾文字 如果没有文字 用空格占位宽度\n const rearText = (options.rearText as string) || ' '\n const rearWidth = rearText.length * 10\n // 车尾标签背景颜色\n const rearColor = (options.rearColor as string) || '#3385ff'\n // 车尾文字颜色\n const rearTextColor = (options.rearTextColor as string) || '#ffffff'\n const canvasHeight = (options.canvasHeight as number) || 15\n\n const marker = document.createElement('canvas')\n\n marker.width = headWidth + rearWidth\n marker.height = canvasHeight\n const ctx = marker.getContext('2d')\n if (!ctx) return marker\n\n if (deltaX && deltaX > 0) {\n // 先画车尾\n ctx.beginPath()\n ctx.fillStyle = rearColor\n ctx.moveTo(0, 0)\n ctx.lineTo(rearWidth, 0)\n ctx.lineTo(rearWidth, canvasHeight)\n ctx.lineTo(0, canvasHeight)\n ctx.lineTo(0, 0)\n ctx.fill()\n ctx.closePath()\n ctx.fillStyle = rearTextColor\n ctx.font = '12px SimSun bold'\n ctx.fillText(rearText, 1, 12)\n // 车头\n ctx.beginPath()\n ctx.fillStyle = headColor\n ctx.moveTo(rearWidth, 0)\n ctx.lineTo(headWidth + rearWidth - canvasHeight * 0.5 * Math.tan((30 * Math.PI) / 180), 0)\n ctx.lineTo(marker.width, canvasHeight * 0.5)\n ctx.lineTo(headWidth + rearWidth - canvasHeight * 0.5 * Math.tan((30 * Math.PI) / 180), canvasHeight)\n ctx.lineTo(rearWidth, canvasHeight)\n ctx.lineTo(rearWidth, 0)\n ctx.fill()\n ctx.closePath()\n ctx.fillStyle = headTextColor // 车号文字颜色\n ctx.font = '15px SimSun bold'\n ctx.fillText(headText, rearWidth + 1, 13)\n } else {\n // 先画车头\n ctx.beginPath()\n ctx.fillStyle = headColor\n ctx.moveTo(0, canvasHeight * 0.5)\n ctx.lineTo(canvasHeight * 0.5 * Math.tan((30 * Math.PI) / 180), 0)\n ctx.lineTo(headWidth, 0)\n ctx.lineTo(headWidth, canvasHeight)\n ctx.lineTo(canvasHeight * 0.5 * Math.tan((30 * Math.PI) / 180), canvasHeight)\n ctx.lineTo(0, canvasHeight * 0.5)\n ctx.fill()\n ctx.closePath()\n // ctx.fillStyle = 'white' || headTextColor // 车号文字颜色\n ctx.fillStyle = headTextColor // 车号文字颜色\n ctx.font = '15px SimSun bold'\n ctx.fillText(headText, canvasHeight * 0.5 * Math.tan((30 * Math.PI) / 180) + 1, 13)\n // 车尾\n ctx.beginPath()\n ctx.fillStyle = rearColor\n ctx.moveTo(headWidth, 0)\n ctx.lineTo(headWidth + rearWidth, 0)\n ctx.lineTo(headWidth + rearWidth, canvasHeight)\n ctx.lineTo(headWidth, canvasHeight)\n ctx.lineTo(headWidth, 0)\n ctx.fill()\n ctx.closePath()\n ctx.fillStyle = rearTextColor\n ctx.font = '12px SimSun bold'\n ctx.fillText(rearText, headWidth + 1, 12)\n }\n return marker\n}\n\n/**\n * 生成虚拟本务机图标\n * @type {[type]}\n */\nconst createJflcLocomotiveImg = (opt_options?: Record<string, unknown>, rotate?: boolean) => {\n const options = opt_options ?? {}\n // 车头标签文字\n const headText = (options.headText as string) || ''\n const headWidth = headText.length < 5 ? 5 * 10 : headText.length * 10\n // 车头标签背景色\n const headColor = (options.headColor as string) || '#ffffff'\n // 车头文字颜色\n const headTextColor = (options.headTextColor as string) || '#3385ff'\n // 车尾文字 如果没有文字 用空格占位宽度\n const rearText = (options.rearText as string) || ' '\n const rearWidth = rearText.length * 10\n // 车尾标签背景颜色\n const rearColor = 'purple'\n // 车尾文字颜色\n const rearTextColor = (options.rearTextColor as string) || '#ffffff'\n const canvasHeight = (options.canvasHeight as number) || 15\n\n const marker = document.createElement('canvas')\n\n marker.width = headWidth + rearWidth\n marker.height = canvasHeight\n const ctx = marker.getContext('2d')\n if (!ctx) return marker\n\n if (!rotate) {\n // 先画车尾\n ctx.beginPath()\n ctx.fillStyle = rearColor\n ctx.moveTo(0, 0)\n ctx.lineTo(rearWidth, 0)\n ctx.lineTo(rearWidth, canvasHeight)\n ctx.lineTo(0, canvasHeight)\n ctx.lineTo(0, 0)\n ctx.fill()\n ctx.closePath()\n ctx.fillStyle = rearTextColor\n ctx.font = '12px SimSun bold'\n ctx.fillText(rearText, 1, 12)\n // 车头\n ctx.beginPath()\n ctx.fillStyle = headColor\n ctx.moveTo(rearWidth, 0)\n ctx.lineTo(headWidth + rearWidth - canvasHeight * 0.5 * Math.tan((30 * Math.PI) / 180), 0)\n ctx.lineTo(marker.width, canvasHeight * 0.5)\n ctx.lineTo(headWidth + rearWidth - canvasHeight * 0.5 * Math.tan((30 * Math.PI) / 180), canvasHeight)\n ctx.lineTo(rearWidth, canvasHeight)\n ctx.lineTo(rearWidth, 0)\n ctx.fill()\n ctx.closePath()\n ctx.fillStyle = headTextColor // 车号文字颜色\n ctx.font = '15px SimSun bold'\n ctx.fillText(headText, rearWidth + 1, 13)\n } else {\n // 先画车头\n ctx.beginPath()\n ctx.fillStyle = headColor\n ctx.moveTo(0, canvasHeight * 0.5)\n ctx.lineTo(canvasHeight * 0.5 * Math.tan((30 * Math.PI) / 180), 0)\n ctx.lineTo(headWidth, 0)\n ctx.lineTo(headWidth, canvasHeight)\n ctx.lineTo(canvasHeight * 0.5 * Math.tan((30 * Math.PI) / 180), canvasHeight)\n ctx.lineTo(0, canvasHeight * 0.5)\n ctx.fill()\n ctx.closePath()\n // ctx.fillStyle = 'white' || headTextColor // 车号文字颜色\n ctx.fillStyle = headTextColor // 车号文字颜色\n ctx.font = '15px SimSun bold'\n ctx.fillText(headText, canvasHeight * 0.5 * Math.tan((30 * Math.PI) / 180) + 1, 13)\n // 车尾\n ctx.beginPath()\n ctx.fillStyle = rearColor\n ctx.moveTo(headWidth, 0)\n ctx.lineTo(headWidth + rearWidth, 0)\n ctx.lineTo(headWidth + rearWidth, canvasHeight)\n ctx.lineTo(headWidth, canvasHeight)\n ctx.lineTo(headWidth, 0)\n ctx.fill()\n ctx.closePath()\n ctx.fillStyle = rearTextColor\n ctx.font = '12px SimSun bold'\n ctx.fillText(rearText, headWidth + 1, 12)\n }\n return marker\n}\n\n/**\n * 创建未知方向的虚拟机车\n * @param opt_options\n * @returns\n */\nconst createUnknowJflcLocomotiveImg = (opt_options?: Record<string, unknown>) => {\n const options = opt_options ?? {}\n // 车头标签文字\n const headText = (options.headText as string) || ''\n const headWidth = headText.length < 5 ? 5 * 10 : headText.length * 10\n // 车尾文字 如果没有文字 用空格占位宽度\n const rearText = (options.rearText as string) || ' '\n const rearWidth = rearText.length * 5\n // 车尾标签背景颜色\n const rearColor = 'purple'\n const canvasHeight = (options.canvasHeight as number) || 15\n\n const marker = document.createElement('canvas')\n\n marker.width = headWidth + rearWidth\n marker.height = canvasHeight\n const ctx = marker.getContext('2d')\n if (!ctx) return marker\n\n // 先画车尾\n ctx.beginPath()\n ctx.fillStyle = rearColor\n // ctx.moveTo(0, 0);\n // ctx.lineTo(rearWidth, 0);\n // ctx.lineTo(rearWidth, canvasHeight);\n // ctx.lineTo(0, canvasHeight);\n // ctx.lineTo(0, 0);\n ctx.moveTo(0, canvasHeight / 2)\n ctx.lineTo(rearWidth, canvasHeight)\n ctx.lineTo(rearWidth, 0)\n ctx.moveTo(0, canvasHeight / 2)\n ctx.fill()\n ctx.closePath()\n ctx.fillStyle = rearColor\n ctx.font = '12px SimSun bold'\n ctx.fillText(rearText, 1, 12)\n // 车身\n ctx.beginPath()\n ctx.fillStyle = rearColor\n ctx.moveTo(rearWidth, 0)\n ctx.lineTo(headWidth + rearWidth - canvasHeight * 0.5 * Math.tan((30 * Math.PI) / 180), 0)\n ctx.lineTo(marker.width, canvasHeight * 0.5)\n ctx.lineTo(headWidth + rearWidth - canvasHeight * 0.5 * Math.tan((30 * Math.PI) / 180), canvasHeight)\n ctx.lineTo(rearWidth, canvasHeight)\n ctx.lineTo(rearWidth, 0)\n ctx.fill()\n ctx.closePath()\n ctx.fillStyle = 'white' // 车号文字颜色\n ctx.font = '15px SimSun bold'\n ctx.fillText(headText, rearWidth + 1, 13)\n return marker\n}\n\nexport { createJflcLocomotiveImg, createUnknowJflcLocomotiveImg, createLocomotiveImg }\n","import type { IconType } from '@/types'\n\nimport { INTERLOCK_SIGNAL_MAP } from '@/constants'\nimport { createSignalIcon, createJcwIcon, createBumperIcon, createDoorIcon, createDerailingStopIcon, createOverLimitIcon } from './canvasToImg'\n\nconst createAllIcons = async (): Promise<IconType[]> => {\n const [signalIconHR, signalIconHL, signalIconLR, signalIconLL] = await Promise.all([\n createSignalIcon('h', 'r', ''),\n createSignalIcon('h', 'l', ''),\n createSignalIcon('l', 'r', ''),\n createSignalIcon('l', 'l', '')\n ])\n\n // 土挡\n const bumperImg = await createBumperIcon()\n // 接触网 canvas\n const cjwIcon = await createJcwIcon()\n // 大门\n const doorIcon = await createDoorIcon()\n // 脱轨器\n const stopIcon = await createDerailingStopIcon()\n\n const types = ['h', 'l'] as const\n const dirs = ['r', 'l'] as const\n const graphSignalColors = Object.values(INTERLOCK_SIGNAL_MAP).filter((item) => item !== null)\n const graphSignalVariants = types.flatMap((h) => dirs.flatMap((d) => graphSignalColors.map((c) => ({ height: h, dir: d, color: c === '#99FF33' ? 'green' : c }))))\n const allGraphSignals = await Promise.all(graphSignalVariants.map(({ height, dir, color }) => createSignalIcon(height, dir, color === 'green' ? '#99FF33' : color)))\n\n // 将生成的图片和 ID 组装返回\n return [\n /* 信号机 */\n { id: 'icon-signal-h-r', image: signalIconHR },\n { id: 'icon-signal-h-l', image: signalIconHL },\n { id: 'icon-signal-l-r', image: signalIconLR },\n { id: 'icon-signal-l-l', image: signalIconLL },\n /* 土档 */\n { id: 'icon-bumper', image: bumperImg },\n /* 接触网终点 */\n { id: 'icon-jcw', image: cjwIcon },\n /* 大门 */\n { id: 'icon-door', image: doorIcon },\n /* 脱轨器 */\n { id: 'icon-stop', image: stopIcon },\n // Graph 图层信号机\n ...allGraphSignals\n .map((img, index) => {\n const v = graphSignalVariants[index]\n if (v)\n return {\n id: `icon-signal-${v.height}-${v.dir}-${v.color}`,\n image: img\n }\n })\n .filter((item): item is IconType => !!item)\n ]\n}\n\nexport { createAllIcons, createSignalIcon, createJcwIcon, createBumperIcon, createDoorIcon, createDerailingStopIcon, createOverLimitIcon }\n","/**\n * 站场要素代码定义\n * 是地图数据库内部定义,与防控类型不完全相同,且存在部分独有的类型定义如display图层相关的仅显示要素\n */\nenum StationFeatureCodeEnums {\n /**\n * 股道\n */\n TRACK = 1,\n /**\n * 道岔\n */\n SWITCH = 2,\n /**\n * 信号机\n */\n SIGNAL = 3,\n /**\n * 土挡\n */\n BUMPER = 4,\n /**\n * 警冲标\n */\n FOULINGPOST = 5,\n /**\n * 接触网终点\n */\n CONTACTLINEEND = 6,\n /**\n * 道口\n */\n RAILWAYCROSS = 7,\n /**\n * 道岔连接部件\n */\n SWITCHCONNECTINGCOMPONENTS = 11,\n /**\n * 轨道电路区段\n */\n TRACKCIRCUIT = 12,\n /**\n * 区间股道元素\n */\n Intervaltrackelements = 20,\n /**\n * 区间股道\n */\n Intervaltrack = 21,\n /**\n * 桥梁\n */\n BRIDGE = 22,\n /**\n * 隧道\n */\n TUNNEL = 29,\n /**\n * 出库点\n */\n OUTBOUND = 34,\n /**\n * 隔离开关\n */\n ISOLATE = 35,\n /**\n * 存车股道\n */\n PARKTRACK = 36,\n /**\n * 按钮\n */\n BUTTON = 37,\n /**\n * 预告无网区\n */\n PREVIEWNOWIRE = 42,\n /**\n * 脱轨器(上脱)\n */\n TGQ_UP = 47,\n /**\n * 脱轨器(下脱)\n */\n TGQ_DOWN = 48,\n /**\n * 无电(通过隔离开关或手动选择线段)\n */\n NOELECTRICITY = 49,\n /**\n * 站界\n */\n STATIONBOUND = 51,\n /**\n * 绝缘节\n */\n INSULATION = 52,\n /**\n * 脱轨器\n */\n DERAILING_STOP = 53,\n /**\n * 接触网禁停区\n */\n CONTACTLINENOPARK = 54,\n /**\n * 一度停车\n */\n ONCESTOP = 55,\n /**\n * 限速区段\n */\n SPEEDLIMIT = 56,\n /**\n * 接触网分相区\n */\n CONTACTLINEPSS = 57,\n /**\n * 无网区\n */\n CONTACTLINENOAREA = 58,\n /**\n * 其他不控车防控点\n */\n NOCONTROLPOINT = 59,\n /**\n * 高站台\n */\n HIGHPLATFORM = 60,\n // /**\n // * 其他控车类防控点\n // */\n // CONTROLCONTROLPOINT = 61,\n /**\n * 标注:方形按钮\n */\n MARK_SQUAREBTN = 62,\n /**\n * 标注:箭头\n */\n MARK_ARROW = 63,\n /**\n * 标注:小矩形框\n */\n MARK_RECT = 64,\n /**\n * 高站台平面图展示辅助线\n */\n HIGHPLATFORMLINE = 65,\n /**\n * 驼峰溜放标志\n */\n HUMPSLIP = 66,\n /**\n * 通道门\n */\n CHANNELDOOR = 67,\n /**\n * 天窗区域\n */\n SKYLIGHTAREA = 68,\n /**\n * 行走线\n */\n WALKWAY = 69,\n /**\n * 肩章动态范围\n */\n SHOULDERDYNAMIC = 70,\n /**\n * 水阻台\n */\n WATERBRAKE = 71,\n /**\n * 内燃机车库\n */\n DIESELDEPOT = 72,\n /**\n * 小辅修库\n */\n AUXREPAIRDEPOT = 73,\n /**\n * 镟轮库\n */\n WHEELLATHEDEPOT = 74,\n /**\n * 启机棚\n */\n STARTSHED = 75,\n /**\n * 中修库\n */\n OVERHAULDEPOT = 76,\n /**\n * 台位\n */\n BERTH = 77,\n /**\n * 图例\n */\n LEGEND = 78,\n /**\n * 肩章静态范围\n */\n SHOULDERSTATIC = 79,\n /**\n * 施工安全等待区\n */\n WORKWAITAREA = 80,\n /**\n * 墙/围栏\n */\n FENCE = 81,\n /**\n * 施工防护区域\n */\n WORKPROTECTAREA = 82,\n /**\n * 区间道口\n */\n INTERVALCROSS = 83,\n /**\n * 接触网杆\n */\n CONTACTLINEPOLE = 86,\n /**\n * 大门\n */\n DOOR = 87,\n /**\n * 遮挡物/雨棚\n */\n CANOPY = 88,\n /**\n * (区间)接触网分相\n */\n INTERVALCONTACTLINEPSS = 89,\n /**\n * 区间通话柱\n */\n INTERVALCALLPOLE = 90,\n /**\n * 曲线\n */\n CURVE = 91,\n /**\n * 防洪\n */\n FLOODCONTROL = 92,\n /**\n * (区间)信号机\n */\n INTERVALSIGNAL = 93,\n /**\n * 坡道\n */\n SLOPE = 94,\n /**\n * 区间断链点\n */\n INTERVALCHAINBREAK = 95,\n /**\n * 路网辅助点\n */\n ROADNETAUX = 96,\n /**\n * 标注\n */\n MARK = 97,\n /**\n * 辅助点\n */\n AUXPOINT = 98,\n /**\n * 逻辑点\n */\n LOGICPOINT = 99\n}\n\nexport { StationFeatureCodeEnums }\n","/**\n * 联锁信号机状态定义\n * 与服务器返回的联锁信号机状态保持一致\n */\nenum InterLockSignalStateEnums {\n /**\n * 红灯\n */\n RedLight = 1,\n /**\n * 绿灯\n */\n GreenLight = 2,\n /**\n * 白灯\n */\n WhiteLight = 3,\n /**\n * 蓝灯\n */\n BlueLight = 4,\n /**\n * 未知\n */\n Unknown = 5\n}\n\nenum SignalColorEnums {\n Red = 'red',\n Green = 'green',\n Blue = 'blue',\n White = 'white'\n}\n\n/**\n * 联锁电路区段状态定义\n * 增加一个5 用于展示非集中区进路\n * @type {Array}\n */\nenum InterLockCircuitStateEnums {\n /**\n * 红色电路\n */\n RedCircuit = 1,\n /**\n * 白色电路\n */\n WhiteCircuit = 2,\n /**\n * 等效红色电路\n */\n EqualRedCircuit = 3,\n /**\n * 灰色电路\n */\n GreyCircuit = 4,\n /**\n * 绿色电路\n */\n GreenCircuit = 5\n}\n\n/**\n * 联锁道岔状态定义\n *\n */\nenum InterLockSwitchlocStateEnums {\n /**\n * 定位\n */\n NormalPosition = 2,\n /**\n * 反位\n */\n ReversePosition = 3,\n /**\n * 四开位\n */\n NeutralPosition = 4\n}\n\n/**\n * 闭塞信号状态定义\n * 0接车绿色 1 接车黄色 2接车红色 3发车绿色 4发车黄色 5 发车红色 6闭塞 7事故 8复原\n */\nenum BsSignalStateEnums {\n COME_GREEN = 0,\n COME_YELLOW = 1,\n COME_RED = 2,\n GO_GREEN = 3,\n GO_YELLOW = 4,\n GO_RED = 5,\n LOCK = 6,\n EMERGENCY = 7,\n RESET = 8\n}\n\nexport { InterLockSignalStateEnums, InterLockCircuitStateEnums, InterLockSwitchlocStateEnums, BsSignalStateEnums, SignalColorEnums }\n","/**\n * 防控类型定义\n * 与服务器返回的防控类型保持一致\n */\nenum PreventionEnums {\n /**\n * 空防控点\n */\n NULL = 0,\n /**\n * 土档\n */\n BUMPER = 1,\n /**\n * 接触网终点\n */\n CONTACTLINEEND = 2,\n /**\n * 固定脱轨器\n */\n FIXEDDERAILER = 3,\n /**\n * 禁停区\n */\n CONTACTLINENOSTOP = 4,\n /**\n * 禁停区内部\n */\n CONTACTLINENOSTOPIN = 5,\n /**\n * 其他不控车防控点\n */\n OTHERPROMPT = 6,\n /**\n * 其他控车防控点\n */\n OTHERBRAKE = 7,\n /**\n * 一度停车\n */\n ONESTOP = 8,\n /**\n * 限速区\n */\n SPEEDLIMITED = 9,\n /**\n * 限速预警提示\n */\n SPEEDNOTICE = 10,\n /**\n * 道岔限速提示区\n */\n CROSSSPEEDLIMITED = 11,\n /**\n * 分相区\n */\n CONTACTLINEPSS = 12,\n /**\n * 特殊发码信号机\n */\n SSG = 13,\n /**\n * 分相区内部,暂时无语音提示\n */\n CONTACTLINEPSSIN = 14,\n /**\n * 无网区\n */\n CONTACTLINENOAREA = 15,\n /**\n * 高柱信号机\n */\n HIGHPOSTSIGNAL = 16,\n /**\n * 救援机车\n */\n RESCUEVEHICLE = 17,\n /**\n * 道口\n */\n RAILWAYCROSS = 18,\n /**\n * 机车\n */\n TRAIN = 19,\n /**\n * 站界\n */\n STATIONBOUND = 20,\n /**\n * 矮柱信号机\n */\n SHORTPOSTSIGNAL = 21,\n /**\n * 桥\n */\n BRIDGE = 22,\n /**\n * 白\n */\n WHITE = 23,\n /**\n * 白蓝\n */\n WHITEBLUE = 24,\n /**\n * 蓝\n */\n BLUE = 25,\n /**\n * 蓝白\n */\n BLUEWHITE = 26,\n /**\n * 坡\n */\n SLOPE = 27,\n /**\n * 人员\n */\n PEOPLE = 28,\n /**\n * 隧道\n */\n TUNNEL = 29,\n /**\n * 危险区\n */\n DANGER = 30,\n /**\n * 信号机\n */\n SIGNAL = 31,\n /**\n * 转弯\n */\n SWERVE = 32,\n /**\n * 道岔\n */\n SWITCH = 33,\n /**\n * 警冲标\n */\n FOULINGPOST = 38,\n /**\n * 股道存车\n */\n CUNCHE = 39,\n /**\n * 调车边界\n */\n STATIONBOUNDEXTEND = 40,\n /**\n * 红\n */\n RED = 41,\n /**\n * 绿\n */\n GREEN = 42,\n /**\n * 黄\n */\n YELLOW = 43,\n /**\n * 封锁区\n */\n BLOCKLINE = 50,\n /**\n * 施工区\n */\n WORKAREA = 51,\n /**\n * 施工路径\n */\n ROUTELINE = 52,\n /**\n * 停车点\n */\n PARK = 53,\n /**\n * 施工区边界\n */\n WORKBUOND = 54,\n /**\n * 施工区终点\n */\n WORKBUONDCROSS = 55,\n /**\n * 虚拟站界\n */\n VIRTUALSTATIONBOUND = 56,\n /**\n * 左侧高站台\n */\n LEFTHIGHPLATFORM = 61,\n /**\n * 右侧高站台\n */\n RIGHTHIGHPLATFORM = 62,\n /**\n * 两侧高站台\n */\n BOTHSIDEHIGHPLATFORM = 63,\n /**\n * 脱轨器\n */\n TGQ = 47,\n /**\n * 大门\n */\n DOOR = 87,\n /**\n * 其他\n */\n OTHER = 95,\n /**\n * 补机\n */\n SIDE = 253,\n /**\n * 无地图\n */\n NONE = 254,\n /**\n * 最大值\n */\n MAX = 255,\n /**\n * 隔离\n */\n ISOLATE = 35,\n /**\n * 防护道岔\n */\n ISOLATESWITCH = 100\n}\n\nexport { PreventionEnums }\n","import { InterLockSignalStateEnums, InterLockCircuitStateEnums, InterLockSwitchlocStateEnums, BsSignalStateEnums, SignalColorEnums } from '@/enums'\n\n/**\n * 联锁信号机状态对应颜色 map 定义\n */\nconst INTERLOCK_SIGNAL_MAP: Record<InterLockSignalStateEnums, string | null> = {\n [InterLockSignalStateEnums.RedLight]: 'red',\n [InterLockSignalStateEnums.GreenLight]: '#99FF33', // 绿灯颜色调整为更亮的绿色以提升可见性\n [InterLockSignalStateEnums.WhiteLight]: 'white',\n [InterLockSignalStateEnums.BlueLight]: 'blue',\n [InterLockSignalStateEnums.Unknown]: null\n} as const\n\n/**\n * 联锁信号机状态对应颜色 map 定义\n */\nconst INTERLOCK_SIGNAL_COLOR_MAP: Record<number, SignalColorEnums> = {\n [InterLockSignalStateEnums.RedLight]: SignalColorEnums.Red,\n [InterLockSignalStateEnums.GreenLight]: SignalColorEnums.Green,\n [InterLockSignalStateEnums.WhiteLight]: SignalColorEnums.Blue,\n [InterLockSignalStateEnums.BlueLight]: SignalColorEnums.White\n} as const\n\n/**\n * 联锁电路区段状态对应颜色 map 定义\n */\nconst INTERLOCK_CIRCUIT_MAP: Record<InterLockCircuitStateEnums, string | null> = {\n [InterLockCircuitStateEnums.RedCircuit]: 'red',\n [InterLockCircuitStateEnums.WhiteCircuit]: 'white',\n [InterLockCircuitStateEnums.EqualRedCircuit]: 'red',\n [InterLockCircuitStateEnums.GreyCircuit]: 'transparent', // 灰光带不显示,用透明代替\n [InterLockCircuitStateEnums.GreenCircuit]: 'green'\n} as const\n\n/**\n * 联锁道岔状态对应颜色 map 定义\n */\nconst INTERLOCK_SWITCHLOC_MAP: Record<InterLockSwitchlocStateEnums, string> = {\n [InterLockSwitchlocStateEnums.NormalPosition]: '#99FF33', // 定位\n [InterLockSwitchlocStateEnums.ReversePosition]: 'orange', // 反位\n [InterLockSwitchlocStateEnums.NeutralPosition]: 'red' // 中位 四开\n} as const\n\n/**\n * 闭塞信号状态对应颜色 map 定义\n */\nconst BS_SIGNAL_MAP: Record<BsSignalStateEnums, string | null> = {\n [BsSignalStateEnums.COME_GREEN]: 'green',\n [BsSignalStateEnums.COME_YELLOW]: 'yellow',\n [BsSignalStateEnums.COME_RED]: 'red',\n [BsSignalStateEnums.GO_GREEN]: 'green',\n [BsSignalStateEnums.GO_YELLOW]: 'yellow',\n [BsSignalStateEnums.GO_RED]: 'red',\n [BsSignalStateEnums.LOCK]: 'green',\n [BsSignalStateEnums.EMERGENCY]: 'red',\n [BsSignalStateEnums.RESET]: 'white'\n} as const\n\nexport { INTERLOCK_SIGNAL_MAP, INTERLOCK_CIRCUIT_MAP, INTERLOCK_SWITCHLOC_MAP, BS_SIGNAL_MAP, INTERLOCK_SIGNAL_COLOR_MAP }\n","import { PreventionEnums } from '@/enums/preventionEnum'\n\n/**\n * 防控类型对应名称与别名定义\n */\nconst PREVENTION_TYPES: Record<\n PreventionEnums,\n {\n name: string\n alias: string\n }\n> = {\n [PreventionEnums.NULL]: { name: '', alias: '' },\n [PreventionEnums.BUMPER]: { name: '土挡', alias: '挡' },\n [PreventionEnums.CONTACTLINEEND]: { name: '网终', alias: '网' },\n [PreventionEnums.FIXEDDERAILER]: { name: '固定脱轨器', alias: '脱' },\n [PreventionEnums.CONTACTLINENOSTOP]: { name: '禁停区提示', alias: '禁' },\n [PreventionEnums.CONTACTLINENOSTOPIN]: { name: '禁停区结束', alias: '禁' },\n [PreventionEnums.OTHERPROMPT]: { name: '其他不控车防控点', alias: '其他' },\n [PreventionEnums.OTHERBRAKE]: { name: '其他控车防控点', alias: '其他' },\n [PreventionEnums.ONESTOP]: { name: '一度停车', alias: '停' },\n [PreventionEnums.SPEEDLIMITED]: { name: '限速区', alias: '限' },\n [PreventionEnums.SPEEDNOTICE]: { name: '限速区结束', alias: '限' },\n [PreventionEnums.CROSSSPEEDLIMITED]: { name: '道岔限速提示区', alias: '限' },\n [PreventionEnums.CONTACTLINEPSS]: { name: '分相区', alias: '分相' },\n [PreventionEnums.SSG]: { name: '特殊发码信号机', alias: '特殊' },\n [PreventionEnums.CONTACTLINEPSSIN]: { name: '分相区结束', alias: '相' },\n [PreventionEnums.CONTACTLINENOAREA]: { name: '无网区', alias: '无' },\n [PreventionEnums.HIGHPOSTSIGNAL]: { name: '高柱信号机', alias: '高' },\n [PreventionEnums.RESCUEVEHICLE]: { name: '救援机车', alias: '救援' },\n [PreventionEnums.RAILWAYCROSS]: { name: '道口', alias: '道' },\n [PreventionEnums.TRAIN]: { name: '机车', alias: '车' },\n [PreventionEnums.STATIONBOUND]: { name: '站界', alias: '界' },\n [PreventionEnums.VIRTUALSTATIONBOUND]: { name: '站界', alias: '界' },\n [PreventionEnums.SHORTPOSTSIGNAL]: { name: '矮柱信号机', alias: '矮' },\n [PreventionEnums.BRIDGE]: { name: '桥', alias: '桥' },\n [PreventionEnums.WHITE]: { name: '白', alias: '白' },\n [PreventionEnums.WHITEBLUE]: { name: '白蓝', alias: '白蓝' },\n [PreventionEnums.BLUE]: { name: '蓝', alias: '蓝' },\n [PreventionEnums.BLUEWHITE]: { name: '蓝白', alias: '蓝白' },\n [PreventionEnums.SLOPE]: { name: '坡', alias: '坡' },\n [PreventionEnums.PEOPLE]: { name: '人员', alias: '人员' },\n [PreventionEnums.TUNNEL]: { name: '隧道', alias: '隧' },\n [PreventionEnums.DANGER]: { name: '危险区', alias: '危' },\n [PreventionEnums.SIGNAL]: { name: '信号机', alias: '信' },\n [PreventionEnums.SWERVE]: { name: '转弯', alias: '弯' },\n [PreventionEnums.SWITCH]: { name: '道岔', alias: '岔' },\n [PreventionEnums.OTHER]: { name: '其他', alias: '其他' },\n [PreventionEnums.SIDE]: { name: '补机', alias: '补机' },\n [PreventionEnums.NONE]: { name: '无地图', alias: '无' },\n [PreventionEnums.MAX]: { name: '', alias: '' },\n [PreventionEnums.STATIONBOUNDEXTEND]: { name: '调车边界', alias: '界' },\n [PreventionEnums.RED]: { name: '红', alias: '红' },\n [PreventionEnums.GREEN]: { name: '绿', alias: '绿' },\n [PreventionEnums.YELLOW]: { name: '黄', alias: '黄' },\n [PreventionEnums.BLOCKLINE]: { name: '封锁区', alias: '封' },\n [PreventionEnums.WORKAREA]: { name: '施工区', alias: '工' },\n [PreventionEnums.ROUTELINE]: { name: '路径', alias: '径' },\n [PreventionEnums.PARK]: { name: '停车点', alias: '停' },\n [PreventionEnums.WORKBUOND]: { name: '施工区边界', alias: '工' },\n [PreventionEnums.WORKBUONDCROSS]: { name: '施工区终点', alias: '工' },\n [PreventionEnums.DOOR]: { name: '大门', alias: '门' },\n [PreventionEnums.ISOLATE]: { name: '隔离', alias: '隔' },\n [PreventionEnums.FOULINGPOST]: { name: '警冲标', alias: '警冲标' },\n [PreventionEnums.TGQ]: { name: '脱轨器', alias: '脱' },\n [PreventionEnums.LEFTHIGHPLATFORM]: { name: '左侧高站台', alias: '高' },\n [PreventionEnums.RIGHTHIGHPLATFORM]: { name: '右侧高站台', alias: '高' },\n [PreventionEnums.BOTHSIDEHIGHPLATFORM]: { name: '双侧高站台', alias: '高' },\n [PreventionEnums.CUNCHE]: { name: '存车', alias: '存' },\n [PreventionEnums.ISOLATESWITCH]: { name: '防护道岔', alias: '岔' }\n}\n\nexport { PREVENTION_TYPES }\n","import { createSignalCanvas, createBumperCanvas, createOverLimitCanvas } from '../canvas/baseFeature'\nimport { createCatenaryEndCanvas } from '../canvas/catenaryEnd'\nimport { createTrackDoorCanvas } from '../canvas/door'\nimport { createDerailingStopCanvas } from '../canvas/derailingStop'\n\n/**\n * 创建信号图标\n * @returns Promise<HTMLImageElement>\n */\nconst createSignalIcon = async (type = 'h', dir = 'r', color = ''): Promise<HTMLImageElement> => {\n const stype = type === 'h' ? 1 : 2\n const positionSide = dir === 'l' ? 1 : 2\n\n const canvas = createSignalCanvas(stype, color, positionSide)\n const img = new Image()\n img.src = canvas.toDataURL()\n\n return new Promise((resolve, reject) => {\n img.onload = () => resolve(img)\n img.onerror = reject\n })\n}\n\n/**\n * 创建接触网图标\n * @returns Promise<HTMLImageElement>\n */\nconst createJcwIcon = async (): Promise<HTMLImageElement> => {\n const canvas = createCatenaryEndCanvas()\n const img = new Image()\n img.src = canvas.toDataURL()\n\n return new Promise((resolve, reject) => {\n img.onload = () => resolve(img)\n img.onerror = reject\n })\n}\n\n/**\n * 创建土挡图标\n * @returns Promise<HTMLImageElement>\n */\nconst createBumperIcon = async (): Promise<HTMLImageElement> => {\n const canvas = createBumperCanvas()\n const img = new Image()\n img.src = canvas.toDataURL()\n\n return new Promise((resolve, reject) => {\n img.onload = () => resolve(img)\n img.onerror = reject\n })\n}\n\n/**\n * 创建大门图标\n * @returns Promise<HTMLImageElement>\n */\nconst createDoorIcon = async (): Promise<HTMLImageElement> => {\n const canvas = createTrackDoorCanvas('rgba(53, 204, 98, 0.88)')\n const img = new Image()\n img.src = canvas.toDataURL()\n\n return new Promise((resolve, reject) => {\n img.onload = () => resolve(img)\n img.onerror = reject\n })\n}\n\n/**\n * 脱轨器图标\n * @returns Promise<HTMLImageElement>\n */\nconst createDerailingStopIcon = async (): Promise<HTMLImageElement> => {\n const canvas = createDerailingStopCanvas()\n const img = new Image()\n img.src = canvas.toDataURL()\n\n return new Promise((resolve, reject) => {\n img.onload = () => resolve(img)\n img.onerror = reject\n })\n}\n\n/**\n * 创建侵限绝缘图标\n * @returns Promise<HTMLImageElement>\n */\nconst createOverLimitIcon = async (): Promise<HTMLImageElement> => {\n const canvas = createOverLimitCanvas()\n const img = new Image()\n img.src = canvas.toDataURL()\n\n return new Promise((resolve, reject) => {\n img.onload = () => resolve(img)\n img.onerror = reject\n })\n}\n\nexport { createSignalIcon, createJcwIcon, createBumperIcon, createDoorIcon, createDerailingStopIcon, createOverLimitIcon }\n","import type {\n RasterSourceSpecification,\n VectorSourceSpecification,\n GeoJSONSourceSpecification,\n ImageSourceSpecification,\n VideoSourceSpecification,\n CanvasSourceSpecification,\n Coordinates\n} from 'maplibre-gl'\n\n/**\n * 栅格瓦片源\n * @param url 瓦片地址\n * @returns RasterSourceSpecification\n */\nconst createRasterSourceConfigs = (url: string): RasterSourceSpecification => {\n return {\n type: 'raster',\n tiles: [url],\n scheme: 'tms',\n tileSize: 256\n }\n}\n\n/**\n * 矢量瓦片源\n * @param url 瓦片地址\n * @returns VectorSourceSpecification\n */\nconst createGraphSourceConfigs = (url: string): VectorSourceSpecification => {\n return {\n type: 'vector',\n tiles: [url],\n scheme: 'tms',\n promoteId: 'code'\n }\n}\n\n/**\n * MBTiles 矢量瓦片源\n * @param url 瓦片地址\n * @returns VectorSourceSpecification\n */\nconst createMbtilesSourceConfigs = (url: string): VectorSourceSpecification => {\n return {\n type: 'vector',\n tiles: [url]\n }\n}\n\n/**\n * 矢量瓦片源\n * @param url 瓦片地址\n * @returns VectorSourceSpecification\n */\nconst createGeomSourceConfigs = (url: string): VectorSourceSpecification => {\n return {\n type: 'vector',\n tiles: [url],\n scheme: 'tms',\n promoteId: 'code'\n }\n}\n\n/**\n * GeoJSON 源\n * @param url 瓦片地址\n * @returns GeoJSONSourceSpecification\n */\nconst createGeoJsonSourceConfigs = (data?: GeoJSONSourceSpecification['data']): GeoJSONSourceSpecification => {\n return {\n type: 'geojson',\n data: data || { type: 'FeatureCollection', features: [] },\n promoteId: 'code'\n }\n}\n\n/**\n * 图片源:用于叠加静态图片\n * @param url 图片地址\n * @param coordinates 图片的四个角坐标 [[左上], [右上], [右下], [左下]]\n */\nconst createImageSourceConfigs = (url: string, coordinates: Coordinates): ImageSourceSpecification => {\n return {\n type: 'image',\n url: url,\n coordinates: coordinates\n }\n}\n\n/**\n * 视频源:用于叠加视频流\n * @param urls 视频地址数组\n * @param coordinates 视频画面的四个角坐标\n */\nconst createVideoSourceConfigs = (urls: string[], coordinates: Coordinates): VideoSourceSpecification => {\n return {\n type: 'video',\n urls: urls,\n coordinates: coordinates\n }\n}\n\n/**\n * 画布源:用于动态绘制(如天气图、粒子效果)\n * @param canvasId HTML Canvas 元素的 ID\n * @param coordinates 画布覆盖的四个角坐标\n */\nconst createCanvasSourceConfigs = (canvasId: string, coordinates: Coordinates): CanvasSourceSpecification => {\n return {\n type: 'canvas',\n canvas: canvasId,\n coordinates: coordinates\n }\n}\n\nexport const SourceFactory = {\n geojson: createGeoJsonSourceConfigs,\n raster: createRasterSourceConfigs,\n graph: createGraphSourceConfigs,\n geom: createGeomSourceConfigs,\n image: createImageSourceConfigs,\n video: createVideoSourceConfigs,\n canvas: createCanvasSourceConfigs,\n mbtiles: createMbtilesSourceConfigs\n}\n","import type { MapForgeConfig } from '@/types'\nimport type { BackgroundLayerSpecification } from 'maplibre-gl'\n\nexport const backgroundLayer = (config: MapForgeConfig, sourceLayers: string): BackgroundLayerSpecification => {\n return {\n id: `${config.id}_${sourceLayers}`,\n type: 'background',\n paint: {\n 'background-color': 'rgb(0,0,0)'\n }\n }\n}\n","import type { LayerSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nexport const trackLayer = (config: MapForgeConfig, sourceLayers: string): LayerSpecification[] => {\n return [\n // 无网区:nocontact === 1\n {\n 'id': `${config.id}_${sourceLayers}_nocontact_none`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['==', ['to-number', ['get', 'nocontact']], 1],\n 'layout': {\n 'line-join': 'round'\n },\n 'paint': {\n 'line-color': 'rgb(110,110,110)',\n 'line-width': 2\n }\n },\n // 无电区:nocontact === 2,绿色方框显示在设备外侧\n {\n 'id': `${config.id}_${sourceLayers}_nocontact_nopower_outer`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['==', ['to-number', ['get', 'nocontact']], 2],\n 'layout': {\n 'line-join': 'round'\n },\n 'paint': {\n 'line-color': 'rgb(0,230,0)',\n 'line-width': 10\n // 'line-offset': ['interpolate', ['linear'], ['zoom'], 12, 2, 15, 3, 17, 5, 20, 8],\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_nocontact_nopower_inner`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['==', ['to-number', ['get', 'nocontact']], 2],\n 'layout': {\n 'line-join': 'round'\n },\n 'paint': {\n 'line-color': 'rgb(0,0,0)',\n 'line-width': 8\n // 'line-offset': ['interpolate', ['linear'], ['zoom'], 12, -2, 15, -3, 17, -5, 20, -8],\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'layout': {\n 'line-join': 'round'\n },\n 'paint': {\n 'line-color': 'rgb(85,120,182)',\n 'line-width': 2\n }\n }\n ]\n}\n","import type { LayerSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nexport const trackCircuitLayer = (config: MapForgeConfig, sourceLayers: string): LayerSpecification[] => {\n return [\n // 无状态\n {\n 'id': `${config.id}_${sourceLayers}`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'layout': {\n 'line-join': 'round'\n },\n 'paint': {\n 'line-color': 'transparent',\n 'line-width': 4\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_red`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'layout': {\n 'line-join': 'round'\n },\n 'paint': {\n 'line-color': 'red',\n 'line-width': 4,\n 'line-opacity': ['case', ['==', ['feature-state', 'state'], 1], 1, 0]\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_white`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'layout': {\n 'line-join': 'round'\n },\n 'paint': {\n 'line-color': 'white',\n 'line-width': 4,\n 'line-opacity': ['case', ['==', ['feature-state', 'state'], 2], 1, 0]\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_grey`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'layout': {\n 'line-join': 'round',\n 'visibility': 'none'\n },\n 'paint': {\n 'line-color': 'grey',\n 'line-width': 4,\n 'line-opacity': ['case', ['==', ['feature-state', 'state'], 3], 1, 0]\n }\n }\n // {\n // id: `${config.id}_${sourceLayers}_white_label`,\n // type: 'symbol',\n // source: config.id,\n // 'source-layer': sourceLayers,\n // filter: ['!=', ['get', 'category'], 2],\n // layout: {\n // 'text-field': ['get', 'name'],\n // 'text-size': [\n // 'interpolate',\n // ['linear'],\n // ['zoom'],\n // 15,\n // ['case', ['==', ['get', 'category'], 50], 12, ['==', ['get', 'category'], 96], 10, 9],\n // 22,\n // ['case', ['==', ['get', 'category'], 50], 18, ['==', ['get', 'category'], 96], 14, 15],\n // ],\n // // 'text-font': ['Arial Unicode MS Bold'],\n // 'text-font': ['Open Sans Regular'],\n // 'text-anchor': 'bottom',\n // 'text-offset': [0, -1],\n // 'symbol-placement': 'point',\n // 'text-allow-overlap': true,\n // },\n // paint: {\n // 'text-color': 'white',\n // 'text-opacity': ['case', ['==', ['feature-state', 'state'], '2'], 1, 0],\n // },\n // },\n // {\n // id: `${config.id}_${sourceLayers}_red_label`,\n // type: 'symbol',\n // source: config.id,\n // 'source-layer': sourceLayers,\n // filter: ['!=', ['get', 'category'], 2],\n // layout: {\n // 'text-field': ['get', 'name'],\n // 'text-size': [\n // 'interpolate',\n // ['linear'],\n // ['zoom'],\n // 15,\n // ['case', ['==', ['get', 'category'], 50], 12, ['==', ['get', 'category'], 96], 10, 9],\n // 22,\n // ['case', ['==', ['get', 'category'], 50], 18, ['==', ['get', 'category'], 96], 14, 15],\n // ],\n // // 'text-font': ['Arial Unicode MS Bold'],\n // 'text-font': ['Open Sans Regular'],\n // 'text-anchor': 'bottom',\n // 'text-offset': [0, -1],\n // 'symbol-placement': 'point',\n // 'text-allow-overlap': true,\n // },\n // paint: {\n // 'text-color': 'red',\n // 'text-opacity': ['case', ['==', ['feature-state', 'state'], '1'], 1, 0],\n // },\n // },\n ]\n}\n","import type { SymbolLayerSpecification, ExpressionSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nimport { SignalColorEnums } from '@/enums'\n\nexport const signalLayer = (config: MapForgeConfig, sourceLayers: string): SymbolLayerSpecification[] => {\n const size: ExpressionSpecification = ['interpolate', ['exponential', 2], ['zoom'], 8, 0.05, 12, 0.15, 16, 0.4, 18, 0.6, 22, 1.4]\n\n const signalLayers: SymbolLayerSpecification[] = []\n const colors = [SignalColorEnums.Red, SignalColorEnums.Green, SignalColorEnums.White, SignalColorEnums.Blue]\n\n colors.forEach((color) => {\n signalLayers.push({\n 'id': `${config.id}_${sourceLayers}_${color}`,\n 'type': 'symbol',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'layout': {\n 'icon-image': [\n 'case',\n ['==', ['get', 'inst_type'], 1],\n ['case', ['==', ['get', 'posi_side'], 1], `icon-signal-h-l-${color}`, `icon-signal-h-r-${color}`],\n ['case', ['==', ['get', 'posi_side'], 1], `icon-signal-l-l-${color}`, `icon-signal-l-r-${color}`]\n ],\n 'icon-size': size,\n 'icon-rotate': ['case', ['==', ['get', 'posi_side'], 2], ['+', 270, ['to-number', ['get', 'angle']]], ['+', 90, ['to-number', ['get', 'angle']]]],\n 'icon-allow-overlap': true,\n 'icon-anchor': ['case', ['==', ['get', 'posi_side'], 1], 'bottom-left', 'bottom-right'],\n 'icon-offset': [0, 6.4]\n },\n 'paint': {\n 'icon-opacity': ['case', ['all', ['==', ['feature-state', 'state'], color], ['!=', ['feature-state', 'visiable'], false]], 1, 0]\n }\n })\n })\n\n return [\n ...signalLayers,\n {\n 'id': `${config.id}_${sourceLayers}`,\n 'type': 'symbol',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'minzoom': 12,\n 'layout': {\n /* inst_type: 1高柱2矮柱 posi_side: 1左侧2右侧*/\n 'icon-image': [\n 'case',\n ['==', ['get', 'inst_type'], 1],\n ['case', ['==', ['get', 'posi_side'], 1], `icon-signal-h-l`, `icon-signal-h-r`],\n ['case', ['==', ['get', 'posi_side'], 1], `icon-signal-l-l`, `icon-signal-l-r`]\n ],\n 'icon-size': size,\n 'icon-rotate': ['case', ['==', ['get', 'posi_side'], 2], ['+', 270, ['to-number', ['get', 'angle']]], ['+', 90, ['to-number', ['get', 'angle']]]],\n 'icon-allow-overlap': true,\n 'icon-anchor': ['case', ['==', ['get', 'posi_side'], 1], 'bottom-left', 'bottom-right'],\n 'icon-offset': [0, 6.4]\n }\n }\n ]\n}\n","import type { LayerSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nexport const switchLayer = (config: MapForgeConfig, sourceLayers: string): LayerSpecification[] => {\n return [\n // 道岔点击层\n {\n 'id': `${config.id}_${sourceLayers}_hitarea`,\n 'type': 'circle',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'paint': {\n // --- 视觉部分 (保持原样) ---\n 'circle-radius': ['interpolate', ['linear'], ['zoom'], 5, 11],\n 'circle-color': 'red',\n 'circle-opacity': 0\n }\n },\n // 道岔名称 (定位-绿色 反位-黄色 四开-红色 无状态-白色)\n {\n 'id': `${config.id}_${sourceLayers}_text`,\n 'type': 'symbol',\n 'source': config.id,\n 'source-layer': sourceLayers,\n\n 'layout': {\n 'text-field': ['get', 'name'],\n 'text-size': ['interpolate', ['linear'], ['zoom'], 8, 1, 15, 6, 20, 14],\n 'text-font': ['Arial Unicode MS Bold'],\n // 'text-font': ['Open Sans Regular'],\n 'text-anchor': 'bottom',\n 'text-offset': ['interpolate', ['linear'], ['zoom'], 15, ['literal', [0, -0.5]], 20, ['literal', [0, -2]]],\n 'symbol-placement': 'point',\n 'text-allow-overlap': true\n },\n 'paint': {\n 'text-color': ['match', ['feature-state', 'state'], '2', 'rgb(0,230,0)', '3', 'rgb(255,255,0)', '4', 'rgb(255,0,0)', 'rgb(255,255,255)']\n }\n },\n // 道岔单锁\n {\n 'id': `${config.id}_${sourceLayers}_lock`,\n 'type': 'circle',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'layout': {\n visibility: 'visible'\n },\n 'paint': {\n 'circle-radius': ['interpolate', ['linear'], ['zoom'], 5, 8],\n 'circle-stroke-width': 1.7,\n 'circle-stroke-color': ['match', ['feature-state', 'state'], '2', 'green', '3', 'darkorange', '4', 'red', 'white'],\n 'circle-color': 'transparent',\n 'circle-stroke-opacity': ['case', ['==', ['feature-state', 'subState2'], '1'], 1, 0]\n }\n },\n // 道岔单封\n {\n 'id': `${config.id}_${sourceLayers}_danfen`,\n 'type': 'symbol',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'layout': {\n 'icon-image': 'icon-red-box',\n 'icon-allow-overlap': true,\n 'icon-offset': [0, 15],\n 'icon-size': ['interpolate', ['linear'], ['zoom'], 5, 0.2, 10, 0.5, 18, 1.0]\n },\n 'paint': {\n 'icon-opacity': ['case', ['==', ['feature-state', 'subState3'], '1'], 1, 0]\n }\n }\n ]\n}\n","import type { LineLayerSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nexport const switchLocLayer = (config: MapForgeConfig, sourceLayers: string): LineLayerSpecification[] => {\n return [\n {\n 'id': `${config.id}_${sourceLayers}`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'paint': {\n 'line-color': 'rgb(16,16,16)',\n 'line-width': 3\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_normal`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['any', ['==', ['get', 'location'], '1'], ['==', ['get', 'location'], '2']],\n 'paint': {\n 'line-width': 3,\n 'line-color': 'green',\n 'line-opacity': ['case', ['==', ['feature-state', 'state'], '2'], 1, 0]\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_reverse`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['any', ['==', ['get', 'location'], '1'], ['==', ['get', 'location'], '3']],\n 'paint': {\n 'line-width': 3,\n 'line-color': 'darkorange',\n 'line-opacity': ['case', ['==', ['feature-state', 'state'], '3'], 1, 0]\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_fourway`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'paint': {\n 'line-width': 3,\n 'line-color': '#000000',\n 'line-opacity': ['case', ['==', ['feature-state', 'state'], '4'], 1, 0]\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_normal_white`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['any', ['==', ['get', 'location'], '1'], ['==', ['get', 'location'], '2']],\n 'paint': {\n 'line-width': 3,\n 'line-color': 'white',\n 'line-opacity': ['case', ['all', ['==', ['feature-state', 'state'], '2'], ['==', ['feature-state', 'subState1'], '2']], 1, 0]\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_reverse_white`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['any', ['==', ['get', 'location'], '1'], ['==', ['get', 'location'], '3']],\n 'paint': {\n 'line-width': 3,\n 'line-color': 'white',\n 'line-opacity': ['case', ['all', ['==', ['feature-state', 'state'], '3'], ['==', ['feature-state', 'subState1'], '2']], 1, 0]\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_normal_red`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['any', ['==', ['get', 'location'], '1'], ['==', ['get', 'location'], '2']],\n 'paint': {\n 'line-width': 3,\n 'line-color': 'red',\n 'line-opacity': ['case', ['all', ['==', ['feature-state', 'state'], '2'], ['==', ['feature-state', 'subState1'], '3']], 1, 0]\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_reverse_red`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['any', ['==', ['get', 'location'], '1'], ['==', ['get', 'location'], '3']],\n 'paint': {\n 'line-width': 3,\n 'line-color': 'red',\n 'line-opacity': ['case', ['all', ['==', ['feature-state', 'state'], '3'], ['==', ['feature-state', 'subState1'], '3']], 1, 0]\n }\n }\n ]\n}\n","import type { SymbolLayerSpecification, ExpressionSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nexport const bumperLayer = (config: MapForgeConfig, sourceLayers: string): SymbolLayerSpecification => {\n const size: ExpressionSpecification = ['interpolate', ['exponential', 2], ['zoom'], 8, 0, 12, 0.2, 16, 0.6, 18, 1.2, 22, 1.8]\n\n return {\n 'id': `${config.id}_${sourceLayers}`,\n 'type': 'symbol',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'layout': {\n 'icon-image': 'icon-bumper',\n 'icon-size': size,\n 'icon-rotate': ['+', ['to-number', ['get', 'angle']], 360],\n 'icon-allow-overlap': true,\n 'icon-anchor': 'left'\n }\n }\n}\n","import type { SymbolLayerSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nimport { StationFeatureCodeEnums } from '@/enums'\n\nexport const labelLayer = (config: MapForgeConfig, sourceLayers: string): SymbolLayerSpecification => {\n return {\n 'id': `${config.id}_${sourceLayers}`,\n 'type': 'symbol',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['!=', ['get', 'category'], StationFeatureCodeEnums.SWITCH],\n 'layout': {\n 'text-field': ['get', 'name'],\n 'text-size': [\n 'interpolate',\n ['linear'],\n ['zoom'], // 随缩放级别动态调整大小\n 8,\n ['case', ['==', ['get', 'category'], 50], 8, ['==', ['get', 'category'], 96], 4, 1],\n 15,\n ['case', ['==', ['get', 'category'], 50], 14, ['==', ['get', 'category'], 96], 10, 6],\n 20,\n ['case', ['==', ['get', 'category'], 50], 18, ['==', ['get', 'category'], 96], 16, 14]\n ],\n 'text-font': ['Arial Unicode MS Bold'],\n // 'text-font': ['Open Sans Regular'],\n\n 'symbol-placement': 'point',\n 'text-allow-overlap': true,\n 'text-offset': [0, 0.5],\n 'text-anchor': ['case', ['==', ['get', 'category'], 1], 'top', 'bottom']\n },\n 'paint': {\n 'text-color': ['case', ['==', ['get', 'category'], 3], 'yellow', ['==', ['get', 'category'], 1], 'yellow', 'white']\n }\n }\n}\n","import type { LayerSpecification, ExpressionSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nexport const insulationLayer = (config: MapForgeConfig, sourceLayers: string): LayerSpecification[] => {\n const size: ExpressionSpecification = ['interpolate', ['exponential', 2], ['zoom'], 8, 0.1, 12, 0.2, 16, 0.4, 18, 0.6, 22, 1.2]\n return [\n {\n 'id': `${config.id}_${sourceLayers}`,\n 'type': 'circle',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['!=', ['get', 'category'], 2],\n 'paint': {\n 'circle-radius': size,\n 'circle-stroke-width': size,\n 'circle-stroke-color': '#ffbb00'\n },\n 'layout': {\n visibility: 'none'\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_qxjy`,\n 'type': 'symbol',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['==', ['get', 'overlimit'], true],\n 'layout': {\n 'icon-image': 'icon-overlimit',\n 'icon-size': size,\n 'icon-allow-overlap': true,\n 'icon-anchor': 'center'\n }\n }\n ]\n}\n","import type { LayerSpecification, ExpressionSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nimport { PreventionEnums } from '@/enums'\n\nexport const preventionLayer = (config: MapForgeConfig, sourceLayers: string): LayerSpecification[] => {\n const size: ExpressionSpecification = ['interpolate', ['exponential', 2], ['zoom'], 8, 0.1, 12, 0.2, 16, 0.4, 18, 0.6, 22, 1.2]\n\n return [\n /* 道口 */\n {\n 'id': `${config.id}_${sourceLayers}_dk`,\n 'type': 'circle',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['==', ['get', 'uc_oob_type'], String(PreventionEnums.RAILWAYCROSS)],\n\n 'paint': {\n 'circle-radius': ['interpolate', ['exponential', 2], ['zoom'], 8, 1, 12, 2, 16, 3, 18, 4, 22, 5],\n 'circle-color': 'rgba(197, 207, 54, 0.8)',\n 'circle-stroke-width': 1,\n 'circle-stroke-color': 'rgba(13, 10, 172, 0.9)'\n }\n },\n /* 接触网终点 */\n {\n 'id': `${config.id}_${sourceLayers}_jcw`,\n 'type': 'symbol',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['==', ['get', 'uc_oob_type'], String(PreventionEnums.CONTACTLINEEND)],\n 'layout': {\n 'icon-image': 'icon-jcw',\n 'icon-size': size,\n 'icon-allow-overlap': true,\n 'icon-anchor': 'center',\n 'icon-rotate': 0, // idle 后由 attachDoorTrackAngle 按股道方位写入(垂直股道)\n 'icon-rotation-alignment': 'map' // 相对地图旋转\n }\n },\n /* 大门 */\n {\n 'id': `${config.id}_${sourceLayers}_door`,\n 'type': 'symbol',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['==', ['get', 'uc_oob_type'], String(PreventionEnums.DOOR)],\n 'layout': {\n 'icon-image': 'icon-door',\n 'icon-size': size,\n 'icon-rotate': 0, // idle 后由 attachDoorTrackAngle 按股道方位写入(垂直股道)\n 'icon-rotation-alignment': 'map', // 相对地图旋转\n 'icon-allow-overlap': true,\n 'icon-anchor': 'center'\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_doorcenter`,\n 'type': 'circle',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['==', ['get', 'uc_oob_type'], String(PreventionEnums.DOOR)],\n 'paint': {\n 'circle-radius': 2,\n 'circle-color': 'red'\n }\n },\n /* 脱轨器 */\n {\n 'id': `${config.id}_${sourceLayers}_tgq`,\n 'type': 'symbol',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['==', ['get', 'uc_oob_type'], String(PreventionEnums.FIXEDDERAILER)],\n 'layout': {\n 'icon-image': 'icon-stop',\n 'icon-size': size,\n\n 'icon-allow-overlap': true,\n 'icon-anchor': 'bottom'\n }\n },\n /* 站界、一度停车 */\n {\n 'id': `${config.id}_${sourceLayers}_circle`,\n 'type': 'circle',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'minzoom': 12,\n 'filter': ['match', ['get', 'uc_oob_type'], [String(PreventionEnums.ONESTOP), String(PreventionEnums.STATIONBOUND)], true, false],\n 'paint': {\n 'circle-radius': ['interpolate', ['exponential', 2], ['zoom'], 12, 3, 16, 6, 18, 8, 22, 14], // 圆的半径(像素)\n 'circle-stroke-width': 2, // 圆的边框宽度\n 'circle-stroke-color': 'red' // 边框颜色\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_text`,\n 'type': 'symbol',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'minzoom': 12,\n 'filter': ['match', ['get', 'uc_oob_type'], [String(PreventionEnums.ONESTOP), String(PreventionEnums.STATIONBOUND)], true, false],\n 'layout': {\n 'text-field': [\n 'case',\n ['==', ['get', 'uc_oob_type'], String(PreventionEnums.ONESTOP)],\n '停',\n ['==', ['get', 'uc_oob_type'], String(PreventionEnums.STATIONBOUND)],\n '界',\n ''\n ],\n // 'text-font': ['Arial Unicode MS Bold'],\n 'text-font': ['Open Sans Regular'],\n 'text-size': ['interpolate', ['exponential', 2], ['zoom'], 12, 5, 16, 10, 18, 12, 22, 14],\n 'text-anchor': 'center',\n 'symbol-placement': 'point',\n 'text-allow-overlap': true\n },\n 'paint': {\n 'text-color': 'white' // 文字颜色\n }\n }\n ]\n}\n","import type { LayerSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nexport const regionLayer = (config: MapForgeConfig, sourceLayers: string): LayerSpecification => {\n return {\n 'id': `${config.id}_${sourceLayers}`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'layout': {\n 'line-join': 'round'\n },\n 'paint': {\n 'line-color': 'rgb(85,120,182)',\n 'line-width': 2\n }\n }\n}\n","import type { LayerSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nimport { StationFeatureCodeEnums } from '@/enums'\n\nexport const displayPolygonLayer = (config: MapForgeConfig, sourceLayers: string): LayerSpecification[] => {\n return [\n /* 高站台 */\n {\n 'id': `${config.id}_${sourceLayers}_gzt`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['==', ['get', 'category'], StationFeatureCodeEnums.HIGHPLATFORM],\n 'paint': {\n 'line-color': 'rgb(39,126,165)',\n 'line-width': 2\n }\n },\n /* 驼峰溜放标志 */\n {\n 'id': `${config.id}_${sourceLayers}_tfbz`,\n 'type': 'fill',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['==', ['get', 'category'], StationFeatureCodeEnums.HUMPSLIP],\n 'paint': {\n 'fill-color': 'rgb(60, 122, 151)',\n 'fill-outline-color': 'rgb(175 186 191)'\n }\n }\n ]\n}\n","import type { LayerSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nexport const displayLineLayer = (config: MapForgeConfig, sourceLayers: string): LayerSpecification => {\n return {\n 'id': `${config.id}_${sourceLayers}`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n\n 'layout': {\n 'line-join': 'round'\n },\n 'paint': {\n 'line-color': 'rgb(175 186 191)',\n 'line-width': 1\n }\n }\n}\n","import type { LayerSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nexport const displayPointLayer = (config: MapForgeConfig, sourceLayers: string): LayerSpecification => {\n return {\n 'id': `${config.id}_${sourceLayers}_jcb`,\n 'type': 'circle',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['==', ['get', 'category'], 3],\n 'paint': {\n 'circle-radius': ['interpolate', ['linear'], ['zoom'], 10, 1, 15, 3, 22, 5],\n 'circle-color': 'red'\n }\n }\n}\n","import type { LayerType, MapForgeConfig } from '@/types'\nimport type { LayerSpecification } from 'maplibre-gl'\n\nimport { backgroundLayer } from './backgroundLayer'\nimport { trackLayer } from './trackLayer'\nimport { trackCircuitLayer } from './trackCircuitLayer'\nimport { signalLayer } from './signalLayer'\nimport { switchLayer } from './switchLayer'\nimport { switchLocLayer } from './switchLocLayer'\nimport { bumperLayer } from './bumperLayer'\nimport { labelLayer } from './labelLayer'\nimport { insulationLayer } from './insulationLayer'\nimport { preventionLayer } from './preventionLayer'\nimport { regionLayer } from './regionLayer'\nimport { displayPolygonLayer } from './displayPolygonLayer'\nimport { displayLineLayer } from './displayLineLayer'\nimport { displayPointLayer } from './displayPointLayer'\n\ntype LayerCreator = (config: MapForgeConfig, sourceLayer: string) => LayerSpecification | LayerSpecification[]\n\n//TEEE通用图层\nconst GENERAL_LAYER_MAP: Partial<Record<LayerType, LayerCreator | null>> = {\n background: backgroundLayer,\n signal: signalLayer,\n track: trackLayer,\n track_circuit: trackCircuitLayer,\n bumper: bumperLayer,\n switch: switchLayer,\n switch_loc: switchLocLayer,\n insulation: insulationLayer,\n label: labelLayer,\n prevention: preventionLayer,\n region: regionLayer /* 区间线 */,\n display_polygon: displayPolygonLayer,\n display_line: displayLineLayer,\n display_point: displayPointLayer\n}\n\n// 返回配置数组\nexport const createLayerConfigs = (config: MapForgeConfig): LayerSpecification[] => {\n const layers: LayerSpecification[] = []\n\n const configLayers = config.layers as LayerType[] | null\n const configSourceLayers = config.sourceLayers\n if (!configLayers || !configSourceLayers) return []\n\n configLayers.forEach((layer, index) => {\n const LayerClass = GENERAL_LAYER_MAP[layer]\n const sourceLayers = configSourceLayers[index]\n if (!sourceLayers) return\n if (LayerClass) {\n const layersParams = LayerClass(config, sourceLayers)\n // 判断返回的是数组还是单个对象\n if (Array.isArray(layersParams)) {\n layers.push(...layersParams)\n } else {\n layers.push(layersParams)\n }\n } else {\n console.warn(`图层 ${layer} 尚未实现`)\n }\n })\n\n return layers\n}\n","import type { LayerSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nexport const trackLayer = (config: MapForgeConfig, sourceLayers: string): LayerSpecification[] => {\n return [\n {\n 'id': `${config.id}_${sourceLayers}_hitarea`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'layout': { 'line-join': 'round' },\n 'paint': {\n 'line-color': 'black',\n 'line-width': 6,\n 'line-opacity': ['case', ['==', ['feature-state', 'select'], true], 1, 0]\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}`,\n 'type': 'line',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'layout': {\n 'line-join': 'round'\n },\n // 'paint': {\n // 'line-color': '#46464bd7',\n // 'line-width': 6,\n // },\n 'paint': {\n 'line-color': '#85A0D9',\n 'line-width': 2\n }\n }\n ]\n}\n","import type { LayerSpecification, ExpressionSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nexport const signalLayer = (config: MapForgeConfig, sourceLayers: string): LayerSpecification[] => {\n // debugger;\n const size: ExpressionSpecification = ['interpolate', ['exponential', 2], ['zoom'], 12, 0, 16, 0.3, 18, 0.5, 20, 1]\n return [\n {\n 'id': `${config.id}_${sourceLayers}`,\n 'type': 'symbol',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'layout': {\n 'icon-image': [\n 'case',\n ['==', ['get', 'inst_type'], 1],\n ['case', ['==', ['get', 'posi_side'], 2], 'icon-signal-h-r', 'icon-signal-h-l'],\n ['case', ['==', ['get', 'posi_side'], 2], 'icon-signal-l-r', 'icon-signal-l-l']\n ],\n 'icon-allow-overlap': true,\n 'icon-rotate': ['case', ['==', ['get', 'posi_side'], 2], ['-', 270, ['to-number', ['get', 'angle']]], ['-', 90, ['to-number', ['get', 'angle']]]],\n 'icon-size': size,\n 'icon-anchor': ['case', ['==', ['get', 'posi_side'], 1], 'bottom-left', 'bottom-right'],\n 'icon-offset': [0, 2]\n },\n 'paint': {\n 'icon-opacity': ['case', ['!=', ['feature-state', 'visiable'], false], 1, 0]\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_text`,\n 'type': 'symbol',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'layout': {\n 'text-field': ['get', 'name'],\n 'text-font': ['Arial Unicode MS Bold'],\n 'text-size': ['interpolate', ['linear'], ['zoom'], 12, 5, 14, 8, 18, 14],\n 'text-anchor': 'center',\n 'symbol-placement': 'point',\n 'text-allow-overlap': true,\n // \"text-rotate\": [\"-\", 90, [\"to-number\", [\"get\", \"angle\"]]],\n 'text-offset': [0, 0.6]\n },\n 'paint': {\n 'text-color': 'gold'\n }\n }\n ]\n}\n","import type { LayerSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nexport const bumperLayer = (config: MapForgeConfig, sourceLayers: string): LayerSpecification[] => {\n return [\n {\n 'id': `${config.id}_${sourceLayers}`,\n 'type': 'circle',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'paint': {\n 'circle-radius': ['interpolate', ['exponential', 2], ['zoom'], 10, 3, 12, 3, 14, 5, 16, 6, 20, 8],\n 'circle-stroke-width': 2,\n 'circle-stroke-color': 'red'\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_text`,\n 'type': 'symbol',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'layout': {\n 'text-field': '档',\n 'text-font': ['Arial Unicode MS Bold'],\n 'text-size': ['interpolate', ['linear'], ['zoom'], 10, 6, 12, 8, 14, 10, 16, 12, 20, 12],\n 'text-anchor': 'center',\n 'symbol-placement': 'point',\n 'text-allow-overlap': true\n },\n 'paint': {\n 'text-color': 'white'\n }\n }\n ]\n}\n","import { type MapForgeConfig } from '@/types'\nimport { type BackgroundLayerSpecification } from 'maplibre-gl'\n\nexport const backgroundLayer = (config: MapForgeConfig, sourceLayers: string): BackgroundLayerSpecification => {\n return {\n id: `${config.id}_${sourceLayers}`,\n type: 'background',\n paint: {\n 'background-color': '#131212'\n }\n }\n}\n","import type { LayerSpecification } from 'maplibre-gl'\nimport type { MapForgeConfig } from '@/types'\n\nexport const preventionLayer = (config: MapForgeConfig, sourceLayers: string): LayerSpecification[] => {\n return [\n {\n 'id': `${config.id}_${sourceLayers}`,\n 'type': 'circle',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'filter': ['match', ['to-string', ['get', 'uc_oob_type']], ['2', '8', '20', '87'], true, false],\n 'paint': {\n 'circle-radius': ['interpolate', ['exponential', 2], ['zoom'], 10, 3, 12, 3, 14, 5, 16, 6, 20, 8],\n 'circle-stroke-width': 2,\n 'circle-stroke-color': 'red'\n }\n },\n {\n 'id': `${config.id}_${sourceLayers}_text`,\n 'type': 'symbol',\n 'source': config.id,\n 'source-layer': sourceLayers,\n 'layout': {\n 'text-field': [\n 'case',\n ['==', ['to-string', ['get', 'uc_oob_type']], '2'],\n '网',\n ['==', ['to-string', ['get', 'uc_oob_type']], '8'],\n '停',\n ['==', ['to-string', ['get', 'uc_oob_type']], '20'],\n '界',\n '门'\n ],\n 'text-font': ['Arial Unicode MS Bold'],\n 'text-size': ['interpolate', ['linear'], ['zoom'], 10, 6, 12, 8, 14, 10, 16, 12, 20, 12],\n 'text-anchor': 'center',\n 'symbol-placement': 'point',\n 'text-allow-overlap': true\n },\n 'paint': {\n 'text-color': 'white'\n }\n }\n ]\n}\n","import type { LayerType, MapForgeConfig } from '@/types'\nimport type { LayerSpecification } from 'maplibre-gl'\n\nimport { trackLayer } from './trackLayer'\nimport { signalLayer } from './signalLayer'\nimport { bumperLayer } from './bumperLayer'\nimport { backgroundLayer } from './backgroundLayer'\nimport { preventionLayer } from './prevention'\n\ntype LayerCreator = (config: MapForgeConfig, sourceLayer: string) => LayerSpecification | LayerSpecification[]\n\n// TEEE通用图层\nconst LAYER_MAP: Record<LayerType, LayerCreator | null> = {\n background: backgroundLayer,\n signal: signalLayer,\n track: trackLayer,\n track_circuit: null,\n bumper: bumperLayer,\n switch: null,\n switch_loc: null,\n insulation: null,\n label: null,\n prevention: preventionLayer,\n sgfhqy: null,\n region: null,\n display_polygon: null,\n display_line: null,\n display_point: null\n}\n\n// 返回配置数组\nexport const createLayerConfigs = (config: MapForgeConfig): LayerSpecification[] => {\n const layers: LayerSpecification[] = []\n const configLayers = config.layers as LayerType[] | undefined\n const configSourceLayers = config.sourceLayers\n if (!configLayers || !configSourceLayers) return []\n configLayers.forEach((layer, index) => {\n const LayerClass = LAYER_MAP[layer]\n const sourceLayers = configSourceLayers[index]\n if (!sourceLayers) return\n if (LayerClass) {\n const layersParams = LayerClass(config, sourceLayers)\n // 判断返回的是数组还是单个对象\n if (Array.isArray(layersParams)) {\n layers.push(...layersParams)\n } else {\n layers.push(layersParams)\n }\n } else {\n console.warn(`图层 ${layer} 尚未实现`)\n }\n })\n\n return layers\n}\n","import type { LayerSpecification } from 'maplibre-gl'\n\nexport const rasterLayer = (id: string): LayerSpecification[] => {\n return [\n {\n id: `${id}_raster_layer`,\n type: 'raster',\n source: id,\n paint: {\n 'raster-opacity': 0.8\n }\n }\n ]\n}\n","import type { BackgroundLayerSpecification } from 'maplibre-gl'\n\nexport const backgroundLayer = (sourceId: string): BackgroundLayerSpecification => {\n return {\n id: `${sourceId}_background`,\n type: 'background',\n paint: {\n 'background-color': '#131212'\n }\n }\n}\n","import type { LayerSpecification } from 'maplibre-gl'\r\n\r\nexport const trackLayer = (sourceId: string): LayerSpecification[] => {\r\n return [\r\n {\r\n id: `${sourceId}_track`,\r\n type: 'line',\r\n source: sourceId,\r\n filter: ['any', ['==', ['get', 'isSurveying'], 1], ['!', ['has', 'isSurveying']]],\r\n layout: { 'line-join': 'round' },\r\n paint: {\r\n 'line-color': '#85A0D9',\r\n 'line-width': 2\r\n }\r\n },\r\n {\r\n id: `${sourceId}_track_noSurveying`,\r\n type: 'line',\r\n source: sourceId,\r\n filter: ['==', ['get', 'isSurveying'], 0],\r\n layout: { 'line-join': 'round' },\r\n paint: {\r\n 'line-color': '#ccc',\r\n 'line-width': 2,\r\n 'line-dasharray': [2, 2]\r\n }\r\n }\r\n ]\r\n}\r\n","import type { LayerSpecification, ExpressionSpecification } from 'maplibre-gl'\n\nimport { InterLockCircuitStateEnums } from '@/enums'\n\nexport const trackCircuitLayer = (sourceId: string): LayerSpecification[] => {\n const size: ExpressionSpecification = ['interpolate', ['exponential', 2], ['zoom'], 12, 2, 16, 3.5, 18, 4.5, 20, 5]\n return [\n {\n id: `${sourceId}_trackcircuit_bad`,\n type: 'line',\n source: sourceId,\n layout: {\n 'line-join': 'round'\n },\n paint: {\n 'line-color': [\n 'case',\n ['==', ['feature-state', 'state'], InterLockCircuitStateEnums.RedCircuit],\n '#ff0000',\n ['==', ['feature-state', 'state'], InterLockCircuitStateEnums.WhiteCircuit],\n '#ffffff',\n ['==', ['feature-state', 'state'], InterLockCircuitStateEnums.GreyCircuit],\n '#808080',\n '#000000'\n ],\n 'line-width': size,\n 'line-dasharray': [4, 4],\n 'line-opacity': ['case', ['==', ['feature-state', 'substate'], 0], 1, 0]\n }\n },\n {\n id: `${sourceId}_trackcircuit_grey`,\n type: 'line',\n source: sourceId,\n layout: {\n 'line-join': 'round'\n },\n paint: {\n 'line-color': 'grey',\n 'line-width': size,\n 'line-opacity': ['case', ['all', ['==', ['feature-state', 'state'], InterLockCircuitStateEnums.GreyCircuit], ['!=', ['feature-state', 'substate'], 0]], 1, 0]\n }\n },\n {\n id: `${sourceId}_trackcircuit_red`,\n type: 'line',\n source: sourceId,\n layout: { 'line-join': 'round' },\n paint: {\n 'line-color': 'red',\n 'line-width': size,\n 'line-opacity': ['case', ['all', ['==', ['feature-state', 'state'], InterLockCircuitStateEnums.RedCircuit], ['!=', ['feature-state', 'substate'], 0]], 1, 0]\n }\n },\n {\n id: `${sourceId}_trackcircuit_white`,\n type: 'line',\n source: sourceId,\n layout: { 'line-join': 'round' },\n paint: {\n 'line-color': 'white',\n 'line-width': size,\n 'line-opacity': ['case', ['all', ['==', ['feature-state', 'state'], InterLockCircuitStateEnums.WhiteCircuit], ['!=', ['feature-state', 'substate'], 0]], 1, 0]\n }\n },\n {\n id: `${sourceId}_trackcircuit_white_label`,\n type: 'symbol',\n source: sourceId,\n filter: ['!=', ['get', 'category'], 2],\n maxzoom: 22,\n minzoom: 12,\n layout: {\n 'text-field': ['get', 'name'],\n 'text-size': [\n 'interpolate',\n ['linear'],\n ['zoom'],\n 15,\n ['case', ['==', ['get', 'category'], 50], 12, ['==', ['get', 'category'], 96], 10, 9],\n 22,\n ['case', ['==', ['get', 'category'], 50], 18, ['==', ['get', 'category'], 96], 14, 15]\n ],\n // 'text-font': ['Arial Unicode MS Bold'],\n 'text-font': ['Arial Unicode MS Bold'],\n 'text-anchor': 'bottom',\n 'text-offset': [0, -1],\n 'symbol-placement': 'point',\n 'text-allow-overlap': false\n },\n paint: {\n 'text-color': 'white',\n 'text-opacity': ['case', ['==', ['feature-state', 'state'], InterLockCircuitStateEnums.WhiteCircuit], 1, 0]\n }\n },\n {\n id: `${sourceId}_trackcircuit_red_label`,\n type: 'symbol',\n source: sourceId,\n filter: ['!=', ['get', 'category'], 2],\n maxzoom: 22,\n minzoom: 12,\n layout: {\n 'text-field': ['get', 'name'],\n 'text-size': [\n 'interpolate',\n ['linear'],\n ['zoom'],\n 15,\n ['case', ['==', ['get', 'category'], 50], 12, ['==', ['get', 'category'], 96], 10, 9],\n 22,\n ['case', ['==', ['get', 'category'], 50], 18, ['==', ['get', 'category'], 96], 14, 15]\n ],\n // 'text-font': ['Arial Unicode MS Bold'],\n 'text-font': ['Arial Unicode MS Bold'],\n 'text-anchor': 'bottom',\n 'text-offset': [0, -1],\n 'symbol-placement': 'point',\n 'text-allow-overlap': false\n },\n paint: {\n 'text-color': 'red',\n 'text-opacity': ['case', ['==', ['feature-state', 'state'], InterLockCircuitStateEnums.RedCircuit], 1, 0]\n }\n }\n ]\n}\n","import type { SymbolLayerSpecification, ExpressionSpecification } from 'maplibre-gl'\n\nimport { SignalColorEnums } from '@/enums'\n\nexport const signalLayer = (sourceId: string): SymbolLayerSpecification[] => {\n const size: ExpressionSpecification = ['interpolate', ['exponential', 2], ['zoom'], 12, 0.1, 16, 0.3, 18, 0.4, 20, 0.75]\n\n const colorLayers: SymbolLayerSpecification[] = [SignalColorEnums.Red, SignalColorEnums.Green, SignalColorEnums.White, SignalColorEnums.Blue].map((color) => ({\n id: `${sourceId}_signal_${color}`,\n type: 'symbol' as const,\n source: sourceId,\n maxzoom: 22,\n minzoom: 13,\n layout: {\n 'icon-image': [\n 'case',\n ['==', ['get', 'installType'], 1],\n ['case', ['==', ['get', 'positionSide'], 1], `icon-signal-h-l-${color}`, `icon-signal-h-r-${color}`],\n ['case', ['==', ['get', 'positionSide'], 1], `icon-signal-l-l-${color}`, `icon-signal-l-r-${color}`]\n ],\n 'icon-size': size,\n 'icon-rotate': ['case', ['==', ['get', 'positionSide'], 2], ['+', 270, ['to-number', ['get', 'angle']]], ['+', 90, ['to-number', ['get', 'angle']]]],\n 'icon-allow-overlap': true,\n 'icon-anchor': ['case', ['==', ['get', 'positionSide'], 1], 'bottom-left', 'bottom-right']\n },\n paint: {\n 'icon-opacity': ['case', ['all', ['==', ['feature-state', 'state'], color], ['!=', ['feature-state', 'visiable'], false]] as ExpressionSpecification, 1, 0]\n }\n }))\n\n return [\n ...colorLayers,\n {\n id: `${sourceId}_signal`,\n type: 'symbol',\n source: sourceId,\n maxzoom: 22,\n minzoom: 13,\n layout: {\n 'icon-image': [\n 'case',\n ['==', ['get', 'installType'], 1],\n ['case', ['==', ['get', 'positionSide'], 1], 'icon-signal-h-l', 'icon-signal-h-r'],\n ['case', ['==', ['get', 'positionSide'], 1], 'icon-signal-l-l', 'icon-signal-l-r']\n ],\n 'icon-size': size,\n 'icon-rotate': ['case', ['==', ['get', 'positionSide'], 2], ['+', 270, ['to-number', ['get', 'angle']]], ['+', 90, ['to-number', ['get', 'angle']]]],\n 'icon-allow-overlap': true,\n 'icon-anchor': ['case', ['==', ['get', 'positionSide'], 1], 'bottom-left', 'bottom-right']\n },\n paint: {\n 'icon-opacity': [\n 'case',\n [\n 'any',\n ['==', ['feature-state', 'state'], SignalColorEnums.Red],\n ['==', ['feature-state', 'state'], SignalColorEnums.Green],\n ['==', ['feature-state', 'state'], SignalColorEnums.White],\n ['==', ['feature-state', 'state'], SignalColorEnums.Blue]\n ],\n 0,\n ['!=', ['feature-state', 'visiable'], false],\n 1,\n 0\n ]\n }\n }\n ]\n}\n","import type { LayerSpecification } from 'maplibre-gl'\n\nimport { InterLockSwitchlocStateEnums } from '@/enums'\nimport { INTERLOCK_SWITCHLOC_MAP } from '@/constants'\n\nexport const switchLayer = (sourceId: string): LayerSpecification[] => {\n return [\n {\n id: `${sourceId}_switch_hitarea`,\n type: 'circle',\n source: sourceId,\n maxzoom: 22,\n minzoom: 13,\n paint: {\n 'circle-radius': ['interpolate', ['linear'], ['zoom'], 5, 11],\n 'circle-color': 'red',\n 'circle-opacity': 0\n }\n },\n // 道岔名称 (定位-绿色 反位-黄色 四开-红色 无状态-白色)\n {\n id: `${sourceId}_switch_text`,\n type: 'symbol',\n source: sourceId,\n maxzoom: 22,\n minzoom: 13,\n layout: {\n 'text-field': ['get', 'name'],\n 'text-size': ['interpolate', ['linear'], ['zoom'], 15, 11, 22, 15],\n 'text-font': ['Arial Unicode MS Bold'],\n 'text-anchor': 'top',\n 'text-offset': [0, 0.5],\n 'symbol-placement': 'point',\n 'text-allow-overlap': false\n },\n paint: {\n 'text-color': [\n 'match',\n ['feature-state', 'state'],\n String(InterLockSwitchlocStateEnums.NormalPosition),\n INTERLOCK_SWITCHLOC_MAP[InterLockSwitchlocStateEnums.NormalPosition],\n String(InterLockSwitchlocStateEnums.ReversePosition),\n INTERLOCK_SWITCHLOC_MAP[InterLockSwitchlocStateEnums.ReversePosition],\n String(InterLockSwitchlocStateEnums.NeutralPosition),\n INTERLOCK_SWITCHLOC_MAP[InterLockSwitchlocStateEnums.NeutralPosition],\n 'white'\n ]\n }\n }\n ]\n}\n","import type { LineLayerSpecification } from 'maplibre-gl'\n\nimport { InterLockSwitchlocStateEnums } from '@/enums'\nimport { INTERLOCK_SWITCHLOC_MAP } from '@/constants'\n\nexport const switchLocLayer = (sourceId: string): LineLayerSpecification[] => {\n return [\n // 状态 0\n {\n id: `${sourceId}_switchloc`,\n type: 'line',\n source: sourceId,\n maxzoom: 22,\n minzoom: 13,\n layout: {\n 'line-cap': 'round',\n 'line-join': 'round'\n },\n paint: { 'line-width': 5, 'line-color': '#000000' }\n },\n // 定位\n {\n id: `${sourceId}_switchloc_normal`,\n type: 'line',\n source: sourceId,\n maxzoom: 22,\n minzoom: 13,\n filter: ['any', ['==', ['get', 'location'], '1'], ['==', ['get', 'location'], '2']],\n layout: {\n 'line-cap': 'round',\n 'line-join': 'round'\n },\n paint: {\n 'line-width': 4,\n 'line-color': INTERLOCK_SWITCHLOC_MAP[InterLockSwitchlocStateEnums.NormalPosition],\n 'line-opacity': ['case', ['==', ['feature-state', 'state'], String(InterLockSwitchlocStateEnums.NormalPosition)], 1, 0]\n }\n },\n // 反位\n {\n id: `${sourceId}_switchloc_reverse`,\n type: 'line',\n source: sourceId,\n maxzoom: 22,\n minzoom: 13,\n filter: ['any', ['==', ['get', 'location'], '1'], ['==', ['get', 'location'], '3']],\n layout: {\n 'line-cap': 'round',\n 'line-join': 'round'\n },\n paint: {\n 'line-width': 4,\n 'line-color': INTERLOCK_SWITCHLOC_MAP[InterLockSwitchlocStateEnums.ReversePosition],\n 'line-opacity': ['case', ['==', ['feature-state', 'state'], String(InterLockSwitchlocStateEnums.ReversePosition)], 1, 0]\n }\n },\n // 中位 - 四开\n {\n id: `${sourceId}_switchloc_reverse`,\n type: 'line',\n source: sourceId,\n maxzoom: 22,\n minzoom: 13,\n filter: ['any', ['==', ['get', 'location'], '1'], ['==', ['get', 'location'], '3']],\n layout: {\n 'line-cap': 'round',\n 'line-join': 'round'\n },\n paint: {\n 'line-width': 4,\n 'line-color': INTERLOCK_SWITCHLOC_MAP[InterLockSwitchlocStateEnums.NeutralPosition],\n 'line-opacity': ['case', ['==', ['feature-state', 'state'], String(InterLockSwitchlocStateEnums.NeutralPosition)], 1, 0]\n }\n }\n ]\n}\n","import type { SymbolLayerSpecification, ExpressionSpecification } from 'maplibre-gl'\r\n\r\nexport const bumperLayer = (sourceId: string): SymbolLayerSpecification => {\r\n const size: ExpressionSpecification = ['interpolate', ['exponential', 2], ['zoom'], 12, 0.1, 16, 0.5, 18, 0.7, 20, 1.4]\r\n return {\r\n id: `${sourceId}_bumper`,\r\n type: 'symbol',\r\n source: sourceId,\r\n maxzoom: 22,\r\n minzoom: 14,\r\n layout: {\r\n 'icon-image': 'icon-bumper',\r\n 'icon-size': size,\r\n 'icon-rotate': ['get', 'angle'],\r\n 'icon-allow-overlap': true,\r\n 'icon-anchor': 'left'\r\n }\r\n }\r\n}\r\n","import type { SymbolLayerSpecification } from 'maplibre-gl'\n\nimport { StationFeatureCodeEnums } from '@/enums'\n\nexport const labelLayer = (sourceId: string): SymbolLayerSpecification => {\n return {\n id: `${sourceId}_label`,\n type: 'symbol',\n source: sourceId,\n filter: ['!=', ['get', 'category'], StationFeatureCodeEnums.SWITCH],\n layout: {\n 'text-field': ['get', 'name'],\n 'text-size': [\n 'interpolate',\n ['linear'],\n ['zoom'],\n 15,\n ['case', ['==', ['get', 'category'], 50], 12, ['==', ['get', 'category'], 96], 10, 9],\n 22,\n ['case', ['==', ['get', 'category'], 50], 18, ['==', ['get', 'category'], 96], 14, 15]\n ],\n 'text-font': ['Arial Unicode MS Bold'],\n 'text-offset': [0, 0.5],\n 'text-anchor': ['case', ['==', ['get', 'category'], 3], 'top-left', 'bottom'],\n 'symbol-placement': 'point',\n 'text-allow-overlap': false\n },\n maxzoom: 22,\n minzoom: 12,\n paint: { 'text-color': 'yellow' }\n }\n}\n","import type { LayerSpecification, ExpressionSpecification } from 'maplibre-gl'\r\n\r\nexport const insulationLayer = (sourceId: string): LayerSpecification => {\r\n const size: ExpressionSpecification = ['interpolate', ['exponential', 2], ['zoom'], 12, 0.5, 15, 1, 16, 1, 17, 2]\r\n return {\r\n id: `${sourceId}_insulation`,\r\n type: 'circle',\r\n source: sourceId,\r\n filter: ['!=', ['get', 'category'], 2],\r\n maxzoom: 22,\r\n minzoom: 14,\r\n paint: {\r\n 'circle-radius': size,\r\n 'circle-stroke-width': size,\r\n 'circle-stroke-color': '#ffbb00'\r\n }\r\n }\r\n}\r\n","import type { LayerSpecification } from 'maplibre-gl'\n\nimport { PreventionEnums } from '@/enums/preventionEnum'\n\nexport const preventionLayer = (sourceId: string): LayerSpecification[] => {\n return [\n {\n id: `${sourceId}_prevention_circle`,\n type: 'circle',\n source: sourceId,\n maxzoom: 22,\n minzoom: 12,\n filter: ['match', ['to-number', ['get', 'uc_oob_type']], [PreventionEnums.ONESTOP, PreventionEnums.STATIONBOUND], true, false],\n paint: {\n 'circle-radius': ['interpolate', ['exponential', 2], ['zoom'], 10, 6, 20, 18],\n 'circle-stroke-width': 2,\n 'circle-stroke-color': 'red'\n }\n },\n {\n id: `${sourceId}_prevention_text`,\n type: 'symbol',\n source: sourceId,\n filter: ['match', ['to-number', ['get', 'uc_oob_type']], [PreventionEnums.CONTACTLINEEND, PreventionEnums.ONESTOP, PreventionEnums.STATIONBOUND], true, false],\n maxzoom: 22,\n minzoom: 12,\n layout: {\n 'text-field': [\n 'case',\n ['==', ['to-number', ['get', 'uc_oob_type']], PreventionEnums.ONESTOP],\n '停',\n ['==', ['to-number', ['get', 'uc_oob_type']], PreventionEnums.STATIONBOUND],\n '界',\n ['==', ['to-number', ['get', 'uc_oob_type']], PreventionEnums.DOOR],\n '门',\n ''\n ],\n 'text-font': ['Arial Unicode MS Bold'],\n 'text-size': ['interpolate', ['linear'], ['zoom'], 10, 4, 20, 16],\n 'text-anchor': 'center',\n 'symbol-placement': 'point',\n 'text-allow-overlap': true\n },\n paint: { 'text-color': 'white' }\n },\n {\n id: `${sourceId}_prevention_crossing`,\n type: 'circle',\n source: sourceId,\n maxzoom: 22,\n minzoom: 14,\n filter: ['match', ['to-number', ['get', 'uc_oob_type']], [PreventionEnums.RAILWAYCROSS], true, false],\n paint: {\n 'circle-radius': ['interpolate', ['exponential', 2], ['zoom'], 10, 3, 20, 6],\n 'circle-stroke-width': 2.5,\n 'circle-stroke-color': [\n 'case',\n ['==', ['feature-state', 'state'], 2],\n 'red',\n ['==', ['feature-state', 'state'], 1],\n 'green',\n ['==', ['feature-state', 'state'], 255],\n 'white',\n 'yellow'\n ],\n 'circle-color': '#ff6600'\n }\n },\n {\n id: `${sourceId}_prevention_doorcircle`,\n type: 'circle',\n source: sourceId,\n maxzoom: 22,\n minzoom: 12,\n filter: ['match', ['to-number', ['get', 'uc_oob_type']], [PreventionEnums.DOOR], true, false],\n paint: {\n 'circle-radius': ['interpolate', ['exponential', 2], ['zoom'], 10, 6, 20, 18],\n 'circle-stroke-width': 2,\n 'circle-stroke-color': [\n 'case',\n ['==', ['feature-state', 'state'], 2],\n 'red',\n ['==', ['feature-state', 'state'], 1],\n 'green',\n ['==', ['feature-state', 'state'], 255],\n 'white',\n 'yellow'\n ]\n }\n },\n {\n id: `${sourceId}_prevention_doortext`,\n type: 'symbol',\n source: sourceId,\n filter: ['match', ['to-number', ['get', 'uc_oob_type']], [PreventionEnums.DOOR], true, false],\n maxzoom: 22,\n minzoom: 12,\n layout: {\n 'text-field': '门',\n 'text-font': ['Arial Unicode MS Bold'],\n 'text-size': ['interpolate', ['linear'], ['zoom'], 10, 4, 20, 16],\n 'text-anchor': 'center',\n 'symbol-placement': 'point',\n 'text-allow-overlap': true\n },\n paint: {\n 'text-color': [\n 'case',\n ['==', ['feature-state', 'state'], 2],\n 'red',\n ['==', ['feature-state', 'state'], 1],\n 'green',\n ['==', ['feature-state', 'state'], 255],\n 'white',\n 'yellow'\n ]\n }\n }\n ]\n}\n","import type { LayerSpecification } from 'maplibre-gl'\r\n\r\nexport const bridgeLayer = (sourceId: string): LayerSpecification[] => {\r\n return [\r\n {\r\n id: `${sourceId}_label`,\r\n type: 'symbol',\r\n source: sourceId,\r\n maxzoom: 22,\r\n minzoom: 14,\r\n layout: {\r\n 'text-field': ['get', 'name'],\r\n 'text-size': ['interpolate', ['linear'], ['zoom'], 15, 9, 22, 15],\r\n 'text-font': ['Arial Unicode MS Bold'],\r\n 'text-anchor': 'top',\r\n 'text-offset': [0, 0.8],\r\n 'symbol-placement': 'line-center',\r\n 'text-allow-overlap': false\r\n },\r\n paint: {\r\n 'text-color': '#AA00FF'\r\n }\r\n },\r\n {\r\n id: `${sourceId}_border`,\r\n type: 'line',\r\n source: sourceId,\r\n maxzoom: 22,\r\n minzoom: 12,\r\n layout: {\r\n 'line-join': 'round',\r\n 'line-cap': 'butt'\r\n },\r\n paint: {\r\n 'line-color': '#8000FF',\r\n 'line-width': ['interpolate', ['linear'], ['zoom'], 12, 2, 15, 4, 18, 10]\r\n }\r\n },\r\n {\r\n id: `${sourceId}_fill`,\r\n type: 'line',\r\n source: sourceId,\r\n maxzoom: 22,\r\n minzoom: 12,\r\n layout: {\r\n 'line-join': 'round',\r\n 'line-cap': 'butt'\r\n },\r\n paint: {\r\n 'line-color': '#00C853',\r\n 'line-width': ['interpolate', ['linear'], ['zoom'], 11, 0.5, 15, 1, 18, 4]\r\n }\r\n }\r\n ]\r\n}\r\n","import type { LayerSpecification } from 'maplibre-gl'\r\n\r\nexport const tunnelLayer = (sourceId: string): LayerSpecification[] => {\r\n return [\r\n {\r\n id: `${sourceId}_label`,\r\n type: 'symbol',\r\n source: sourceId,\r\n maxzoom: 22,\r\n minzoom: 12,\r\n layout: {\r\n 'text-field': ['concat', ['get', 'name'], '隧道'],\r\n 'text-size': ['interpolate', ['linear'], ['zoom'], 15, 9, 22, 15],\r\n 'text-font': ['Arial Unicode MS Bold'],\r\n 'text-anchor': 'top',\r\n 'text-offset': [0, 0.8],\r\n 'symbol-placement': 'line-center',\r\n 'text-allow-overlap': false\r\n },\r\n paint: {\r\n 'text-color': '#1677ff'\r\n }\r\n },\r\n {\r\n id: `${sourceId}_border`,\r\n type: 'line',\r\n source: sourceId,\r\n maxzoom: 22,\r\n minzoom: 12,\r\n layout: {\r\n 'line-join': 'round',\r\n 'line-cap': 'butt'\r\n },\r\n paint: {\r\n 'line-color': '#1677ff',\r\n 'line-width': ['interpolate', ['linear'], ['zoom'], 12, 2, 15, 4, 18, 10]\r\n }\r\n },\r\n {\r\n id: `${sourceId}_fill`,\r\n type: 'line',\r\n source: sourceId,\r\n maxzoom: 22,\r\n minzoom: 12,\r\n layout: {\r\n 'line-join': 'round',\r\n 'line-cap': 'butt'\r\n },\r\n paint: {\r\n 'line-color': '#FFD600',\r\n 'line-width': ['interpolate', ['linear'], ['zoom'], 11, 0.5, 15, 1, 18, 4]\r\n }\r\n }\r\n ]\r\n}\r\n","import type { SymbolLayerSpecification, ExpressionSpecification } from 'maplibre-gl'\n\nimport { SignalColorEnums } from '@/enums'\n\nexport const regionSignalLayer = (sourceId: string): SymbolLayerSpecification[] => {\n const size: ExpressionSpecification = ['interpolate', ['exponential', 2], ['zoom'], 12, 0.1, 16, 0.3, 18, 0.4, 20, 0.75]\n\n const colorLayers: SymbolLayerSpecification[] = [SignalColorEnums.Red, SignalColorEnums.Green, SignalColorEnums.White, SignalColorEnums.Blue].map((color) => ({\n id: `${sourceId}_signal_${color}`,\n type: 'symbol' as const,\n source: sourceId,\n maxzoom: 22,\n minzoom: 13,\n layout: {\n 'icon-image': `icon-signal-l-l-${color}`,\n 'icon-size': size,\n 'icon-rotate': ['+', 90, ['to-number', ['get', 'angle'], 0]],\n 'icon-allow-overlap': true,\n 'icon-anchor': ['case', ['==', ['get', 'positionSide'], 1], 'bottom-left', 'bottom-right']\n },\n paint: {\n 'icon-opacity': ['case', ['all', ['==', ['feature-state', 'state'], color], ['!=', ['feature-state', 'visiable'], false]] as ExpressionSpecification, 1, 0]\n }\n }))\n\n return [\n ...colorLayers,\n {\n id: `${sourceId}_signal`,\n type: 'symbol',\n source: sourceId,\n maxzoom: 22,\n minzoom: 13,\n layout: {\n 'icon-image': `icon-signal-l-l`,\n 'icon-size': size,\n 'icon-rotate': ['+', 90, ['to-number', ['get', 'angle'], 0]],\n 'icon-allow-overlap': true,\n 'icon-anchor': ['case', ['==', ['get', 'positionSide'], 1], 'bottom-left', 'bottom-right']\n },\n paint: {\n 'icon-opacity': ['case', ['!=', ['feature-state', 'visiable'], false], 1, 0]\n }\n }\n ]\n}\n","import type { LayerSpecification } from 'maplibre-gl'\nimport type { LayerType, RegionLayerType } from '@/types'\n\nimport { backgroundLayer } from './backgroundLayer'\nimport { trackLayer } from './trackLayer'\nimport { trackCircuitLayer } from './trackCircuitLayer'\nimport { signalLayer } from './signalLayer'\nimport { switchLayer } from './switchLayer'\nimport { switchLocLayer } from './switchLocLayer'\nimport { bumperLayer } from './bumperLayer'\nimport { labelLayer } from './labelLayer'\nimport { insulationLayer } from './insulationLayer'\nimport { preventionLayer } from './preventionLayer'\nimport { bridgeLayer } from './bridgeLayer'\nimport { tunnelLayer } from './tunnelLayer'\nimport { regionSignalLayer } from './regionSignalLayer'\n\n// GeoJSON 图层与矢量瓦片图层的区别:每个 source 是独立的 GeoJSON,没有 source-layer\n// sourceId 即为 map.addSource 时使用的 id,也是 geojson 文件对应的图层类型名\nconst GEOJSON_LAYER_MAP: Partial<Record<LayerType | RegionLayerType, (sourceId: string) => LayerSpecification | LayerSpecification[]>> = {\n background: backgroundLayer,\n signal: signalLayer,\n track: trackLayer,\n track_circuit: trackCircuitLayer,\n bumper: bumperLayer,\n switch: switchLayer,\n switch_loc: switchLocLayer,\n insulation: insulationLayer,\n label: labelLayer,\n prevention: preventionLayer,\n bridge: bridgeLayer,\n tunnel: tunnelLayer,\n region_signal: regionSignalLayer\n}\n\n// sourceIds: 每个 layerType 对应的 source id(即 addSource 时的 id)\nexport const createLayerConfigs = (layerTypes: LayerType[] | RegionLayerType[], sourceIds: string[]): LayerSpecification[] => {\n const layers: LayerSpecification[] = []\n\n layerTypes.forEach((layerType, index) => {\n const sourceId = sourceIds[index]\n const LayerFn = GEOJSON_LAYER_MAP[layerType]\n if (!LayerFn) {\n console.warn(`GeoJSON 图层 ${layerType} 尚未实现`)\n return\n }\n if (!sourceId) return\n const result = LayerFn(sourceId)\n if (Array.isArray(result)) {\n layers.push(...result)\n } else {\n layers.push(result)\n }\n })\n\n return layers\n}\n","import type { LayerSpecification } from 'maplibre-gl'\n\nexport const trackLayer = (sourceId: string): LayerSpecification[] => {\n return [\n {\n id: `${sourceId}_track`,\n type: 'line',\n source: sourceId,\n layout: { 'line-join': 'round' },\n paint: {\n 'line-color': '#1677ff',\n 'line-width': 2.5\n }\n }\n ]\n}\n","import type { SymbolLayerSpecification, ExpressionSpecification } from 'maplibre-gl'\n\nimport { SignalColorEnums } from '@/enums'\n\nexport const signalLayer = (sourceId: string): SymbolLayerSpecification[] => {\n const size: ExpressionSpecification = ['interpolate', ['exponential', 2], ['zoom'], 12, 0.1, 16, 0.3, 18, 0.4, 20, 0.75]\n\n const colorLayers: SymbolLayerSpecification[] = [SignalColorEnums.Red, SignalColorEnums.Green, SignalColorEnums.White, SignalColorEnums.Blue].map((color) => ({\n id: `${sourceId}_signal_${color}`,\n type: 'symbol' as const,\n source: sourceId,\n maxzoom: 22,\n minzoom: 13,\n layout: {\n 'icon-image': [\n 'case',\n ['==', ['get', 'installType'], 1],\n ['case', ['==', ['get', 'positionSide'], 1], `icon-signal-h-l-${color}`, `icon-signal-h-r-${color}`],\n ['case', ['==', ['get', 'positionSide'], 1], `icon-signal-l-l-${color}`, `icon-signal-l-r-${color}`]\n ],\n 'icon-size': size,\n 'icon-rotate': ['to-number', ['get', 'angle']],\n 'icon-allow-overlap': true,\n 'icon-anchor': ['case', ['==', ['get', 'positionSide'], 1], 'bottom-left', 'bottom-right']\n },\n paint: {\n 'icon-opacity': ['case', ['all', ['==', ['feature-state', 'state'], color], ['!=', ['feature-state', 'visiable'], false]] as ExpressionSpecification, 1, 0]\n }\n }))\n\n return [\n {\n id: `${sourceId}_signal_label`,\n type: 'symbol',\n source: sourceId,\n maxzoom: 22,\n minzoom: 13,\n layout: {\n 'text-field': ['get', 'name'],\n 'text-size': ['interpolate', ['linear'], ['zoom'], 15, 9, 22, 15],\n 'text-font': ['Open Sans Regular'],\n 'text-anchor': 'bottom',\n 'text-offset': [0, -1],\n 'symbol-placement': 'point',\n 'text-allow-overlap': true\n },\n paint: {\n 'text-color': '#E72D48'\n }\n },\n ...colorLayers,\n {\n id: `${sourceId}_signal`,\n type: 'symbol',\n source: sourceId,\n maxzoom: 22,\n minzoom: 13,\n layout: {\n 'icon-image': [\n 'case',\n ['==', ['get', 'installType'], 1],\n ['case', ['==', ['get', 'positionSide'], 1], 'icon-signal-h-l', 'icon-signal-h-r'],\n ['case', ['==', ['get', 'positionSide'], 1], 'icon-signal-l-l', 'icon-signal-l-r']\n ],\n 'icon-size': size,\n 'icon-rotate': ['to-number', ['get', 'angle']],\n 'icon-allow-overlap': true,\n 'icon-anchor': ['case', ['==', ['get', 'positionSide'], 1], 'bottom-left', 'bottom-right']\n },\n paint: {\n 'icon-opacity': ['case', ['!=', ['feature-state', 'visiable'], false], 1, 0]\n }\n }\n ]\n}\n","import type { LayerSpecification } from 'maplibre-gl'\n\nexport const bumperLayer = (sourceId: string): LayerSpecification[] => {\n return [\n {\n id: `${sourceId}_prevention_circle`,\n type: 'circle',\n source: sourceId,\n maxzoom: 22,\n minzoom: 12,\n paint: {\n 'circle-radius': ['interpolate', ['exponential', 2], ['zoom'], 10, 6, 20, 18],\n 'circle-stroke-width': 2,\n 'circle-stroke-color': 'red'\n }\n },\n {\n id: `${sourceId}_prevention_text`,\n type: 'symbol',\n source: sourceId,\n maxzoom: 22,\n minzoom: 12,\n layout: {\n 'text-field': '挡',\n 'text-font': ['Open Sans Regular'],\n 'text-size': ['interpolate', ['linear'], ['zoom'], 10, 4, 20, 16],\n 'text-anchor': 'center',\n 'symbol-placement': 'point',\n 'text-allow-overlap': true\n },\n paint: { 'text-color': 'white' }\n }\n ]\n}\n","import type { LayerSpecification } from 'maplibre-gl'\n\nimport { PreventionEnums } from '@/enums/preventionEnum'\n\nexport const preventionLayer = (sourceId: string): LayerSpecification[] => {\n return [\n {\n id: `${sourceId}_prevention_circle`,\n type: 'circle',\n source: sourceId,\n maxzoom: 22,\n minzoom: 12,\n filter: ['match', ['to-number', ['get', 'uc_oob_type']], [PreventionEnums.ONESTOP, PreventionEnums.STATIONBOUND], true, false],\n paint: {\n 'circle-radius': ['interpolate', ['exponential', 2], ['zoom'], 10, 6, 20, 18],\n 'circle-stroke-width': 2,\n 'circle-stroke-color': 'red'\n }\n },\n {\n id: `${sourceId}_prevention_text`,\n type: 'symbol',\n source: sourceId,\n filter: ['match', ['to-number', ['get', 'uc_oob_type']], [PreventionEnums.CONTACTLINEEND, PreventionEnums.ONESTOP, PreventionEnums.STATIONBOUND], true, false],\n maxzoom: 22,\n minzoom: 12,\n layout: {\n 'text-field': [\n 'case',\n ['==', ['to-number', ['get', 'uc_oob_type']], PreventionEnums.ONESTOP],\n '停',\n ['==', ['to-number', ['get', 'uc_oob_type']], PreventionEnums.STATIONBOUND],\n '界',\n ['==', ['to-number', ['get', 'uc_oob_type']], PreventionEnums.DOOR],\n '门',\n ''\n ],\n 'text-font': ['Open Sans Regular'],\n 'text-size': ['interpolate', ['linear'], ['zoom'], 10, 4, 20, 16],\n 'text-anchor': 'center',\n 'symbol-placement': 'point',\n 'text-allow-overlap': true\n },\n paint: { 'text-color': 'white' }\n },\n {\n id: `${sourceId}_prevention_crossing`,\n type: 'circle',\n source: sourceId,\n maxzoom: 22,\n minzoom: 14,\n filter: ['match', ['to-number', ['get', 'uc_oob_type']], [PreventionEnums.RAILWAYCROSS], true, false],\n paint: {\n 'circle-radius': ['interpolate', ['exponential', 2], ['zoom'], 10, 3, 20, 6],\n 'circle-stroke-width': 2.5,\n 'circle-stroke-color': [\n 'case',\n ['==', ['feature-state', 'state'], 0],\n 'red',\n ['==', ['feature-state', 'state'], 1],\n 'green',\n ['==', ['feature-state', 'state'], 2],\n 'white',\n 'yellow'\n ],\n 'circle-color': '#ff6600'\n }\n },\n {\n id: `${sourceId}_prevention_doorcircle`,\n type: 'circle',\n source: sourceId,\n maxzoom: 22,\n minzoom: 12,\n filter: ['match', ['to-number', ['get', 'uc_oob_type']], [PreventionEnums.DOOR], true, false],\n paint: {\n 'circle-radius': ['interpolate', ['exponential', 2], ['zoom'], 10, 6, 20, 18],\n 'circle-stroke-width': 2,\n 'circle-stroke-color': [\n 'case',\n ['==', ['feature-state', 'state'], 0],\n 'red',\n ['==', ['feature-state', 'state'], 1],\n 'green',\n ['==', ['feature-state', 'state'], 2],\n 'white',\n 'yellow'\n ]\n }\n },\n {\n id: `${sourceId}_prevention_doortext`,\n type: 'symbol',\n source: sourceId,\n filter: ['match', ['to-number', ['get', 'uc_oob_type']], [PreventionEnums.DOOR], true, false],\n maxzoom: 22,\n minzoom: 12,\n layout: {\n 'text-field': '门',\n 'text-font': ['Open Sans Regular'],\n 'text-size': ['interpolate', ['linear'], ['zoom'], 10, 4, 20, 16],\n 'text-anchor': 'center',\n 'symbol-placement': 'point',\n 'text-allow-overlap': true\n },\n paint: {\n 'text-color': [\n 'case',\n ['==', ['feature-state', 'state'], 0],\n 'red',\n ['==', ['feature-state', 'state'], 1],\n 'green',\n ['==', ['feature-state', 'state'], 2],\n 'white',\n 'yellow'\n ]\n }\n }\n ]\n}\n","import type { LayerSpecification } from 'maplibre-gl'\n\nexport const bridgeLayer = (sourceId: string): LayerSpecification[] => {\n return [\n {\n id: `${sourceId}_label`,\n type: 'symbol',\n source: sourceId,\n maxzoom: 22,\n minzoom: 10,\n layout: {\n 'text-field': ['concat', ['get', 'name'], '大桥'],\n 'text-size': ['interpolate', ['linear'], ['zoom'], 15, 24, 22, 32],\n 'text-font': ['Open Sans Regular'],\n 'text-anchor': 'bottom',\n 'text-offset': [0, 1],\n 'symbol-placement': 'line-center',\n 'text-allow-overlap': false\n },\n paint: {\n 'text-color': '#FF770F'\n }\n },\n {\n id: `${sourceId}_border`,\n type: 'line',\n source: sourceId,\n maxzoom: 22,\n minzoom: 10,\n layout: {\n 'line-join': 'round',\n 'line-cap': 'butt'\n },\n paint: {\n 'line-color': '#FF770F',\n 'line-width': ['interpolate', ['linear'], ['zoom'], 12, 2, 15, 4, 18, 10]\n }\n },\n {\n id: `${sourceId}_fill`,\n type: 'line',\n source: sourceId,\n maxzoom: 22,\n minzoom: 10,\n layout: {\n 'line-join': 'round',\n 'line-cap': 'butt'\n },\n paint: {\n 'line-color': '#00C853',\n 'line-width': ['interpolate', ['linear'], ['zoom'], 11, 0.5, 15, 1, 18, 4]\n }\n }\n ]\n}\n","import type { LayerSpecification } from 'maplibre-gl'\n\nexport const tunnelLayer = (sourceId: string): LayerSpecification[] => {\n return [\n {\n id: `${sourceId}_label`,\n type: 'symbol',\n source: sourceId,\n maxzoom: 22,\n minzoom: 10,\n layout: {\n 'text-field': ['concat', ['get', 'name'], '隧道'],\n 'text-size': ['interpolate', ['linear'], ['zoom'], 15, 24, 22, 32],\n 'text-font': ['Open Sans Regular'],\n 'text-anchor': 'top',\n 'text-offset': [0, 2],\n 'symbol-placement': 'line-center',\n 'text-allow-overlap': false\n },\n paint: {\n 'text-color': '#E6397C'\n }\n },\n {\n id: `${sourceId}_border`,\n type: 'line',\n source: sourceId,\n maxzoom: 22,\n minzoom: 10,\n layout: {\n 'line-join': 'round',\n 'line-cap': 'butt'\n },\n paint: {\n 'line-color': '#E6397C',\n 'line-width': ['interpolate', ['linear'], ['zoom'], 12, 2, 15, 4, 18, 10]\n }\n },\n {\n id: `${sourceId}_fill`,\n type: 'line',\n source: sourceId,\n maxzoom: 22,\n minzoom: 10,\n layout: {\n 'line-join': 'round',\n 'line-cap': 'butt'\n },\n paint: {\n 'line-color': '#FFD600',\n 'line-width': ['interpolate', ['linear'], ['zoom'], 11, 0.5, 15, 1, 18, 4]\n }\n }\n ]\n}\n","import type { SymbolLayerSpecification, ExpressionSpecification } from 'maplibre-gl'\n\nimport { SignalColorEnums } from '@/enums'\n\nexport const regionSignalLayer = (sourceId: string): SymbolLayerSpecification[] => {\n const size: ExpressionSpecification = ['interpolate', ['exponential', 2], ['zoom'], 12, 0.1, 16, 0.3, 18, 0.4, 20, 0.75]\n\n const colorLayers: SymbolLayerSpecification[] = [SignalColorEnums.Red, SignalColorEnums.Green, SignalColorEnums.White, SignalColorEnums.Blue].map((color) => ({\n id: `${sourceId}_signal_${color}`,\n type: 'symbol' as const,\n source: sourceId,\n maxzoom: 22,\n minzoom: 13,\n layout: {\n 'icon-image': `icon-signal-l-l-${color}`,\n 'icon-size': size,\n 'icon-rotate': ['to-number', ['get', 'angle']],\n 'icon-allow-overlap': true,\n 'icon-anchor': ['case', ['==', ['get', 'positionSide'], 1], 'bottom-left', 'bottom-right']\n },\n paint: {\n 'icon-opacity': ['case', ['all', ['==', ['feature-state', 'state'], color], ['!=', ['feature-state', 'visiable'], false]] as ExpressionSpecification, 1, 0]\n }\n }))\n\n return [\n {\n id: `${sourceId}_signal_label`,\n type: 'symbol',\n source: sourceId,\n maxzoom: 22,\n minzoom: 13,\n layout: {\n 'text-field': ['get', 'name'],\n 'text-size': ['interpolate', ['linear'], ['zoom'], 15, 9, 22, 15],\n 'text-font': ['Open Sans Regular'],\n 'text-anchor': 'bottom',\n 'text-offset': [0, -1],\n 'symbol-placement': 'point',\n 'text-allow-overlap': true\n },\n paint: {\n 'text-color': '#E72D48'\n }\n },\n ...colorLayers,\n {\n id: `${sourceId}_signal`,\n type: 'symbol',\n source: sourceId,\n maxzoom: 22,\n minzoom: 13,\n layout: {\n 'icon-image': `icon-signal-l-l`,\n 'icon-size': size,\n 'icon-rotate': ['to-number', ['get', 'angle']],\n 'icon-allow-overlap': true,\n 'icon-anchor': ['case', ['==', ['get', 'positionSide'], 1], 'bottom-left', 'bottom-right']\n },\n paint: {\n 'icon-opacity': ['case', ['!=', ['feature-state', 'visiable'], false], 1, 0]\n }\n }\n ]\n}\n","import type { LayerSpecification } from 'maplibre-gl'\nimport type { LayerType, RegionLayerType } from '@/types'\n\nimport { trackLayer } from './trackLayer'\nimport { signalLayer } from './signalLayer'\nimport { bumperLayer } from './bumperLayer'\nimport { preventionLayer } from './preventionLayer'\nimport { bridgeLayer } from './bridgeLayer'\nimport { tunnelLayer } from './tunnelLayer'\nimport { regionSignalLayer } from './regionSignalLayer'\n\n// GeoJSON 图层与矢量瓦片图层的区别:每个 source 是独立的 GeoJSON,没有 source-layer\n// sourceId 即为 map.addSource 时使用的 id,也是 geojson 文件对应的图层类型名\nconst GEOJSON_GEOM_LAYER_MAP: Partial<Record<LayerType | RegionLayerType, (sourceId: string) => LayerSpecification | LayerSpecification[]>> = {\n signal: signalLayer,\n track: trackLayer,\n bumper: bumperLayer,\n prevention: preventionLayer,\n bridge: bridgeLayer,\n tunnel: tunnelLayer,\n region_signal: regionSignalLayer\n}\n\n// sourceIds: 每个 layerType 对应的 source id(即 addSource 时的 id)\nexport const createLayerConfigs = (layerTypes: LayerType[] | RegionLayerType[], sourceIds: string[]): LayerSpecification[] => {\n const layers: LayerSpecification[] = []\n\n layerTypes.forEach((layerType, index) => {\n const sourceId = sourceIds[index]\n const LayerFn = GEOJSON_GEOM_LAYER_MAP[layerType]\n if (!LayerFn) {\n console.warn(`GeoJSON 图层 ${layerType} 尚未实现`)\n return\n }\n if (!sourceId) return\n const result = LayerFn(sourceId)\n if (Array.isArray(result)) {\n layers.push(...result)\n } else {\n layers.push(result)\n }\n })\n\n return layers\n}\n","import { createLayerConfigs as Graphlayer } from './graph-layer'\nimport { createLayerConfigs as Geomlayer } from './geom-layer'\nimport { rasterLayer } from './raster-layer'\nimport { createLayerConfigs as GeoJsonLayer } from './geojson-layer'\nimport { createLayerConfigs as GeoJsonGeomLayer } from './geojson-geom-layer'\n\nexport const LayerFactory = {\n graph: Graphlayer,\n geom: Geomlayer,\n raster: rasterLayer,\n geojson: GeoJsonLayer,\n geojsonGeom: GeoJsonGeomLayer\n}\n","import type * as maplibregl from 'maplibre-gl'\nimport type { TeeeMap } from '@/core/teeeMap'\nimport type { AddLayerObject } from 'maplibre-gl'\n\nimport { SourceFactory } from '@/modules/source-factory'\nimport { VectorTile } from '@mapbox/vector-tile'\nimport { PbfReader } from 'pbf'\n\n/**\n * 添加矢量瓦片源 (封装 graph/geom)\n * @param id 源ID\n * @param url 瓦片服务URL (支持 {z}/{x}/{y})\n */\nfunction addVectorTileSource(this: TeeeMap, id: string, url: string): void {\n const map = this.map\n if (!map) return\n if (!map.getSource(id)) {\n // 默认使用 graph 配置,你也可以根据需要切换\n const config = SourceFactory.graph(url)\n map.addSource(id, config)\n }\n}\n\n/**\n * 添加栅格瓦片源 (封装 raster)\n * @param id 源ID\n * @param url 瓦片服务URL\n */\nfunction addRasterTileSource(this: TeeeMap, id: string, url: string): void {\n const map = this.map\n if (!map) return\n\n if (!map.getSource(id)) {\n const config = SourceFactory.raster(url)\n map.addSource(id, config)\n }\n}\n\n/**\n * 添加 GeoJSON 源\n * @param id 源的唯一标识\n * @param data GeoJSON 数据对象 (可选,默认为空 FeatureCollection)\n * @returns this (支持链式调用)\n */\nfunction addGeoJsonSource(this: TeeeMap, id: string, data?: GeoJSON.GeoJSON): void {\n const map = this.map\n if (!map) {\n console.error('地图实例未初始化')\n return\n }\n\n try {\n if (!map.getSource(id)) {\n // 使用工厂创建配置,如果传入了 data 则使用传入的数据\n const sourceConfig = data ? SourceFactory.geojson(data) : SourceFactory.geojson(undefined)\n\n map.addSource(id, sourceConfig)\n console.log(`成功添加 GeoJSON 源: ${id}`)\n } else {\n console.warn(`源已存在,跳过添加: ${id}`)\n }\n } catch (error) {\n console.error(` 添加源失败 [${id}]:`, error)\n }\n}\n\n/**\n * 移除源 (会自动处理依赖该源的图层)\n * @param id 源的标识\n * @returns this\n */\nfunction removeSource(this: TeeeMap, id: string) {\n const map = this.map\n if (!map) return\n\n if (map.getSource(id)) {\n try {\n // 获取所有图层\n const layers = map.getStyle().layers || []\n\n // 找到所有使用该源的图层\n const layersToRemove = layers.filter((layer) => {\n // 类型守卫:检查 layer 对象是否有 source 属性\n if ('source' in layer) {\n // 如果存在,再比较是否等于目标 id\n return layer.source === id\n }\n // 如果没有 source 属性(如 background 层),直接返回\n return\n })\n\n // 先移除图层 (MapLibre 不允许直接移除正在被图层使用的源)\n layersToRemove.forEach((layer) => {\n map.removeLayer(layer.id)\n console.log(`移除关联图层: ${layer.id}`)\n })\n\n // 移除源\n map.removeSource(id)\n console.log(`成功移除源: ${id}`)\n } catch (error) {\n console.error(`移除源失败 [${id}]:`, error)\n }\n } else {\n console.warn(`源不存在,无法移除: ${id}`)\n }\n}\n\n/**\n * 更新现有 GeoJSON 源的数据\n * @param id 源的标识\n * @param data 新的 GeoJSON 数据\n */\nfunction updateGeoJsonSource(this: TeeeMap, id: string, data: GeoJSON.GeoJSON) {\n const map = this.map\n if (!map) return\n\n const source = map.getSource(id)\n if (source) {\n // 使用 MapLibre 的 setData 方法\n // @ts-expect-error - MapLibre GeoJSONSource 有 setData 方法\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n source.setData(data)\n console.log(`更新源数据: ${id}`)\n } else {\n // 如果源不存在,则创建\n this.addGeoJsonSource(id, data)\n }\n}\n\n/**\n * 获取 GeoJSON 源的当前数据(返回 FeatureCollection 副本,可修改后写回)\n * @param id 源的标识\n */\nfunction getGeoJsonSourceData(this: TeeeMap, id: string): GeoJSON.FeatureCollection | null {\n const map = this.map\n if (!map) return null\n const source = map.getSource(id)\n if (!source) return null\n const features = map.querySourceFeatures(id)\n return JSON.parse(JSON.stringify({ type: 'FeatureCollection', features })) as GeoJSON.FeatureCollection\n}\n\n/**\n * 添加 GeoJSON 图层\n * @param layerId 图层ID\n * @param sourceId 绑定的源ID (必须先存在)\n * @param type 图层类型 ('fill' | 'line' | 'circle' | 'symbol')\n * @param paint 样式配置 (颜色、宽度等)\n * @param layout 布局配置 (图标、对齐方式等)\n */\nfunction addGeoJsonLayer(\n this: TeeeMap,\n layerId: string,\n sourceId: string,\n type: 'fill' | 'line' | 'circle' | 'symbol' = 'fill',\n paint?: Record<string, unknown>,\n layout?: Record<string, unknown>\n): void {\n const map = this.map\n if (!map) return\n\n if (!map.getSource(sourceId)) {\n console.error(`无法添加图层: 源 '${sourceId}' 不存在`)\n return\n }\n\n if (map.getLayer(layerId)) {\n map.removeLayer(layerId)\n }\n\n // 默认样式\n const defaultPaint: Record<string, unknown> = {}\n if (type === 'fill') defaultPaint['fill-color'] = '#3b82f6'\n if (type === 'line') defaultPaint['line-color'] = '#3b82f6'\n if (type === 'circle') defaultPaint['circle-color'] = '#3b82f6'\n\n const layerConfig = {\n id: layerId,\n type: type,\n source: sourceId,\n paint: { ...defaultPaint, ...paint },\n layout: layout || {}\n }\n map.addLayer(layerConfig as AddLayerObject)\n return\n}\n/**\n * 动态更新图层样式 (Paint属性)\n * @param layerId 图层ID\n * @param paint 新的样式对象\n */\nfunction updateLayerStyle(this: TeeeMap, layerId: string, paint: Record<string, unknown>): void {\n const map = this.map\n if (!map) return\n\n if (map.getLayer(layerId)) {\n // 遍历 paint 对象,逐个设置属性\n Object.keys(paint).forEach((key) => {\n map.setPaintProperty(layerId, key as keyof maplibregl.AllPaintProperties, paint[key] as string | number)\n })\n console.log(`样式已更新: ${layerId}`)\n } else {\n console.warn(` 图层不存在,无法更新样式: ${layerId}`)\n }\n}\n/**\n * 移除图层\n * @param layerId 图层ID\n */\nfunction removeLayer(this: TeeeMap, layerId: string): void {\n const map = this.map\n if (!map) return\n\n if (map.getLayer(layerId)) {\n map.removeLayer(layerId)\n console.log(`图层已移除: ${layerId}`)\n } else {\n console.warn(` 图层不存在,无法删除: ${layerId}`)\n }\n return\n}\n/**\n * 添加要素点击交互\n * @param layerIds 需要监听的图层ID数组 (例如 ['layer-point', 'layer-polygon'])\n * @param callback 点击后的回调函数,返回被点击的要素属性\n */\nfunction onFeatureClick(this: TeeeMap, layerIds: string | string[], callback: (feature: maplibregl.MapGeoJSONFeature, lngLat: maplibregl.LngLat) => void): void {\n const map = this.map\n if (!map) return\n\n // 统一处理成数组\n const layers = Array.isArray(layerIds) ? layerIds : [layerIds]\n\n map.on('click', (e) => {\n // 查询点击位置渲染到的要素\n // bbox 设置为 0 宽高,相当于点击的一个点\n const features = map.queryRenderedFeatures(e.point, { layers })\n\n // 如果没有查到要素,直接返回\n if (!features.length) {\n return\n }\n\n // 获取第一个要素(如果重叠,通常取最上面的)\n const feature = features[0]!\n\n // 执行回调\n callback(feature, e.lngLat)\n })\n\n // 改变鼠标样式 (覆盖所有监听图层)\n map.on('mouseenter', layers, () => {\n map.getCanvas().style.cursor = 'pointer'\n })\n\n map.on('mouseleave', layers, () => {\n map.getCanvas().style.cursor = ''\n })\n\n return\n}\n\n// ─── fetchAllTiles 内部工具函数 ──────────────────────────────\n\n/** 经纬度 → 指定 zoom 下的 tile x/y(XYZ 方案) */\nfunction lngLatToTile(lng: number, lat: number, z: number): { x: number; y: number } {\n const n = 2 ** z\n const x = Math.floor(((lng + 180) / 360) * n)\n const latRad = (lat * Math.PI) / 180\n const y = Math.floor(((1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2) * n)\n return { x, y }\n}\n\n/** 根据 bounds + zoom 返回覆盖该区域的所有 tile 坐标(TMS,y 翻转) */\nfunction getTileCoords(bounds: [number, number, number, number], zoom: number): { x: number; y: number; z: number }[] {\n const [west, south, east, north] = bounds\n const maxTile = 2 ** zoom - 1\n const topLeft = lngLatToTile(west, north, zoom)\n const bottomRight = lngLatToTile(east, south, zoom)\n\n // clamp 到有效范围\n const minX = Math.max(0, topLeft.x)\n const maxX = Math.min(maxTile, bottomRight.x)\n const minY = Math.max(0, topLeft.y)\n const maxY = Math.min(maxTile, bottomRight.y)\n\n const tiles: { x: number; y: number; z: number }[] = []\n for (let x = minX; x <= maxX; x++) {\n for (let y = minY; y <= maxY; y++) {\n // TMS 方案:Y 轴翻转\n tiles.push({ x, y: maxTile - y, z: zoom })\n }\n }\n return tiles\n}\n\n/**\n * 拉取指定范围所有矢量瓦片(PBF)的全部要素,突破 querySourceFeatures 的视口限制。\n * 拉取到的要素直接写入 stashFeatures 缓存。\n * @param zoom - 可选,瓦片 zoom 级别,默认取当前地图 zoom 向下取整\n */\nasync function fetchAllTiles(this: TeeeMap, zoom?: number): Promise<void> {\n const sourceUrl = this.mapConfigs?.sourceUrl\n if (!sourceUrl) {\n console.warn('fetchAllTiles: 未找到 sourceUrl')\n return\n }\n\n const bounds = this.map.getBounds().toArray().flat() as [number, number, number, number]\n const z = zoom ?? Math.floor(this.map.getZoom())\n\n // 限流:zoom 太低时瓦片数量爆炸\n if (z < 8) {\n console.warn(`fetchAllTiles: zoom=${z} 太低了,瓦片数量会非常多,已跳过`)\n return\n }\n\n const tiles = getTileCoords(bounds, z)\n console.log(`fetchAllTiles: 准备拉取 ${tiles.length} 个瓦片 (zoom=${z}, bounds=${bounds.join(',')})`)\n\n let fetched = 0\n // 并发抓取所有瓦片\n const results = await Promise.allSettled(\n tiles.map(async ({ x, y }) => {\n const url = sourceUrl.replace('{z}', String(z)).replace('{x}', String(x)).replace('{y}', String(y))\n const resp = await fetch(url)\n if (!resp.ok) throw new Error(`HTTP ${resp.status}`)\n const buffer = await resp.arrayBuffer()\n return { x, y, buffer }\n })\n )\n\n for (const result of results) {\n if (result.status === 'rejected') {\n console.warn(result.reason)\n continue\n }\n const { x, y, buffer } = result.value\n\n try {\n const vt = new VectorTile(new PbfReader(new Uint8Array(buffer)))\n\n for (const [layerName, layer] of Object.entries(vt.layers)) {\n for (let i = 0; i < layer.length; i++) {\n const feature = layer.feature(i)\n // toGeoJSON 将像素坐标转为 EPSG:4326\n const geojson = feature.toGeoJSON(x, y, z)\n const code = feature.properties.code as string | undefined\n if (code && !this.stashFeatures.get(code)) {\n this.stashFeatures.set(code, {\n sourceLayer: layerName,\n properties: geojson.properties\n })\n }\n }\n }\n fetched++\n } catch {\n // 非 PBF 或解码失败,跳过\n }\n }\n\n console.log(`fetchAllTiles: 成功拉取 ${fetched}/${tiles.length} 个瓦片,缓存共 ${this.stashFeatures.size} 条要素`)\n}\n\n/**\n * 基础工具挂载函数\n */\nexport default function baseTool(target: TeeeMap) {\n target.fetchAllTiles = fetchAllTiles\n // target.addGeoJsonSource = addGeoJsonSource;\n target.addGeoJsonSource = addGeoJsonSource\n target.addVectorTileSource = addVectorTileSource\n target.addRasterTileSource = addRasterTileSource\n target.updateGeoJsonSource = updateGeoJsonSource\n target.getGeoJsonSourceData = getGeoJsonSourceData\n target.removeSource = removeSource\n target.addGeoJsonLayer = addGeoJsonLayer\n target.updateLayerStyle = updateLayerStyle\n target.removeLayer = removeLayer\n target.onFeatureClick = onFeatureClick\n}\n","export interface InterlockItem {\n name: string\n state: string\n}\n\nexport interface InterlockData {\n signalInterlock: InterlockItem[]\n switchInterlock: InterlockItem[]\n circuitInterlock: InterlockItem[]\n}\n\n/**\n * 信号联锁协议解析器。\n * 解析格式:时间&站码[&厂家信息]&信号机&道岔&区段\n */\nexport class InterlockProtocol {\n public signalExist = true\n public productInfo?: string\n public stationCode?: string\n public time?: string\n\n private interlockInfo = new Map<string, InterlockData>()\n\n getProductInfo(): string | undefined {\n return this.productInfo\n }\n\n getStCode(): string | undefined {\n return this.stationCode\n }\n\n getInterlockInfo(): Map<string, InterlockData> {\n return this.interlockInfo\n }\n\n isSignalExist(): boolean {\n return this.signalExist\n }\n\n setYardSignal(signal: string): void {\n const splitInfoList = signal.split('&')\n this.time = splitInfoList[0] ?? ''\n\n const signalsInfoList: InterlockItem[] = []\n const switchsInfoList: InterlockItem[] = []\n const circuitsInfoList: InterlockItem[] = []\n\n this.stationCode = splitInfoList[1] ?? ''\n const yardCode = splitInfoList[1]\n\n let startOffset = 0\n if (splitInfoList.length === 6) {\n this.productInfo = splitInfoList[2] ?? ''\n startOffset = 1\n }\n\n const yardProduct = splitInfoList[2]\n const key = yardCode + ':' + yardProduct\n\n // 信号机信息\n if (splitInfoList[2 + startOffset]) {\n const signalsInfo = splitInfoList[2 + startOffset]!.split(';')\n for (const signalInfo of signalsInfo) {\n const parts = signalInfo.split(':')\n signalsInfoList.push({\n name: parts[0] + ':' + yardCode,\n state: parts[1] ?? ''\n })\n }\n }\n\n // 道岔信息\n if (splitInfoList[3 + startOffset]) {\n const switchsInfo = splitInfoList[3 + startOffset]!.split(';')\n for (const switchInfo of switchsInfo) {\n const parts = switchInfo.split(':')\n switchsInfoList.push({\n name: parts[0] + ':' + yardCode,\n state: parts[1] ?? ''\n })\n }\n }\n\n // 区段信息\n if (splitInfoList[4 + startOffset]) {\n const circuitsInfo = splitInfoList[4 + startOffset]!.split(';')\n for (const circuitInfo of circuitsInfo) {\n const parts = circuitInfo.split(':')\n circuitsInfoList.push({\n name: parts[0] + ':' + yardCode,\n state: parts[1] ?? ''\n })\n }\n }\n\n this.interlockInfo.set(key, {\n signalInterlock: signalsInfoList,\n switchInterlock: switchsInfoList,\n circuitInterlock: circuitsInfoList\n })\n }\n\n reset(): void {\n // 保留以兼容调用方\n }\n\n resetInterlockInfo(): void {\n this.interlockInfo = new Map()\n }\n}\n","import type * as maplibregl from 'maplibre-gl'\n\nexport interface InsulationSignals {\n upsignal: string | null\n downsignal: string | null\n}\n\n/**\n * 绝缘节与信号机双向映射管理器。\n * 维护 绝缘节→信号机 和 信号机→绝缘节 两张 Map。\n */\nexport class InterLockInsulation {\n /** Map<绝缘节 id, { upsignal, downsignal }> */\n private insulationSignalMap = new Map<string, InsulationSignals>()\n /** Map<信号机 id, 绝缘节 id-name> */\n private signalInsulationMap = new Map<string, string>()\n\n /**\n * 从 maplibre-gl querySourceFeatures 返回的要素数组初始化映射。\n * @param features 绝缘节图层要素列表\n */\n setInsulation(features: maplibregl.GeoJSONFeature[]): void {\n this.insulationSignalMap.clear()\n this.signalInsulationMap.clear()\n\n if (features.length === 0) {\n console.warn('没有绝缘节数据!')\n }\n\n features.forEach((f) => {\n const id = String(f.id ?? f.properties.code ?? '')\n const upsignal = (f.properties.upSignal as string | null) ?? null\n const downsignal = (f.properties.downSignal as string | null) ?? null\n const name = (f.properties.name as string | null) ?? ''\n\n this.insulationSignalMap.set(id, { upsignal, downsignal })\n\n if (upsignal !== null) {\n this.signalInsulationMap.set(upsignal, id + '-' + name)\n }\n if (downsignal !== null) {\n this.signalInsulationMap.set(downsignal, id + '-' + name)\n }\n })\n }\n\n /** 通过信号机 key 查找对应绝缘节 id-name */\n getInsulationBySignalKey(signalKey: string): string | undefined {\n return this.signalInsulationMap.get(signalKey)\n }\n\n /** 通过绝缘节 id 查找对应信号机 { upsignal, downsignal } */\n getSignalByInsulationKey(insulationKey: string): InsulationSignals | undefined {\n return this.insulationSignalMap.get(insulationKey)\n }\n}\n","import type * as maplibregl from 'maplibre-gl'\nimport { InterlockProtocol, type InterlockData, type InterlockItem } from './interlockProtocol'\nimport { InterLockInsulation, type InsulationSignals } from './interlockInsulation'\nimport { INTERLOCK_SIGNAL_COLOR_MAP } from '@/constants'\n\nexport interface InterlockVisualizationOptions {\n sourceIds?: Record<string, Record<string, string>>\n firstSwitches?: string[]\n updateFeatureState: (code: string | number, state: FeatureState) => void\n queryGeojsonFeatures: (key: string) => maplibregl.GeoJSONFeature[]\n getFeatureState: (code: string | number) => Record<string, unknown>\n}\n\ninterface SignalStateInfo {\n name: string\n state: string\n dir: 'up' | 'down'\n}\n\ninterface CircuitStateResult {\n circuitState: number\n controlName: string\n}\n\nexport interface FeatureState {\n [key: string]: unknown\n state?: string | number\n visiable?: boolean\n select?: boolean\n link?: number | undefined\n controlName?: string\n}\n\nexport class InterLockVisualization {\n private layers: Record<string, Record<string, string>>\n private firstSwitches: string[]\n private updateFeatureState: (code: string | number, state: FeatureState) => void\n private queryGeojsonFeatures: (key: string) => maplibregl.GeoJSONFeature[]\n private getFeatureState: (code: string | number) => Record<string, unknown>\n\n private signalStore = new InterlockProtocol()\n private interLockInsulation = new InterLockInsulation()\n\n /** 当前帧所有联锁状态缓存(信号机/道岔/区段) */\n private interLockState = {\n signal: new Map<string, string>(), // 信号机状态 key: name:stcode\n switch: new Map<string, string>(), // 道岔状态 key: name:stcode\n circuit: new Map<string, string>() // 区段状态 key: name:stcode\n }\n\n /** YD 协议计算白光带时使用的临时数组 */\n private pathCircuits: maplibregl.GeoJSONFeature[] = []\n private pathCircuitsCodes: string[] = []\n private linkWhiteCircuits: maplibregl.GeoJSONFeature[] = []\n\n /** 控制信号发送 */\n private signalEnable = false\n private onSendSignal?: (dataList: string[]) => void\n private stationSignalState: string[] = []\n private filterCodes: string[] = []\n\n constructor(options: InterlockVisualizationOptions) {\n this.firstSwitches = options.firstSwitches ?? []\n this.updateFeatureState = options.updateFeatureState\n this.queryGeojsonFeatures = options.queryGeojsonFeatures\n this.getFeatureState = options.getFeatureState\n\n this.layers = options.sourceIds!\n }\n\n /** 查询指定 source 的所有要素 */\n private queryFeatures(sourceId: string): maplibregl.GeoJSONFeature[] {\n const splitInfo = sourceId.replace('geojson_station_', '')\n return this.queryGeojsonFeatures(splitInfo)\n }\n\n /** 初始化绝缘节映射 */\n public initInsulation(): void {\n const features = this.queryFeatures('insulation')\n this.interLockInsulation.setInsulation(features)\n }\n\n /**\n * 处理一帧信号数据字符串。\n * @param res 原始信号字符串,格式:时间&站码[&厂家信息]&信号机&道岔&区段\n */\n public handleSignalData(res: string): void {\n this.signalStore.resetInterlockInfo()\n if (!res || res.length === 0) {\n this.signalStore.signalExist = false\n } else {\n this.signalStore.signalExist = true\n this.signalStore.setYardSignal(res)\n }\n\n if (!this.signalStore.isSignalExist()) return\n\n const interlocksMap = this.signalStore.getInterlockInfo()\n interlocksMap.forEach((val, key) => {\n const yardCode = key.split(':')[0]\n const yardProduct = key.split(':')[1]\n\n this.arrToMap(this.interLockState.signal, val.signalInterlock)\n this.arrToMap(this.interLockState.switch, val.switchInterlock)\n this.arrToMap(this.interLockState.circuit, val.circuitInterlock)\n\n if (yardProduct === 'ZK01') {\n this.visualizeZK(val, yardProduct, yardCode ?? '')\n } else {\n this.visualizeYD(val, yardProduct ?? '', yardCode ?? '')\n }\n })\n }\n\n public turnOffSignals(): void {\n this.interLockState = {\n signal: new Map(),\n switch: new Map(),\n circuit: new Map()\n }\n }\n\n // #region 状态重置\n private reset(yardCode: string): void {\n this.clearCircuits(yardCode)\n this.clearSwitchLocs(yardCode)\n }\n\n private clearCircuits(yardCode: string): void {\n // 置空所有区段状态\n const features = this.queryFeatures('track_circuit')\n features.forEach((f) => {\n if (f.properties.stcode === yardCode) {\n this.updateFeatureState(f.properties.code as string, { state: '', visiable: true })\n }\n })\n }\n\n private clearSwitchLocs(yardCode: string): void {\n // 置空所有道岔连接部件状态\n const features = this.queryFeatures('switch_loc')\n features.forEach((f) => {\n if (f.properties.stcode === yardCode) {\n this.updateFeatureState(f.properties.code as string, { state: '', visiable: true })\n }\n })\n }\n // endregion\n\n /**\n * ZK01 协议可视化(直接设置状态)\n * @param interlocks InterlockData\n * @param yardProduct string\n * @param yardCode string\n */\n private visualizeZK(interlocks: InterlockData, _yardProduct: string, yardCode: string): void {\n this.reset(yardCode)\n\n // 更新信号机状态(直接设置)\n for (const signalInfo of interlocks.signalInterlock) {\n const name = signalInfo.name.split(':')[0]\n const code = signalInfo.name.split(':')[1]\n const f = this.getSignalFeature(name ?? '', code ?? '')\n\n if (f) {\n this.updateFeatureState(f.properties.code as string, {\n state: INTERLOCK_SIGNAL_COLOR_MAP[Number(signalInfo.state)] as string,\n visiable: true\n })\n }\n }\n\n // 更新道岔状态(直接设置)\n for (const switchInfo of interlocks.switchInterlock) {\n const name = switchInfo.name.split(':')[0]\n const code = switchInfo.name.split(':')[1]\n const items = this.getSwitchLocFeatures(name ?? '', code ?? '', switchInfo.state)\n items.forEach((item) => {\n this.updateFeatureState(item.properties.code as string, { state: switchInfo.state })\n })\n }\n\n // 更新道岔标注\n for (const switchInfo of interlocks.switchInterlock) {\n const name = switchInfo.name.split(':')[0]\n const code = switchInfo.name.split(':')[1]\n const item = this.getSwitchFeatures(name ?? '', code ?? '')\n if (item) {\n this.updateFeatureState(item.properties.code as string, { state: switchInfo.state })\n }\n }\n\n // 更新switch标签状态\n\n // 更新轨道电路区段状态(ZK01 协议直接设置,无需推算白光带)\n for (const circuitInfo of interlocks.circuitInterlock) {\n const name = circuitInfo.name.split(':')[0]\n const code = circuitInfo.name.split(':')[1]\n const f = this.getCircuitFeature(name ?? '', code ?? '')\n // console.log('轨道电路', f);\n if (f) {\n this.updateFeatureState(f.properties.code as string, {\n state: Number(circuitInfo.state),\n visiable: true\n })\n }\n }\n\n // 计算非集中区绿光带,根据非集中区第一个道岔开始找\n this.applyHandSwitchPaths(yardCode, interlocks.switchInterlock)\n }\n\n /**\n * YD 协议可视化(需计算白光带)\n * @param interlocks InterlockData\n * @param yardProduct string\n * @param yardCode string\n */\n private visualizeYD(interlocks: InterlockData, _yardProduct: string, yardCode: string): void {\n this.reset(yardCode)\n\n // 更新信号机状态\n for (const signalInfo of interlocks.signalInterlock) {\n const name = signalInfo.name.split(':')[0]\n const code = signalInfo.name.split(':')[1]\n const f = this.getSignalFeature(name ?? '', code ?? '')\n if (f) {\n this.updateFeatureState(f.properties.code as string, {\n state: INTERLOCK_SIGNAL_COLOR_MAP[Number(signalInfo.state)] as string,\n visiable: true\n })\n }\n }\n\n // 更新道岔状态\n for (const switchInfo of interlocks.switchInterlock) {\n const name = switchInfo.name.split(':')[0]\n const code = switchInfo.name.split(':')[1]\n const items = this.getSwitchLocFeatures(name ?? '', code ?? '', switchInfo.state)\n items.forEach((item) => {\n this.updateFeatureState(item.properties.code as string, { state: switchInfo.state, visiable: true })\n })\n }\n\n // C1: 收集本帧所有区段要素,用于后续白光带链路计算\n this.pathCircuits = []\n this.pathCircuitsCodes = []\n this.linkWhiteCircuits = []\n\n for (const circuitInfo of interlocks.circuitInterlock) {\n const name = circuitInfo.name.split(':')[0]\n const code = circuitInfo.name.split(':')[1]\n const f = this.getCircuitFeature(name ?? '', code ?? '')\n if (f) {\n this.pathCircuits.push(f)\n this.pathCircuitsCodes.push(String(f.properties.code ?? ''))\n }\n }\n\n // C2: 重新计算每个区段的光带状态 - 红光带直接设置,其余根据信号机状态推算白光带\n for (const circuitInfo of interlocks.circuitInterlock) {\n const name = circuitInfo.name.split(':')[0]\n const code = circuitInfo.name.split(':')[1]\n const f = this.getCircuitFeature(name ?? '', code ?? '')\n if (!f) {\n console.warn('没有找到对应的区段YD', circuitInfo.name, circuitInfo.state)\n continue\n }\n\n if (circuitInfo.state === '1') {\n // 红光带直接设置\n this.updateFeatureState(f.properties.code as string, {\n state: circuitInfo.state,\n controlName: '',\n visiable: true\n })\n } else {\n // 根据信号机状态计算是否为白光带\n const fromCode = String(f.properties?.fromCode ?? '')\n const toCode = String(f.properties?.toCode ?? '')\n try {\n const result = this.getCircuitState([fromCode, toCode], null)\n if (result) {\n this.updateFeatureState(f.properties.code as string, {\n state: result.circuitState,\n controlName: result.controlName,\n link: result.controlName !== '' ? 0 : undefined,\n visiable: true\n })\n if (result.controlName !== '') {\n this.linkWhiteCircuits.push(f)\n }\n } else {\n this.updateFeatureState(f.properties.code as string, {\n state: circuitInfo.state,\n visiable: true\n })\n }\n } catch (e: unknown) {\n if (e instanceof Error && e.message !== 'End Loop') throw e\n }\n }\n }\n\n // C3: 根据 linkWhiteCircuits 调整满足条件的灰光带为白光带,同时置 link=1\n const allCircuits = this.queryFeatures('track_circuit')\n allCircuits.forEach((x) => {\n const xCode = String(x.properties?.code ?? '')\n const matched = this.linkWhiteCircuits.find((y) => String(y.properties?.code ?? '') === xCode)\n if (matched) {\n const xState = this.getFeatureState(x.id!)\n if (xState.state !== '2' && xState.state !== 2 && xState.state !== '1' && xState.state !== 1) {\n this.updateFeatureState(x.properties.code as string, {\n state: 2,\n link: 1,\n controlName: (matched.properties?.controlName as string) ?? '',\n visiable: true\n })\n }\n }\n })\n\n // 计算非集中区绿光带,根据非集中区第一个道岔开始找\n this.applyHandSwitchPaths(yardCode, interlocks.switchInterlock)\n }\n //#region 非集中区绿光带\n private applyHandSwitchPaths(yardCode: string, switchInterlock: InterlockItem[]): void {\n // 非集中区没有电路区段,通过 track 要素人工构造绿光带(state=5)\n const handTrackCodes: string[] = []\n for (const startName of this.firstSwitches) {\n this.findHandSwitchPath(startName, yardCode, switchInterlock, handTrackCodes, [])\n }\n // 将找到的 track 要素置为绿光带(state=5)\n handTrackCodes.forEach((trackCode) => {\n this.updateFeatureState(trackCode, { state: 5, visiable: true })\n })\n }\n\n private findHandSwitchPath(startSwitch: string, yardCode: string, signalSwitchList: InterlockItem[], trackCodes: string[], existsSwitch: string[]): void {\n const switchiInfo = this.findSwitchInfo(startSwitch, yardCode, signalSwitchList)\n // 只处理定位(state=2)或反位(state=3)的道岔\n if (!this.validSwitchInfo(switchiInfo)) return\n\n const switchLocItems = this.getSwitchLocFeatures(startSwitch, yardCode, switchiInfo!.state)\n for (const item of switchLocItems) {\n const tCode = String(item.properties?.t_code ?? '')\n const sCode = String(item.properties?.s_code ?? '')\n\n const track = this.getTrackByCode(tCode)\n if (!track) continue\n\n const fromCode = String(track.properties?.fromCode ?? '')\n const toCode = String(track.properties?.toCode ?? '')\n const fromLyr = track.properties?.fromLyr as number\n const toLyr = track.properties?.toLyr as number\n\n let findCode = ''\n let findLyr: number | null = null\n\n if (fromCode === sCode) {\n findCode = toCode\n findLyr = toLyr\n } else if (toCode === sCode) {\n findCode = fromCode\n findLyr = fromLyr\n }\n\n if (findLyr === 2) {\n // 另一端也是道岔(layer=2),继续递归查找\n const findSwitch = this.getSwitchByCode(findCode)\n if (findSwitch) {\n trackCodes.push(tCode)\n const findName = String(findSwitch.properties?.name ?? '')\n const sInfo = this.findSwitchInfo(findName, yardCode, signalSwitchList)\n if (sInfo && this.validSwitchInfo(sInfo) && !existsSwitch.includes(findName)) {\n // 这里不能直接继续找,要先判断下一个道岔开通的是否是本股道(t_code 匹配)\n const doseConnect = this.doseTrackConnectSwitch(tCode, sInfo)\n if (doseConnect) {\n // 连接到的道岔是本股道,继续递归\n existsSwitch.push(startSwitch)\n this.findHandSwitchPath(findName, yardCode, signalSwitchList, trackCodes, existsSwitch)\n }\n }\n }\n } else {\n // 非道岔端点,找到非道岔就终止\n trackCodes.push(tCode)\n }\n }\n }\n\n private doseTrackConnectSwitch(trackCode: string, switchInfo: InterlockItem): boolean {\n const name = switchInfo.name.split(':')[0]\n const yardCode = switchInfo.name.split(':')[1]\n const items = this.getSwitchLocFeatures(name ?? '', yardCode ?? '', switchInfo.state)\n return items.some((item) => String(item.properties?.t_code ?? '') === trackCode)\n }\n //#endregion\n\n //#region 白光带状态计算\n private getCircuitState(insulationKeys: string[], lastSignalState: SignalStateInfo | null): CircuitStateResult {\n let circuitState = 4 // 默认空闲状态\n let whiteSignalState: SignalStateInfo | null = null\n\n try {\n insulationKeys.forEach((insulationKey, _index) => {\n const insulationSignals = this.interLockInsulation.getSignalByInsulationKey(insulationKey)\n let signalState = this.getInsulationSignalState(insulationSignals ?? null)\n\n // 白灯信号机控制方向的区段才置为白光带\n if (lastSignalState === null && signalState !== null) {\n whiteSignalState = signalState\n }\n\n // 中段:无绝缘节信号机,但有上段白灯传递,构造虚拟白灯继续向前推\n if (signalState === null && lastSignalState !== null) {\n signalState = { name: lastSignalState.name, dir: lastSignalState.dir, state: '3' }\n }\n\n // 开放信号机(state=3)=> 锁闭+出清 => 白光带\n if (signalState !== null && signalState.state === '3') {\n circuitState = 2\n // 继续搜索该绝缘节的下一个轨道电路区段,如果不是同向蓝灯,置为白光带\n const linkInsulationKey = insulationKeys.find((k) => k !== insulationKey)\n const nextCircuit = this.findNextCircuit(linkInsulationKey!, signalState)\n if (nextCircuit !== null) {\n const nextInsulationSignals = this.interLockInsulation.getSignalByInsulationKey(linkInsulationKey!)\n const controlSignalState = this.getControlSignalState(nextInsulationSignals ?? null, signalState)\n if (controlSignalState !== 4) {\n // 标记 nextCircuit 的 controlName,加入白光带链路\n const nextFromCode = String(nextCircuit.properties?.fromCode ?? '')\n const nextToCode = String(nextCircuit.properties?.toCode ?? '')\n const markedCircuit = {\n ...nextCircuit,\n properties: { ...nextCircuit.properties, controlName: signalState.name }\n }\n this.linkWhiteCircuits.push(markedCircuit as unknown as maplibregl.GeoJSONFeature)\n this.getCircuitState([nextFromCode, nextToCode], signalState)\n }\n }\n }\n })\n } catch (e: unknown) {\n console.error(e)\n }\n\n return {\n circuitState,\n controlName: whiteSignalState !== null ? (whiteSignalState as SignalStateInfo).name : ''\n }\n }\n\n private findNextCircuit(startInsulationKey: string, signalState: SignalStateInfo): maplibregl.GeoJSONFeature | null {\n const next = this.pathCircuits.find((x) => {\n const fromCode = String(x.properties?.fromCode ?? '')\n const toCode = String(x.properties?.toCode ?? '')\n return (signalState.dir === 'up' && fromCode === startInsulationKey) || (signalState.dir === 'down' && toCode === startInsulationKey)\n })\n if (!next) return null\n\n const alreadyFound = this.linkWhiteCircuits.find((x) => String(x.properties?.code ?? '') === String(next.properties?.code ?? ''))\n return alreadyFound ? null : next\n }\n\n private getInsulationSignalState(insulationSignals: InsulationSignals | null): SignalStateInfo | null {\n if (!insulationSignals) return null\n\n if (insulationSignals.upsignal) {\n const f = this.getSignalById(insulationSignals.upsignal)\n if (f) {\n const name = String(f.properties?.name ?? '')\n const stcode = String(f.properties?.stcode ?? '')\n const state = this.interLockState.signal.get(name + ':' + stcode)\n if (state === '3') return { name, state, dir: 'up' }\n }\n }\n\n if (insulationSignals.downsignal) {\n const f = this.getSignalById(insulationSignals.downsignal)\n if (f) {\n const name = String(f.properties?.name ?? '')\n const stcode = String(f.properties?.stcode ?? '')\n const state = this.interLockState.signal.get(name + ':' + stcode)\n if (state === '3') return { name, state, dir: 'down' }\n }\n }\n\n return null\n }\n\n private getControlSignalState(insulationSignals: InsulationSignals | null, whiteSignalState: SignalStateInfo): string | number | undefined {\n if (!insulationSignals) return undefined\n\n if (whiteSignalState.dir === 'up' && insulationSignals.upsignal) {\n const f = this.getSignalById(insulationSignals.upsignal)\n if (f) {\n const name = String(f.properties?.name ?? '')\n const stcode = String(f.properties?.stcode ?? '')\n return this.interLockState.signal.get(name + ':' + stcode)\n }\n }\n\n if (whiteSignalState.dir === 'down' && insulationSignals.downsignal) {\n const f = this.getSignalById(insulationSignals.downsignal)\n if (f) {\n const name = String(f.properties?.name ?? '')\n const stcode = String(f.properties?.stcode ?? '')\n return this.interLockState.signal.get(name + ':' + stcode)\n }\n }\n\n return undefined\n }\n //#endregion\n\n //#region 要素查找辅助方法\n private getSignalFeature(name: string, yardCode: string): maplibregl.GeoJSONFeature | undefined {\n return this.queryFeatures('signal').find((f) => f.properties?.name === name && String(f.properties?.code ?? '').includes(yardCode))\n }\n\n private getSignalById(id: string): maplibregl.GeoJSONFeature | undefined {\n return this.queryFeatures('signal').find((f) => String(f.id ?? f.properties?.code ?? '') === id)\n }\n\n private getSwitchLocFeatures(name: string, yardCode: string, state: string): maplibregl.GeoJSONFeature[] {\n // 先根据名称和站码找到道岔要素,获取道岔编码\n const switchFeature = this.queryFeatures('switch').find((f) => f.properties?.name === name && String(f.properties?.code ?? '').includes(yardCode))\n\n if (!switchFeature) return []\n\n const switchCode = String(switchFeature.properties?.code ?? '')\n const switchLocFeatures = this.queryFeatures('switch_loc')\n\n if (state === '4') {\n // 四开:直接返回该道岔的所有连接线段\n return switchLocFeatures.filter((f) => String(f.properties?.s_code ?? '') === switchCode)\n }\n\n // 根据道岔编码和 location 找对应的连接线段(含公共线段 location=1)\n return switchLocFeatures.filter(\n (f) => String(f.properties?.s_code ?? '') === switchCode && (String(f.properties?.location ?? '') === state || String(f.properties?.location ?? '') === '1')\n )\n }\n private getSwitchFeatures(name: string, yardCode: string) {\n // 根据名称和站码找到道岔要素\n return this.queryFeatures('switch').find((f) => f.properties?.name === name && String(f.properties?.code ?? '').includes(yardCode))\n }\n\n private getSwitchByCode(code: string): maplibregl.GeoJSONFeature | undefined {\n return this.queryFeatures('switch').find((f) => String(f.id ?? f.properties?.code ?? '') === code)\n }\n\n private getTrackByCode(code: string): maplibregl.GeoJSONFeature | undefined {\n return this.queryFeatures('track').find((f) => String(f.id ?? f.properties?.code ?? '') === code)\n }\n\n private getCircuitFeature(name: string, yardCode: string): maplibregl.GeoJSONFeature | undefined {\n // 通过名称和站码找到所有匹配的轨道电路区段\n const circuits = this.queryFeatures('track_circuit').filter((f) => f.properties?.name === name && String(f.properties?.code ?? '').includes(yardCode))\n\n if (circuits.length === 0) return undefined\n let findCircuit: maplibregl.GeoJSONFeature | undefined\n // 类型1:简单区段,直接返回\n if (circuits.length >= 1 && (circuits[0]!.properties?.type === '1' || circuits[0]!.properties?.type === 1)) {\n return circuits[0]\n }\n\n for (const x of circuits) {\n if (findCircuit) break\n // 类型2:道岔区段,需要根据当前道岔实际状态(定/反位)匹配正确的区段\n if (x.properties?.type === 2 || x.properties?.type === '2') {\n const switchArr = String(x.properties?.switches ?? '').split(',')\n const switchPositionArr = String(x.properties?.positions ?? '')\n .replace(/\\s+/g, '')\n .split(',')\n .filter((p) => p !== '1')\n for (let i = 0; i < switchArr.length; i++) {\n const switchCode = switchArr[i]\n const switchPosition = switchPositionArr[i]\n const switchName = this.getSwitchNameByCode(switchCode ?? '')\n if (!switchName) {\n break\n }\n const switchState = this.interLockState.switch.get(switchName + ':' + switchCode?.substring(0, 9))\n if (switchPosition !== switchState) {\n break\n }\n if (i === switchArr.length - 1) {\n findCircuit = x\n break\n }\n }\n }\n }\n\n return findCircuit\n }\n\n private getSwitchNameByCode(code: string): string | undefined {\n const f = this.queryFeatures('switch').find((f) => String(f.properties?.code ?? '') === code)\n return f ? String(f.properties?.name ?? '') : undefined\n }\n\n private findSwitchInfo(switchName: string, yardCode: string, switchList: InterlockItem[]): InterlockItem | null {\n const key = switchName + ':' + yardCode\n return switchList.find((s) => s.name === key) ?? null\n }\n //#endregion\n\n //#region 其他辅助方法\n private validSwitchInfo(switchInfo: InterlockItem | null): boolean {\n if (!switchInfo) return false\n return switchInfo.state === '2' || switchInfo.state === '3'\n }\n\n private arrToMap(map: Map<string, string>, arr: InterlockItem[]): void {\n arr?.forEach((x) => map.set(x.name, x.state))\n }\n //#endregion\n\n //#region 信号发送\n public startRunning(): void {\n this.signalEnable = true\n }\n\n public stopRunning(): void {\n this.signalEnable = false\n }\n\n /** 设置信号发送回调,回调参数格式与 JS 版 commitManualSignal 一致 */\n public setSendSignalCallback(callback: (dataList: string[]) => void): void {\n this.onSendSignal = callback\n }\n\n // 设置站场信号状态\n public setStationSignalState(stationSignalState: string[], filterCodes: string[] = []) {\n this.stationSignalState = stationSignalState\n this.filterCodes = filterCodes\n }\n\n /**\n * 将当前 interLockState 中的信号机/道岔/区段状态按协议格式组装并通过回调发送。\n * 格式:utc&站码&信号机段&道岔段&区段段\n */\n public sendSignal(): void {\n if (!this.signalEnable) return\n if (this.interLockState.signal.size === 0 && this.interLockState.switch.size === 0 && this.interLockState.circuit.size === 0) {\n return\n }\n\n const utc = Math.floor(Date.now() / 1000)\n const yardList = new Map<string, string>()\n const dataList: string[] = []\n\n // 信号机:按站码分组拼接 name:state;\n this.interLockState.signal.forEach((state, key) => {\n const name = key.split(':')[0]\n const yard = key.split(':')[1]\n let signal = yardList.get(yard ?? '')\n signal = signal ? signal + name + ':' + state + ';' : name + ':' + state + ';'\n yardList.set(yard ?? '', signal)\n })\n yardList.forEach((value, key) => {\n yardList.set(key, (value.endsWith(';') ? value.slice(0, -1) : value) + '&')\n })\n\n // 道岔:state 5/6 需拆分为定/反位 + -F 后缀两条记录\n this.interLockState.switch.forEach((state, key) => {\n const name = key.split(':')[0]\n const yard = key.split(':')[1]\n const stateNum = Number(state)\n let switcher = yardList.get(yard ?? '')\n if (switcher !== undefined) {\n if (stateNum === 5 || stateNum === 6) {\n const newState = stateNum === 5 ? 2 : 3\n switcher += name + ':' + newState + ';'\n switcher += name + '-F:' + state + ';'\n } else {\n switcher += name + ':' + state + ';'\n }\n } else {\n if (stateNum === 5 || stateNum === 6) {\n const newState = stateNum === 5 ? 2 : 3\n switcher = '&' + name + ':' + newState + ';'\n switcher += name + '-F:' + state + ';'\n } else {\n switcher = '&' + name + ':' + state + ';'\n }\n }\n yardList.set(yard ?? '', switcher)\n })\n yardList.forEach((value, key) => {\n yardList.set(key, (value.endsWith(';') ? value.slice(0, -1) : value) + '&')\n })\n\n // 飞场筛选:同名区段红光带(1)或白光带(2)优先\n const newCircuitMap = new Map<string, { name: string; yard: string; state: string }>()\n this.interLockState.circuit.forEach((state, key) => {\n const name = key.split(':')[0] ?? ''\n const yard = key.split(':')[1] ?? ''\n const dedupKey = yard + '_' + name\n const existing = newCircuitMap.get(dedupKey)\n if (existing) {\n if (state === '1' || state === '2') newCircuitMap.set(dedupKey, { name, yard, state })\n } else {\n newCircuitMap.set(dedupKey, { name, yard, state })\n }\n })\n // 轨道电路:无信号机段时前缀 '& &'\n newCircuitMap.forEach((circuitState) => {\n let circuit = yardList.get(circuitState.yard)\n circuit = circuit ? circuit + circuitState.name + ':' + circuitState.state + ';' : '& &' + circuitState.name + ':' + circuitState.state + ';'\n yardList.set(circuitState.yard, circuit)\n })\n\n // 组合信号字符串并收集\n yardList.forEach((value, key) => {\n const v = value.endsWith(';') ? value.slice(0, -1) : value\n dataList.push(utc + '&' + key + '&' + v)\n })\n\n if (dataList.length > 0) {\n this.onSendSignal?.(dataList)\n }\n }\n\n /** 暂停信号:将所有缓存状态清零后发送一次清空帧 */\n public pauseSignal(): void {\n this.interLockState.circuit.forEach((_, key) => this.interLockState.circuit.set(key, '0'))\n this.interLockState.signal.forEach((_, key) => this.interLockState.signal.set(key, '0'))\n this.interLockState.switch.forEach((_, key) => this.interLockState.switch.set(key, '0'))\n this.sendSignal()\n }\n\n /**\n * 读取当前 MapLibre 图层 feature state 直接生成信号字符串并发送,不依赖 interLockState 缓存。\n * 适用于手动修改图层状态后需要立即发送的场景。\n */\n public collectStateAndSend(): void {\n if (!this.signalEnable) return\n const utc = Math.floor(Date.now() / 1000)\n const yardList = new Map<string, string>()\n const dataList: string[] = []\n // signal feature state 存的是 SignalColor 字符串,需反查回协议数字\n const revColor: Record<string, string> = { unset: '0', red: '1', green: '2', white: '3', blue: '4' }\n for (const [_, value] of Object.entries(this.layers)) {\n // 信号机\n for (const f of this.queryFeatures(value.signal?.replace('geojson_station_', '') ?? '')) {\n const name = String(f.properties?.name ?? '')\n const code = String(f.properties?.code ?? '')\n const stcode = String(f.properties?.stcode ?? code.substring(0, 9))\n if (!name || !code || !stcode) continue\n if (!this.stationSignalState.includes(stcode)) continue\n const color = this.filterCodes.length && this.filterCodes.includes(code) ? 'unset' : String((this.getFeatureState(code)?.state as string | number) ?? '')\n if (!color) continue\n const s = revColor[color] ?? color\n const v = yardList.get(stcode)\n yardList.set(stcode, v ? v + name + ':' + s + ';' : name + ':' + s + ';')\n }\n yardList.forEach((v, k) => yardList.set(k, (v.endsWith(';') ? v.slice(0, -1) : v) + '&'))\n\n // 道岔:以 location='1' 的 switch_loc 为基准(每次状态更新必定同步),switch_loc 直接存协议值\n const swLocAll = this.queryFeatures(value.switch_loc?.replace('geojson_station_', '') ?? '')\n for (const sw of this.queryFeatures(value.switch?.replace('geojson_station_', '') ?? '')) {\n const name = String(sw.properties?.name ?? '')\n const code = String(sw.properties?.code ?? '')\n const stcode = String(sw.properties?.stcode ?? code.substring(0, 9))\n if (!name || !code || !stcode) continue\n if (!this.stationSignalState.includes(stcode)) continue\n const refLoc =\n swLocAll.find((f) => String(f.properties?.s_code ?? '') === code && String(f.properties?.location ?? '') === '1') ??\n swLocAll.find((f) => String(f.properties?.s_code ?? '') === code)\n if (!refLoc) continue\n const swState =\n this.filterCodes.length && this.filterCodes.includes(code) ? '0' : String((this.getFeatureState(String(refLoc.properties?.code ?? ''))?.state as string | number) ?? '')\n if (!swState) continue\n const sn = Number(swState)\n let entry = yardList.get(stcode)\n if (entry !== undefined) {\n entry += sn === 5 || sn === 6 ? name + ':' + (sn === 5 ? 2 : 3) + ';' + name + '-F:' + swState + ';' : name + ':' + swState + ';'\n } else {\n entry = '&' + (sn === 5 || sn === 6 ? name + ':' + (sn === 5 ? 2 : 3) + ';' + name + '-F:' + swState + ';' : name + ':' + swState + ';')\n }\n yardList.set(stcode, entry)\n }\n yardList.forEach((v, k) => yardList.set(k, (v.endsWith(';') ? v.slice(0, -1) : v) + '&'))\n\n // 轨道电路:track_circuit 直接存协议值,飞场去重优先红/白光带\n const circuitDedup = new Map<string, { name: string; stcode: string; state: string }>()\n for (const f of this.queryFeatures(value.track_circuit?.replace('geojson_station_', '') ?? '')) {\n const name = String(f.properties?.name ?? '')\n const code = String(f.properties?.code ?? '')\n const stcode = String(f.properties?.stcode ?? code.substring(0, 9))\n if (!name || !code || !stcode) continue\n if (!this.stationSignalState.includes(stcode)) continue\n const state = this.filterCodes.length && this.filterCodes.includes(code) ? '0' : String((this.getFeatureState(code)?.state as string | number) ?? '')\n if (!state) continue\n const dk = stcode + '_' + name\n const ex = circuitDedup.get(dk)\n if (ex) {\n if (state === '1' || state === '2') circuitDedup.set(dk, { name, stcode, state })\n } else {\n circuitDedup.set(dk, { name, stcode, state })\n }\n }\n circuitDedup.forEach((cs) => {\n const entry = yardList.get(cs.stcode)\n yardList.set(cs.stcode, entry ? entry + cs.name + ':' + cs.state + ';' : '& &' + cs.name + ':' + cs.state + ';')\n })\n }\n\n // 组合信号字符串(在所有车站都收集完毕后统一组装)\n yardList.forEach((v, k) => {\n const val = v.endsWith(';') ? v.slice(0, -1) : v\n // dataList.push(utc + '&' + k + '&' + 'ZK01' + '&' + val);\n dataList.push(utc + '&' + k + '&' + val)\n })\n\n if (dataList.length > 0) {\n this.onSendSignal?.(dataList)\n }\n }\n\n /**\n * 读取当前 MapLibre 图层 feature state 直接生成信号字符串\n */\n public collectState(): string[] {\n const utc = Math.floor(Date.now() / 1000)\n const yardList = new Map<string, string>()\n const dataList: string[] = []\n // signal feature state 存的是 SignalColor 字符串,需反查回协议数字\n const revColor: Record<string, string> = { unset: '0', red: '1', green: '2', white: '3', blue: '4' }\n for (const [_, value] of Object.entries(this.layers)) {\n // 信号机\n for (const f of this.queryFeatures(value.signal?.replace('geojson_station_', '') ?? '')) {\n const name = String(f.properties?.name ?? '')\n const code = String(f.properties?.code ?? '')\n const stcode = String(f.properties?.stcode ?? code.substring(0, 9))\n if (!name || !code || !stcode) continue\n const color = this.filterCodes.length && this.filterCodes.includes(code) ? 'unset' : String((this.getFeatureState(code)?.state as string | number) ?? '')\n if (!color) continue\n const s = revColor[color] ?? color\n const v = yardList.get(stcode)\n yardList.set(stcode, v ? v + name + ':' + s + ';' : name + ':' + s + ';')\n }\n yardList.forEach((v, k) => yardList.set(k, (v.endsWith(';') ? v.slice(0, -1) : v) + '&'))\n\n // 道岔:以 location='1' 的 switch_loc 为基准(每次状态更新必定同步),switch_loc 直接存协议值\n const swLocAll = this.queryFeatures(value.switch_loc?.replace('geojson_station_', '') ?? '')\n for (const sw of this.queryFeatures(value.switch?.replace('geojson_station_', '') ?? '')) {\n const name = String(sw.properties?.name ?? '')\n const code = String(sw.properties?.code ?? '')\n const stcode = String(sw.properties?.stcode ?? code.substring(0, 9))\n if (!name || !code || !stcode) continue\n const refLoc =\n swLocAll.find((f) => String(f.properties?.s_code ?? '') === code && String(f.properties?.location ?? '') === '1') ??\n swLocAll.find((f) => String(f.properties?.s_code ?? '') === code)\n if (!refLoc) continue\n const swState =\n this.filterCodes.length && this.filterCodes.includes(code) ? '0' : String((this.getFeatureState(String(refLoc.properties?.code ?? ''))?.state as string | number) ?? '')\n if (!swState) continue\n const sn = Number(swState)\n let entry = yardList.get(stcode)\n if (entry !== undefined) {\n entry += sn === 5 || sn === 6 ? name + ':' + (sn === 5 ? 2 : 3) + ';' + name + '-F:' + swState + ';' : name + ':' + swState + ';'\n } else {\n entry = '&' + (sn === 5 || sn === 6 ? name + ':' + (sn === 5 ? 2 : 3) + ';' + name + '-F:' + swState + ';' : name + ':' + swState + ';')\n }\n yardList.set(stcode, entry)\n }\n yardList.forEach((v, k) => yardList.set(k, (v.endsWith(';') ? v.slice(0, -1) : v) + '&'))\n\n // 轨道电路:track_circuit 直接存协议值,飞场去重优先红/白光带\n const circuitDedup = new Map<string, { name: string; stcode: string; state: string }>()\n for (const f of this.queryFeatures(value.track_circuit?.replace('geojson_station_', '') ?? '')) {\n const name = String(f.properties?.name ?? '')\n const code = String(f.properties?.code ?? '')\n const stcode = String(f.properties?.stcode ?? code.substring(0, 9))\n if (!name || !code || !stcode) continue\n const state = this.filterCodes.length && this.filterCodes.includes(code) ? '0' : String((this.getFeatureState(code)?.state as string | number) ?? '')\n if (!state) continue\n const dk = stcode + '_' + name\n const ex = circuitDedup.get(dk)\n if (ex) {\n if (state === '1' || state === '2') circuitDedup.set(dk, { name, stcode, state })\n } else {\n circuitDedup.set(dk, { name, stcode, state })\n }\n }\n circuitDedup.forEach((cs) => {\n const entry = yardList.get(cs.stcode)\n yardList.set(cs.stcode, entry ? entry + cs.name + ':' + cs.state + ';' : '& &' + cs.name + ':' + cs.state + ';')\n })\n }\n\n // 组合信号字符串(在所有车站都收集完毕后统一组装)\n yardList.forEach((v, k) => {\n const val = v.endsWith(';') ? v.slice(0, -1) : v\n dataList.push(utc + '&' + k + '&' + 'ZK01' + '&' + val)\n // dataList.push(utc + '&' + k + '&' + val);\n })\n\n return dataList\n }\n //#endregion\n}\n","import type * as maplibregl from 'maplibre-gl'\nimport type { TeeeMap } from '@/core/teeeMap'\nimport type { FeatureState } from '../interlock'\n\nimport { InterLockVisualization } from '../interlock'\n\nexport function initGraphState(this: TeeeMap): void {\n if (!this.mapConfigs) return\n const sourceId = this.mapConfigs.id\n this.mapConfigs.sourceLayers?.forEach((l: string) => {\n if (l.includes('switch')) {\n const allFeatures = this.map.querySourceFeatures(sourceId, {\n sourceLayer: l\n })\n allFeatures.forEach((f) => {\n this.initGraphFeatureState!(f)\n })\n } else if (l.includes('signal')) {\n const allFeatures = this.map.querySourceFeatures(sourceId, {\n sourceLayer: l\n })\n allFeatures.forEach((f) => {\n this.initGraphFeatureState!(f)\n return\n })\n } else if (l.includes('track')) {\n const allFeatures = this.map.querySourceFeatures(sourceId, {\n sourceLayer: l\n })\n allFeatures.forEach((f) => {\n this.initGraphFeatureState!(f)\n })\n }\n })\n}\n\nexport function getFeatureTypeByCode(code: string): string {\n if (!code || code.length < 11) return ''\n\n const typeChar11 = code.charAt(10)\n const typeChar10 = code.charAt(9)\n if (typeChar11 === '1' && typeChar10 === '0') {\n return 'track' // 股道\n } else if (typeChar11 === '3') {\n return 'signal' // 信号机\n } else if (typeChar11 === '2' && typeChar10 === '0') {\n return 'switch' // 道岔\n } else if (typeChar11 === '1' && typeChar10 === '1') {\n return 'switch' // switch_loc\n } else if (typeChar11 === '2' && typeChar10 === '1') {\n return 'circuit' // 电路区段\n }\n return ''\n}\n\nexport function initGraphFeatureState(this: TeeeMap, f: maplibregl.GeoJSONFeature): void {\n if (!f) return\n // 判断 f 的类型( 道岔 /电路区段 /信号机 )\n const code = f.properties.code as string\n\n const type = getFeatureTypeByCode(code)\n if (type === 'switch') {\n const initState = {\n state: '', // 股道(封锁1 / 停电2 / 股道无接触网3)\n visiable: true // 是否可见\n }\n initState.state = '2'\n this.updateFeatureState(code, initState)\n } else if (type === 'signal') {\n const properties = f.properties\n const attach = (properties.attach as number) || 0\n const functionType = properties.func_type as number\n const initState = {\n state: '', // 股道(封锁1 / 停电2 / 股道无接触网3)\n visiable: true // 是否可见\n }\n\n if (functionType === 1 && attach === 0) {\n // 列车 + 调车\n initState.state = 'red'\n this.updateFeatureState(code, initState)\n } else if ((functionType === 2 || functionType === 3) && attach === 0) {\n // 列车\n initState.state = 'red'\n this.updateFeatureState(code, initState)\n } else if ((functionType === 2 || functionType === 3 || functionType === 11) && attach === 1) {\n // 列车 + 调车\n initState.state = 'red'\n this.updateFeatureState(code, initState)\n } else if ((functionType === 4 || functionType === 5 || functionType === 12) && attach === 0) {\n // 调车\n initState.state = 'blue'\n this.updateFeatureState(code, initState)\n } else if (functionType === 6 && attach === 0) {\n // 列车\n initState.state = 'red'\n this.updateFeatureState(code, initState)\n } else if ((functionType === 7 || functionType === 11) && attach === 0) {\n // 列车 + 调车\n initState.state = 'red'\n this.updateFeatureState(code, initState)\n } else {\n // 未知\n initState.state = ''\n this.updateFeatureState(code, initState)\n }\n } else if (type === 'signal' || type === 'circuit') {\n const initState = {\n state: '', // 股道(封锁1 / 停电2 / 股道无接触网3)\n visiable: true // 是否可见\n }\n this.updateFeatureState(code, initState)\n }\n}\n\nexport function initMapInterlock(target: TeeeMap): InterLockVisualization | undefined {\n if (!target.mapConfigs) return\n const knownKeys = ['signal', 'switch', 'switch_loc', 'track_circuit', 'track', 'insulation']\n const sourceIds = knownKeys.reduce<Record<(typeof knownKeys)[number], string>>((acc, key) => {\n acc[key] = `geojson_station_${key}`\n return acc\n }, {})\n return new InterLockVisualization({\n sourceIds: { geojson_station: sourceIds },\n updateFeatureState: (code, state: FeatureState) => target.updateFeatureState(code, state),\n queryGeojsonFeatures: (key: string) => target.queryGeojsonFeatures(key),\n getFeatureState: (code: string | number): Record<string, unknown> => target.getFeatureState(code) as Record<string, unknown>\n })\n}\n\nexport default function graphLayerTool(target: TeeeMap): void {\n target.initGraphFeatureState = initGraphFeatureState\n // target.initState = initGraphState;\n target.interLockVisualization = initMapInterlock(target)\n}\n","import type * as maplibregl from 'maplibre-gl'\nimport type { TeeeMap } from '@/core/teeeMap'\nimport type { FeatureState } from '../interlock/interlockVisualization'\n\nimport { InterLockVisualization } from '../interlock'\n\nexport function initGeoJsonState(this: TeeeMap): void {\n if (!this.mapConfigs) return\n if (this.stashFeatures.size === 0) return\n const layerTypes = this.mapConfigs.layers ?? []\n layerTypes.forEach((layerType: string) => {\n const sourceId = `geojson_${layerType}`\n if (!this.map.getSource(sourceId)) return\n this.stashFeatures.forEach((value) => {\n if (value.sourceLayer !== sourceId || !value.properties) return\n this.initGeoJsonFeatureState!({ properties: value.properties } as maplibregl.GeoJSONFeature, layerType)\n })\n })\n}\n\nexport function initMixGeoJsonMapState(this: TeeeMap): void {\n if (this.mixingMapConfigs.size === 0) return\n if (this.stashFeatures.size === 0) return\n for (const [key, value] of this.mixingMapConfigs) {\n const type = value.type\n const layerTypes = value.layers ?? []\n layerTypes.forEach((layerType: string) => {\n const sourceId = `geojson_${type}_${key}_${layerType}`\n if (!this.map.getSource(sourceId)) return\n this.stashFeatures.forEach((value) => {\n if (value.sourceLayer !== sourceId || !value.properties) return\n this.initGeoJsonFeatureState!({ properties: value.properties } as maplibregl.GeoJSONFeature, layerType)\n })\n })\n }\n}\n\nexport function initGeoJsonFeatureState(this: TeeeMap, f: maplibregl.GeoJSONFeature, layerType: string): void {\n if (!f) return\n const properties = f.properties\n const code = properties?.code as string\n if (!code) return\n\n if (layerType === 'switch' || layerType === 'switch_loc') {\n const initState = { state: '2', visiable: true }\n this.updateFeatureState(code, initState)\n } else if (layerType === 'signal') {\n const attach = (properties?.attach as number) || 0\n const functionType = properties?.functionType as number\n const initState = { state: '', visiable: true }\n\n if (\n (functionType === 1 && attach === 0) ||\n ((functionType === 2 || functionType === 3) && attach === 0) ||\n ((functionType === 2 || functionType === 3 || functionType === 11) && attach === 1) ||\n (functionType === 6 && attach === 0) ||\n ((functionType === 7 || functionType === 11) && attach === 0)\n ) {\n initState.state = 'red'\n } else if ((functionType === 4 || functionType === 5 || functionType === 12) && attach === 0) {\n initState.state = 'blue'\n }\n\n this.updateFeatureState(code, initState)\n } else if (layerType === 'track_circuit') {\n this.updateFeatureState(code, { state: 4, substate: 1, visiable: true })\n } else if (layerType === 'region_signal') {\n this.updateFeatureState(code, { state: 'blue', visiable: true })\n } else if (layerType === 'prevention') {\n this.updateFeatureState(code, { state: 1, visiable: true })\n }\n}\n\nexport function initMapGeoJsonInterlock(target: TeeeMap): InterLockVisualization | undefined {\n const mapType = target.mixingMapConfigs.size > 0 ? 'Multiple' : 'Single'\n const knownKeys = ['signal', 'switch', 'switch_loc', 'track_circuit', 'track', 'insulation']\n\n if (mapType === 'Multiple') {\n const style = target.map.getStyle()\n const sources = style?.sources ?? {}\n const sourceIds = Object.keys(sources)\n return new InterLockVisualization({\n sourceIds: sourceIds.reduce<Record<string, Record<string, string>>>((acc, name) => {\n const match = /^geojson_station_(\\d+)_(.+)$/.exec(name)\n if (!match) return acc\n const [, id, layer] = match\n if (!id || !layer) return acc\n if (!knownKeys.includes(layer)) return acc\n if (!acc[id]) acc[id] = {}\n acc[id][layer] = name\n return acc\n }, {}),\n updateFeatureState: (code, state: FeatureState) => target.updateFeatureState(code, state),\n queryGeojsonFeatures: (key: string) => target.queryGeojsonFeatures(key),\n getFeatureState: (code: string | number): Record<string, unknown> => target.getFeatureState(code) as Record<string, unknown>\n })\n }\n\n if (mapType === 'Single') {\n if (!target.mapConfigs) return\n const sourceIds = knownKeys.reduce<Record<(typeof knownKeys)[number], string>>((acc, key) => {\n acc[key] = `geojson_station_${key}`\n return acc\n }, {})\n return new InterLockVisualization({\n sourceIds: { geojson_station: sourceIds },\n updateFeatureState: (code, state: FeatureState) => target.updateFeatureState(code, state),\n queryGeojsonFeatures: (key: string) => target.queryGeojsonFeatures(key),\n getFeatureState: (code: string | number): Record<string, unknown> => target.getFeatureState(code) as Record<string, unknown>\n })\n }\n\n return undefined\n}\n\nexport default function geojsonLayerTool(target: TeeeMap): void {\n target.initGeoJsonFeatureState = initGeoJsonFeatureState\n target.initGeoJsonState = initGeoJsonState\n target.initMixGeoJsonMapState = initMixGeoJsonMapState\n target.interLockVisualization = initMapGeoJsonInterlock(target)\n}\n","import type { TeeeMap } from '@/core/teeeMap'\n\n/**\n * 混淆 XYZ 坐标的加密函数\n * @param z 原始 Z 坐标\n * @param x 原始 X 坐标\n * @param y 原始 Y 坐标\n * @returns 混淆后的 { z, x, y } 坐标(BigInt 类型)\n */\nfunction getScrambledXYZ(z: number | bigint, x: number | bigint, y: number | bigint): { z: bigint; x: bigint; y: bigint } {\n // 转换为 BigInt 确保 64 位精度\n const zBig = BigInt(z)\n const xBig = BigInt(x)\n const yBig = BigInt(y)\n\n // 加密逻辑\n let s0 = (zBig * zBig * xBig) ^ yBig\n if (s0 === 0n) s0 = 0xdeadbeefn // 处理 s0=0\n\n let s = s0\n s ^= s << 11n\n s ^= s >> 5n\n s ^= s << 13n\n\n if (s === 0n) s = 0xcafebaben\n\n const keyZ = s\n const keyX = s ^ (s << 16n)\n const keyY = s ^ (s >> 16n)\n\n const scrambledZ = zBig ^ keyZ\n const scrambledX = xBig ^ keyX\n const scrambledY = yBig ^ keyY\n // ========================================\n\n return { z: scrambledZ, x: scrambledX, y: scrambledY }\n}\n\nexport default function encryptTool(target: TeeeMap): void {\n target.map.setTransformRequest((url, resourceType) => {\n if (String(resourceType) !== 'Tile') {\n return { url }\n }\n\n // 【核心修改】判断是否是相对路径(不以 http:// 或 https:// 开头)\n // 如果是相对路径(线上环境),自动补全当前网页的协议和域名\n const isRelative = !/^https?:\\/\\//i.test(url)\n const finalUrl = isRelative ? `${window.location.origin}${url}` : url\n\n const urlObj = new URL(finalUrl)\n const pathParts = urlObj.pathname.split('/').filter((p) => p)\n\n if (pathParts.length >= 3) {\n const z = Number(pathParts[pathParts.length - 3])\n const x = Number(pathParts[pathParts.length - 2])\n const yWithExt = pathParts[pathParts.length - 1]\n const ext = yWithExt?.includes('.') ? yWithExt?.split('.').pop() : 'pbf'\n const y = Number(yWithExt?.replace(/\\.(pbf|png)$/i, ''))\n\n if (Number.isInteger(z) && z >= 0 && Number.isInteger(x) && x >= 0 && Number.isInteger(y) && y >= 0) {\n const scrambled = getScrambledXYZ(z, x, y)\n // 提取瓦片服务的基础路径前缀(例如 \"wapian/1.1.0/...\")\n const pathPrefix = pathParts.slice(0, pathParts.length - 3).join('/')\n\n // 使用最终确定的域名进行拼接\n const newUrl = `${urlObj.protocol}//${urlObj.host}/${pathPrefix}/${scrambled.z}/${scrambled.x}/${scrambled.y}.${ext}`\n\n return { url: newUrl }\n }\n }\n return { url }\n })\n}\n","import baseTool from './baseTool'\nimport graphLayerTool from './graphLayerTool'\nimport geojsonLayerTool from './geojsonLayerTool'\nimport encryptTool from './encryptTool'\n\nexport const ToolFactory = {\n base: baseTool,\n graph: graphLayerTool,\n geojson: geojsonLayerTool,\n encrypt: encryptTool\n}\n","import type { MapForgeConfig, LayerType } from '@/types'\n\nconst createRasterMapConfigs = (url: string): MapForgeConfig => {\n return {\n id: 'raster',\n sourceUrl: url,\n zoom: 20\n }\n}\nconst createGraphMapConfigs = (stcode: string, url: string, layers: LayerType[]): MapForgeConfig => {\n const sourceLayers = layers.map((layer) => {\n const specialLayerMap: Partial<Record<LayerType, string>> = {\n switch_loc: `${stcode}_t_${layer}`,\n sgfhqy: `a_${layer}_graph`,\n region: `${stcode}_t_track_${layer}`,\n display_polygon: `${stcode}_t_display_graph_polygon`,\n display_line: `${stcode}_t_display_graph_line`,\n display_point: `${stcode}_t_display_graph_point`\n }\n return specialLayerMap[layer] || `${stcode}_t_${layer}_graph`\n })\n return {\n id: 'graph',\n sourceUrl: url,\n layers: layers,\n sourceLayers: sourceLayers\n }\n}\n\nconst createGeomMapConfigs = (stcode: string, url: string, layers: LayerType[]): MapForgeConfig => {\n const sourceLayers = layers.map((layer) => (layer === 'switch_loc' ? `${stcode}_t_${layer}` : `${stcode}_t_${layer}_geom`))\n return {\n id: 'geom',\n sourceUrl: url,\n layers: layers,\n sourceLayers: sourceLayers\n }\n}\n\n// 地理主 栅格副\nconst createRAGEMapConfigs = (url: string, subUrl: string, stcode: string, layers: LayerType[]): MapForgeConfig => {\n const sourceLayers = layers.map((layer) => (layer === 'switch_loc' ? `${stcode}_t_${layer}` : `${stcode}_t_${layer}_geom`))\n return {\n id: 'geom',\n subSourceId: 'raster',\n sourceUrl: url,\n subSourceUrl: subUrl,\n layers: layers,\n sourceLayers: sourceLayers\n }\n}\n\n// GeoJSON 地图参数配置\nconst createGeoJsonMapConfigs = (id: string): MapForgeConfig => {\n return {\n id: id\n }\n}\n\nconst createRSWPMapConfigs = (url: string): MapForgeConfig => {\n return {\n id: 'rswp',\n sourceUrl: url\n }\n}\n\nconst createMbtilesMapConfigs = (url: string, layers: LayerType[]): MapForgeConfig => {\n const sourceLayers = layers.map((layer) => `t_${layer}_graph`)\n return {\n id: 'mbtiles',\n sourceUrl: url,\n layers: layers,\n sourceLayers: sourceLayers\n }\n}\n\nexport const MapForge = {\n raster: createRasterMapConfigs,\n geom: createGeomMapConfigs,\n graph: createGraphMapConfigs,\n geojson: createGeoJsonMapConfigs,\n rswp: createRSWPMapConfigs,\n mbtiles: createMbtilesMapConfigs,\n rage: createRAGEMapConfigs\n}\n","// EPSG:3857 (Web Mercator) 坐标转 WGS84 经纬度\nconst R = 20037508.34\n\ntype CoordinateArray = [number, number] | CoordinateArray[]\n\nconst mercatorToLngLat = (x: number, y: number): [number, number] => {\n const lng = (x / R) * 180\n const lat = (Math.atan(Math.exp((y / R) * Math.PI)) * 360) / Math.PI - 90\n return [lng, lat]\n}\n\nconst hasCoords = (geometry: GeoJSON.Geometry): geometry is Exclude<GeoJSON.Geometry, GeoJSON.GeometryCollection> => {\n return 'coordinates' in geometry\n}\n\nconst transformCoords = (coords: CoordinateArray): CoordinateArray => {\n if (typeof coords[0] === 'number') {\n return mercatorToLngLat(coords[0], coords[1] as number)\n }\n return (coords as CoordinateArray[]).map(transformCoords)\n}\n\n/**\n * 将 3857 坐标系的 geojson 数据转换为 4326 坐标系的 geojson 数据\n * @param geojson 3857 坐标系的 GeoJSON\n * @returns 4326 坐标系的 GeoJSON\n */\nexport const transformGeoJsonFrom3857 = (geojson: GeoJSON.FeatureCollection): GeoJSON.FeatureCollection => {\n return {\n ...geojson,\n features: geojson.features?.map((f: GeoJSON.Feature) => ({\n ...f,\n geometry: hasCoords(f.geometry)\n ? {\n ...f.geometry,\n coordinates: transformCoords(f.geometry.coordinates as CoordinateArray) as unknown as GeoJSON.Position\n }\n : f.geometry\n })) as GeoJSON.Feature[]\n }\n}\n\n/**\n * 处理兼容关键属性字段\n * @param layerName 图层名称 LayerType\n * @param geojson 4326 坐标系的 GeoJSON\n * @returns\n */\nexport const transformGeoJsonProperties = (layerName: string, geojson: GeoJSON.FeatureCollection) => {\n // t_signal_graph 数据属性兼容处理\n if (layerName === 'signal') {\n geojson.features?.forEach(({ properties }) => {\n if (!properties) return\n const props = properties as Record<string, unknown>\n if (!props.positionSide && props.posi_side) {\n props.positionSide = props.posi_side\n delete props.posi_side\n }\n if (!props.installType && props.install_type) {\n props.installType = props.install_type\n delete props.install_type\n }\n if (!props.functionType && props.function_type) {\n props.functionType = props.function_type\n delete props.function_type\n }\n })\n }\n // t_track_circuit 数据属性兼容处理\n if (layerName === 'track_circuit') {\n geojson.features?.forEach(({ properties }) => {\n if (!properties) return\n const props = properties as Record<string, unknown>\n if (!props.fromCode && props.from_code) {\n props.fromCode = props.from_code\n delete props.from_code\n }\n if (!props.toCode && props.to_code) {\n props.toCode = props.to_code\n delete props.to_code\n }\n })\n }\n // t_insulation_graph 数据属性兼容处理\n if (layerName === 'insulation') {\n geojson.features?.forEach(({ properties }) => {\n if (!properties) return\n const props = properties as Record<string, unknown>\n if (!props.downSignal && props.downsignal) {\n props.downSignal = props.downsignal\n delete props.downsignal\n }\n if (!props.upSignal && props.upsignal) {\n props.upSignal = props.upsignal\n delete props.upsignal\n }\n })\n }\n}\n\n/**\n * 对 FeatureCollection 中所有坐标施加 x/y 偏移\n * @param {GeoJSON.FeatureCollection} featureCollection\n * @param {number} offsetX - 经度方向偏移量\n * @param {number} offsetY - 纬度方向偏移量\n * @returns {GeoJSON.FeatureCollection} 新的 FeatureCollection\n */\nexport function offsetFeatureCollection(featureCollection: GeoJSON.FeatureCollection, offsetX: number, offsetY: number): GeoJSON.FeatureCollection {\n // 深拷贝,避免污染原始数据\n const result = JSON.parse(JSON.stringify(featureCollection)) as GeoJSON.FeatureCollection\n\n /**\n * 递归处理坐标数组\n * GeoJSON 坐标可能是:\n * Point: [x, y]\n * LineString: [[x,y], [x,y]]\n * Polygon: [[[x,y]], [[x,y]]]\n * MultiPoint: [[x,y], [x,y]]\n * MultiLineString: [[[x,y]], [[x,y]]]\n * MultiPolygon: [[[[x,y]]], [[[x,y]]]]\n * 判断依据:如果第一个元素是 number,说明到了叶子坐标点\n */\n function shiftCoords(coords: CoordinateArray): void {\n if (typeof coords[0] === 'number') {\n coords[0] += offsetX\n coords[1] = (coords[1] as number) + offsetY\n } else {\n for (const coord of coords as CoordinateArray[]) {\n shiftCoords(coord)\n }\n }\n }\n\n /**\n * 处理单个 Geometry(含 GeometryCollection)\n */\n function shiftGeometry(geometry: GeoJSON.Geometry | null): void {\n if (!geometry) return\n\n if (geometry.type === 'GeometryCollection') {\n for (const g of geometry.geometries) {\n shiftGeometry(g)\n }\n } else {\n shiftCoords(geometry.coordinates as CoordinateArray)\n }\n }\n\n // 遍历 FeatureCollection 的每个 Feature\n for (const feature of result.features ?? []) {\n shiftGeometry(feature.geometry)\n }\n\n return result\n}\n","import * as turf from '@turf/turf'\nimport type { FeatureCollection, Point } from 'geojson'\nimport * as maplibregl from 'maplibre-gl'\n\n/**\n * 地图测量工具(距离 + 面积)\n *\n * 使用方式:\n * const measureTool = new MeasureTool(map);\n * measureTool.startDistance(); // 开始距离测量\n * measureTool.startArea(); // 开始面积测量\n * measureTool.clear(); // 清除所有测量内容\n */\nexport class MeasureTool {\n private static stylesInjected = false\n\n private map: maplibregl.Map\n private active = false\n private jsonPoint: FeatureCollection = { type: 'FeatureCollection', features: [] }\n private jsonLine: FeatureCollection = { type: 'FeatureCollection', features: [] }\n private points: [number, number][] = []\n private tooltip: maplibregl.Marker | null = null\n private markers: maplibregl.Marker[] = []\n private tooltipEle!: HTMLDivElement\n\n /** 存储当前绑定的事件处理函数引用,用于 map.off 解绑 */\n private _onClick: ((e: maplibregl.MapMouseEvent) => void) | null = null\n private _onMousemove: ((e: maplibregl.MapMouseEvent) => void) | null = null\n private _onContextmenu: ((e: maplibregl.MapMouseEvent) => void) | null = null\n\n constructor(map: maplibregl.Map) {\n this.map = map\n MeasureTool.injectStyles()\n }\n\n /** 注入测量标签样式 */\n private static injectStyles(): void {\n if (MeasureTool.stylesInjected) return\n MeasureTool.stylesInjected = true\n\n const style = document.createElement('style')\n style.textContent = `\n .measure-result {\n display: flex;\n align-items: center;\n gap: 6px;\n background: rgba(0, 0, 0, 0.7);\n color: #fbbf24;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n white-space: nowrap;\n pointer-events: none;\n user-select: none;\n line-height: 1.4;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n }\n .measure-close {\n pointer-events: auto;\n font-size: 18px;\n cursor: pointer;\n font-weight: bold;\n }\n .measure-close:hover {\n color: #fff;\n }\n `\n document.head.appendChild(style)\n }\n\n /** 获取 GeoJSON 数据源,带类型断言 */\n private getSource(id: string): maplibregl.GeoJSONSource {\n return this.map.getSource(id)!\n }\n\n /** 开始距离测量模式 */\n startDistance(): void {\n this.reset()\n this.active = true\n this.map.getCanvas().style.cursor = 'default'\n this.map.doubleClickZoom.enable()\n\n this.tooltipEle = document.createElement('div')\n this.tooltipEle.setAttribute('class', 'measure-result')\n this.tooltip = new maplibregl.Marker({\n element: this.tooltipEle,\n anchor: 'left' as const,\n offset: [8, 0] as [number, number]\n })\n .setLngLat([0, 0])\n .addTo(this.map)\n\n // 初始化图层\n if (!this.map.getSource('points')) {\n this.map.addSource('points', { type: 'geojson', data: this.jsonPoint })\n this.map.addSource('line', { type: 'geojson', data: this.jsonLine })\n this.map.addSource('line-move', { type: 'geojson', data: this.jsonLine })\n\n this.map.addLayer({\n id: 'line-move',\n type: 'line',\n source: 'line-move',\n paint: { 'line-color': '#ff0000', 'line-width': 3, 'line-dasharray': [2, 2] }\n })\n this.map.addLayer({\n id: 'line',\n type: 'line',\n source: 'line',\n paint: { 'line-color': '#ff0000', 'line-width': 3, 'line-dasharray': [2, 2] }\n })\n this.map.addLayer({\n id: 'points',\n type: 'circle',\n source: 'points',\n paint: {\n 'circle-color': '#ff0000',\n 'circle-radius': 4,\n 'circle-stroke-width': 2,\n 'circle-stroke-color': '#1677ff'\n }\n })\n }\n\n this.bindDistanceEvents()\n }\n\n private bindDistanceEvents(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(this.map as any).__isPlacingLoco = true\n this._onClick = (e: maplibregl.MapMouseEvent) => {\n if (!this.active) return\n const coords = [e.lngLat.lng, e.lngLat.lat] as [number, number]\n this.addMeasureRes(coords)\n this.addDistancePoint(coords)\n this.points.push(coords)\n }\n\n this._onMousemove = (e: maplibregl.MapMouseEvent) => {\n if (!this.active) return\n const coords = [e.lngLat.lng, e.lngLat.lat] as [number, number]\n if (this.jsonPoint.features.length > 0) {\n const prev = this.jsonPoint.features[this.jsonPoint.features.length - 1]!\n const prevCoords = (prev.geometry as Point).coordinates\n this.getSource('line-move').setData({\n type: 'Feature' as const,\n properties: {},\n geometry: { type: 'LineString' as const, coordinates: [prevCoords, coords] }\n })\n this.tooltipEle.innerHTML = this.getLength(coords)\n } else {\n this.tooltipEle.innerHTML = '点击地图开始测量,右键结束测量'\n }\n this.tooltip!.setLngLat(coords)\n }\n\n this._onContextmenu = (e: maplibregl.MapMouseEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(this.map as any).__isPlacingLoco = false\n if (!this.active) return\n const coords = [e.lngLat.lng, e.lngLat.lat] as [number, number]\n this.addDistancePoint(coords)\n this.active = false\n this.map.getCanvas().style.cursor = ''\n\n // 在 tooltip 中同时显示总长和关闭按钮\n const total = this.getLength(coords)\n this.tooltipEle.innerHTML = `<span>${total}</span><span class=\"measure-close\">×</span>`\n this.tooltip!.setLngLat(coords)\n\n const closeBtn: HTMLElement = this.tooltipEle.querySelector('.measure-close')!\n closeBtn.onclick = (ev) => {\n ev.stopPropagation()\n this.map.doubleClickZoom.enable()\n this.clear()\n }\n }\n\n this.map.on('click', this._onClick)\n this.map.on('mousemove', this._onMousemove)\n this.map.on('contextmenu', this._onContextmenu)\n }\n\n private addDistancePoint(coords: [number, number]): void {\n if (this.jsonPoint.features.length > 0) {\n const prev = this.jsonPoint.features[this.jsonPoint.features.length - 1]!\n const prevCoords = (prev.geometry as Point).coordinates\n this.jsonLine.features.push({\n type: 'Feature',\n properties: {},\n geometry: { type: 'LineString', coordinates: [prevCoords, coords] }\n })\n this.getSource('line').setData(this.jsonLine)\n }\n this.jsonPoint.features.push({\n type: 'Feature',\n properties: {},\n geometry: { type: 'Point', coordinates: coords }\n })\n this.getSource('points').setData(this.jsonPoint)\n }\n\n private addMeasureRes(coords: [number, number]): void {\n const ele = document.createElement('div')\n ele.setAttribute('class', 'measure-result')\n ele.innerHTML = this.points.length === 0 ? '起点' : this.getLength(coords)\n const marker = new maplibregl.Marker({\n element: ele,\n anchor: 'left' as const,\n offset: [8, 0] as [number, number]\n })\n .setLngLat(coords)\n .addTo(this.map)\n this.markers.push(marker)\n }\n\n private getLength(coords: [number, number]): string {\n const allPoints = this.points.concat([coords])\n const line = turf.lineString(allPoints)\n let len = turf.length(line)\n if (len < 1) {\n len = Number((len * 1000).toFixed(4))\n return len + 'm'\n }\n len = Number(len.toFixed(4))\n return len + 'km'\n }\n\n /** 开始面积测量模式 */\n startArea(): void {\n this.reset()\n this.active = true\n this.map.doubleClickZoom.disable()\n this.map.getCanvas().style.cursor = 'default'\n\n this.tooltipEle = document.createElement('div')\n this.tooltipEle.setAttribute('class', 'measure-result')\n this.tooltip = new maplibregl.Marker({\n element: this.tooltipEle,\n anchor: 'left' as const,\n offset: [8, 0] as [number, number]\n })\n .setLngLat([0, 0])\n .addTo(this.map)\n\n // 初始化图层\n if (!this.map.getSource('points-area')) {\n this.map.addSource('points-area', { type: 'geojson', data: this.jsonPoint })\n this.map.addSource('line-area', { type: 'geojson', data: this.jsonLine })\n\n this.map.addLayer({\n id: 'line-area',\n type: 'fill',\n source: 'line-area',\n paint: { 'fill-color': '#ff0000', 'fill-opacity': 0.1 }\n })\n this.map.addLayer({\n id: 'line-area-stroke',\n type: 'line',\n source: 'line-area',\n paint: { 'line-color': '#ff0000', 'line-width': 3, 'line-dasharray': [2, 2] }\n })\n this.map.addLayer({\n id: 'points-area',\n type: 'circle',\n source: 'points-area',\n paint: {\n 'circle-color': '#ff0000',\n 'circle-radius': 4,\n 'circle-stroke-width': 2,\n 'circle-stroke-color': '#1677ff'\n }\n })\n }\n\n this.bindAreaEvents()\n }\n\n private bindAreaEvents(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(this.map as any).__isPlacingLoco = true\n this._onClick = (e: maplibregl.MapMouseEvent) => {\n if (!this.active) return\n const coords = [e.lngLat.lng, e.lngLat.lat] as [number, number]\n this.points.push(coords)\n this.addAreaPoint(coords)\n }\n\n this._onContextmenu = (e: maplibregl.MapMouseEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(this.map as any).__isPlacingLoco = false\n if (!this.active) return\n const coords = [e.lngLat.lng, e.lngLat.lat] as [number, number]\n this.points.push(coords)\n this.active = false\n\n // 在 tooltip 中同时显示面积和关闭按钮\n this.tooltipEle.innerHTML = `<span>${this.getArea(coords)}</span><span class=\"measure-close\">×</span>`\n this.tooltip!.setLngLat(coords)\n\n const closeBtn: HTMLElement = this.tooltipEle.querySelector('.measure-close')!\n closeBtn.onclick = (ev) => {\n ev.stopPropagation()\n this.map.doubleClickZoom.enable()\n this.clear()\n }\n }\n\n this._onMousemove = (e: maplibregl.MapMouseEvent) => {\n if (!this.active) return\n const coords = [e.lngLat.lng, e.lngLat.lat] as [number, number]\n const len = this.jsonPoint.features.length\n if (len === 0) {\n this.tooltipEle.innerHTML = '点击地图开始测量,右键结束测量'\n } else if (len === 1) {\n this.tooltipEle.innerHTML = '点击地图继续测量,右键结束测量'\n } else {\n const pts = this.points.concat([coords]).concat([this.points[0]!])\n this.getSource('line-area').setData({\n type: 'Feature' as const,\n properties: {},\n geometry: { type: 'Polygon' as const, coordinates: [pts] }\n })\n this.tooltipEle.innerHTML = this.getArea(coords)\n }\n this.tooltip!.setLngLat(coords)\n }\n\n this.map.on('click', this._onClick)\n this.map.on('contextmenu', this._onContextmenu)\n this.map.on('mousemove', this._onMousemove)\n }\n\n private addAreaPoint(coords: [number, number]): void {\n this.jsonPoint.features.push({\n type: 'Feature',\n properties: {},\n geometry: { type: 'Point', coordinates: coords }\n })\n this.getSource('points-area').setData(this.jsonPoint)\n }\n\n private getArea(coords: [number, number]): string {\n const pts = this.points.concat([coords]).concat([this.points[0]!])\n const polygon = turf.polygon([pts])\n let area = turf.area(polygon)\n if (area < 1000) {\n area = Number(area.toFixed(4))\n return area + 'm²'\n }\n area = Number((area / 1000000).toFixed(4))\n return area + 'km²'\n }\n\n /** 重置内部状态,解绑事件监听 */\n private reset(): void {\n this.clear()\n this.active = false\n this.jsonPoint = { type: 'FeatureCollection', features: [] }\n this.jsonLine = { type: 'FeatureCollection', features: [] }\n this.points = []\n this.markers = []\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }\n\n /** 清除所有测量图层、数据源和 DOM 元素 */\n clear(): void {\n // 解绑事件\n if (this._onClick) this.map.off('click', this._onClick)\n if (this._onMousemove) this.map.off('mousemove', this._onMousemove)\n if (this._onContextmenu) this.map.off('contextmenu', this._onContextmenu)\n this._onClick = null\n this._onMousemove = null\n this._onContextmenu = null\n\n // 移除 DOM 元素\n document.querySelectorAll('.measure-result').forEach((el) => el.remove())\n\n // 移除 marker\n this.markers.forEach((m) => m.remove())\n this.markers = []\n\n // 移除距离测量图层和源\n ;['points', 'line', 'line-move'].forEach((id) => {\n if (this.map.getLayer(id)) this.map.removeLayer(id)\n if (this.map.getSource(id)) this.map.removeSource(id)\n })\n\n // 移除面积测量图层和源\n ;['points-area', 'line-area-stroke', 'line-area'].forEach((id) => {\n if (this.map.getLayer(id)) this.map.removeLayer(id)\n if (this.map.getSource(id)) this.map.removeSource(id)\n })\n }\n}\n\nexport default MeasureTool\n","import type { ExpressionSpecification, Map as MaplibreMap } from 'maplibre-gl'\n\nimport * as turf from '@turf/turf'\nimport type * as maplibregl from 'maplibre-gl'\n\ntype LineGeometry = GeoJSON.LineString | GeoJSON.MultiLineString\ntype Position = number[]\n\nexport interface AttachTrackAngleOptions {\n /** vector / geojson source id */\n sourceId: string\n /** 点要素所在 source-layer(如 prevention) */\n pointSourceLayer: string\n /** 股道 source-layer */\n trackSourceLayer: string\n /** 写入 icon-rotate 的 symbol 图层 id */\n layerId: string\n /** 接口要素(需含 code、trackCode / track_code) */\n controlFeatures: GeoJSON.Feature[]\n /** 过滤要算角的点要素;不传则该 source-layer 下所有 Point 都算 */\n filterPoint?: (feature: maplibregl.GeoJSONFeature) => boolean\n /**\n * 角度偏移(度),默认 0。\n * 图标默认水平且需垂直于股道时一般为 0;若图标默认朝向不同可传 ±90。\n */\n angleOffset?: number\n layerSuffix?: string\n}\n\nconst asLineParts = (geom: GeoJSON.Geometry | null | undefined): Position[][] => {\n if (geom?.type === 'LineString') return [geom.coordinates]\n if (geom?.type === 'MultiLineString') return geom.coordinates\n return []\n}\n\nconst coordCount = (f: GeoJSON.Feature): number => asLineParts(f.geometry).reduce((n, part) => n + part.length, 0)\n\n/** 点到折线最近点所在线段 [A, B] */\nconst nearestSegment: (lineGeom: LineGeometry, pointGeom: GeoJSON.Point) => [Position, Position] | null = (\n lineGeom: LineGeometry,\n pointGeom: GeoJSON.Point\n): [Position, Position] | null => {\n const turfPoint = turf.point(pointGeom.coordinates)\n let best: { dist: number; index: number; coords: Position[] } | null = null\n\n for (const coords of asLineParts(lineGeom)) {\n if (coords.length < 2) continue\n const snapped = turf.nearestPointOnLine(turf.lineString(coords), turfPoint)\n const dist = snapped.properties.pointDistance || Number.POSITIVE_INFINITY\n if (!best || dist < best.dist) {\n best = { dist, index: snapped.properties.segmentIndex || 0, coords }\n }\n }\n if (!best) return null\n\n const i = Math.min(best.index, best.coords.length - 2)\n return [best.coords[i] ?? [], best.coords[i + 1] ?? []]\n}\n\n/**\n * 计算点在折线上的股道方位角(度)。\n * 与 MapLibre `icon-rotate` + `icon-rotation-alignment: 'map'` 一致:相对正北顺时针。\n * 图标默认水平时,该角即垂直于股道。\n */\nexport const getTrackBearing = (lineGeom: LineGeometry, pointGeom: GeoJSON.Point): number => {\n const seg = nearestSegment(lineGeom, pointGeom)\n if (!seg) return 0\n const [[x1, y1], [x2, y2]] = seg\n return (Math.atan2(x2! - x1!, y2! - y1!) * 180) / Math.PI\n}\n\n/**\n * 按 control.trackCode 关联股道,计算点要素旋转角,写入目标 symbol 层的 icon-rotate。\n * layout 不支持 feature-state,故用 match + feature id(需 source promoteId: 'code')。\n *\n * 可用于大门、接触网终点等需按股道定向的点图层。\n */\nexport const attachTrackAngle = (map: MaplibreMap, options: AttachTrackAngleOptions): void => {\n const { sourceId, pointSourceLayer, trackSourceLayer, layerId, controlFeatures, filterPoint, angleOffset = 0, layerSuffix } = options\n\n if (!map.getLayer(layerId)) {\n console.warn(`图层不存在: ${layerId}`)\n return\n }\n\n const trackCodeByFeatureCode = new Map<string, string>()\n for (const f of controlFeatures) {\n const code = f.properties?.code as string\n const trackCode = f.properties?.trackCode as string\n if (code && trackCode) trackCodeByFeatureCode.set(code, trackCode)\n }\n // console.log('trackCodeByFeatureCode', trackCodeByFeatureCode);\n\n const trackByCode = new Map<string, GeoJSON.Feature>()\n for (const f of map.querySourceFeatures(sourceId, { sourceLayer: trackSourceLayer })) {\n const feature = f as unknown as GeoJSON.Feature\n // console.log('trackfeature', feature);\n const code = f.properties.code as string\n if (!code) continue\n const prev = trackByCode.get(code)\n if (!prev || coordCount(feature) > coordCount(prev)) trackByCode.set(code, feature)\n }\n\n const angleByCode = new Map<string, number>()\n for (const point of map.querySourceFeatures(sourceId, { sourceLayer: pointSourceLayer })) {\n if (filterPoint && !filterPoint(point)) continue\n if (point.geometry.type !== 'Point') continue\n\n const code = point.properties.code as string\n if (!code || angleByCode.has(code)) continue\n\n const trackCode = trackCodeByFeatureCode.get(code)\n const track = trackCode ? trackByCode.get(trackCode) : undefined\n const geom = track?.geometry\n\n if (!trackCode || !geom || (geom.type !== 'LineString' && geom.type !== 'MultiLineString')) {\n angleByCode.set(code, angleOffset)\n console.error('未找到关联股道', code, trackCode)\n continue\n }\n if (layerSuffix === 'jcw') {\n angleByCode.set(code, getTrackBearing(geom, point.geometry) + angleOffset + 90)\n } else {\n angleByCode.set(code, getTrackBearing(geom, point.geometry) + angleOffset)\n }\n }\n\n if (angleByCode.size === 0) {\n map.setLayoutProperty(layerId, 'icon-rotate', angleOffset)\n return\n }\n\n const matchExpr = ['match', ['to-string', ['get', 'code']], ...[...angleByCode.entries()].flatMap(([code, angle]) => [code, angle]), angleOffset] as ExpressionSpecification\n\n map.setLayoutProperty(layerId, 'icon-rotate', matchExpr)\n}\n"]}
|