@soonspacejs/plugin-tiles 2.14.29 → 2.14.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,125 @@
1
+ import { ImageOverlayPlugin, GeoJSONOverlay, CesiumIonOverlay, TMSTilesOverlay, XYZTilesOverlay, WMSTilesOverlay, WMTSTilesOverlay, UrlTemplateTilesOverlay } from 'um-3d-tiles-renderer/plugins';
2
+ import { ResourceManager } from './ResourceManager';
3
+ import { IGeoJSONOverlayOptions, ICesiumIonOverlayOptions, ITMSTilesOverlayOptions, IXYZTilesOverlayOptions, IWMSTilesOverlayOptions, IWMTSTilesOverlayOptions, IUrlTemplateOverlayOptions } from './types';
4
+ /**
5
+ * OverlayManager - Overlay 实例管理器
6
+ *
7
+ * 职责:
8
+ * - 管理 Overlay 的运行时实例
9
+ * - 与 ResourceManager 配合:配置存储在 ResourceManager,实例由本类管理
10
+ * - 提供创建、删除、更新 Overlay 的方法
11
+ */
12
+ export declare class OverlayManager {
13
+ private imageOverlayPlugin;
14
+ private resourceManager?;
15
+ /** 存储所有 overlay 实例 */
16
+ private _instances;
17
+ constructor(imageOverlayPlugin: ImageOverlayPlugin | undefined, resourceManager?: ResourceManager | undefined);
18
+ addGeoJSON(options: IGeoJSONOverlayOptions): GeoJSONOverlay | null;
19
+ updateGeoJSONColor(id: string, color: string): boolean;
20
+ updateGeoJSONStrokeStyle(id: string, strokeStyle: string): boolean;
21
+ updateGeoJSONStrokeWidth(id: string, strokeWidth: number): boolean;
22
+ updateGeoJSONFillStyle(id: string, fillStyle: string): boolean;
23
+ updateGeoJSONMode(id: string, mode: 'overlay' | 'mask' | 'invertMask'): boolean;
24
+ addCesiumIon(options: ICesiumIonOverlayOptions): CesiumIonOverlay | null;
25
+ addTMS(options: ITMSTilesOverlayOptions): TMSTilesOverlay | null;
26
+ addXYZ(options: IXYZTilesOverlayOptions): XYZTilesOverlay | null;
27
+ /**
28
+ * 添加 URL 模板 Overlay
29
+ *
30
+ * 这是一个通用的瓦片加载方式,支持多种 URL 模板变量:
31
+ * - `{z}`, `{x}`, `{y}` - 标准 XYZ 坐标
32
+ * - `{s}` - 子域名轮换
33
+ * - `{reverseY}` - TMS 风格的 Y 坐标
34
+ * - 地理边界框变量等
35
+ *
36
+ * @example
37
+ * // 标准 XYZ 瓦片
38
+ * addUrlTemplate({
39
+ * id: 'osm',
40
+ * url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png'
41
+ * })
42
+ *
43
+ * @example
44
+ * // 带子域名的瓦片
45
+ * addUrlTemplate({
46
+ * id: 'carto',
47
+ * url: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',
48
+ * subdomains: 'abcd'
49
+ * })
50
+ *
51
+ * @example
52
+ * // ESRI 风格(y/x 顺序)
53
+ * addUrlTemplate({
54
+ * id: 'esri',
55
+ * url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}'
56
+ * })
57
+ */
58
+ addUrlTemplate(options: IUrlTemplateOverlayOptions): UrlTemplateTilesOverlay | null;
59
+ addWMS(options: IWMSTilesOverlayOptions): Promise<WMSTilesOverlay | null>;
60
+ addWMTS(options: IWMTSTilesOverlayOptions): Promise<WMTSTilesOverlay | null>;
61
+ /**
62
+ * 移除 overlay
63
+ */
64
+ remove(id: string): boolean;
65
+ /**
66
+ * 获取 overlay 实例
67
+ */
68
+ get(id: string): any | undefined;
69
+ /**
70
+ * 检查 overlay 是否存在
71
+ */
72
+ has(id: string): boolean;
73
+ /**
74
+ * 设置 overlay 可见性
75
+ */
76
+ setVisible(id: string, visible: boolean): boolean;
77
+ /**
78
+ * 设置 overlay 透明度
79
+ */
80
+ setOpacity(id: string, opacity: number): boolean;
81
+ /**
82
+ * 设置 overlay 层级
83
+ */
84
+ setOrder(id: string, order: number): boolean;
85
+ /**
86
+ * 获取 overlay 层级
87
+ */
88
+ getOrder(id: string): number;
89
+ /**
90
+ * 将 overlay 移到最顶层
91
+ */
92
+ bringToFront(id: string): boolean;
93
+ /**
94
+ * 将 overlay 移到最底层
95
+ */
96
+ sendToBack(id: string): boolean;
97
+ /**
98
+ * 从 ResourceManager 恢复所有资源
99
+ */
100
+ restoreFromResourceManager(): void;
101
+ /**
102
+ * 根据资源配置创建 overlay(不保存到 ResourceManager)
103
+ */
104
+ private _createOverlayFromResource;
105
+ /**
106
+ * 获取所有 overlay ID
107
+ */
108
+ getIds(): string[];
109
+ /**
110
+ * 获取 overlay 数量
111
+ */
112
+ get count(): number;
113
+ /**
114
+ * 获取本地影像数量(不依赖 ResourceManager)
115
+ */
116
+ private _getLocalImageryCount;
117
+ /**
118
+ * 只清理实例(保留 ResourceManager 中的配置)
119
+ */
120
+ disposeInstances(): void;
121
+ /**
122
+ * 完全销毁(清理实例和配置)
123
+ */
124
+ dispose(): void;
125
+ }
@@ -0,0 +1,78 @@
1
+ import { IGeoJSONOverlayOptions, ICesiumIonOverlayOptions, ITMSTilesOverlayOptions, IXYZTilesOverlayOptions, IWMSTilesOverlayOptions, IWMTSTilesOverlayOptions, OverlayType } from './types';
2
+ /**
3
+ * Overlay 资源配置
4
+ */
5
+ export interface IOverlayResource {
6
+ id: string;
7
+ type: OverlayType;
8
+ options: IGeoJSONOverlayOptions | ICesiumIonOverlayOptions | ITMSTilesOverlayOptions | IXYZTilesOverlayOptions | IWMSTilesOverlayOptions | IWMTSTilesOverlayOptions;
9
+ }
10
+ /**
11
+ * ResourceManager 资源管理器
12
+ * 负责记录和管理所有资源的配置信息(不持有实例引用)
13
+ *
14
+ * 设计理念:
15
+ * - 只存储配置数据,不存储运行时实例
16
+ * - 切换地形时,通过配置数据重建所有资源
17
+ * - 解耦配置管理和实例管理
18
+ */
19
+ export declare class ResourceManager {
20
+ /** Overlay 资源配置 */
21
+ private _overlays;
22
+ /**
23
+ * 添加 Overlay 资源配置
24
+ */
25
+ addOverlay(resource: IOverlayResource): void;
26
+ /**
27
+ * 获取 Overlay 资源配置
28
+ */
29
+ getOverlay(id: string): IOverlayResource | undefined;
30
+ /**
31
+ * 移除 Overlay 资源配置
32
+ */
33
+ removeOverlay(id: string): boolean;
34
+ /**
35
+ * 检查 Overlay 是否存在
36
+ */
37
+ hasOverlay(id: string): boolean;
38
+ /**
39
+ * 获取所有 Overlay 资源配置
40
+ */
41
+ getAllOverlays(): IOverlayResource[];
42
+ /**
43
+ * 获取指定类型的 Overlay 资源配置
44
+ */
45
+ getOverlaysByType(type: OverlayType): IOverlayResource[];
46
+ /**
47
+ * 获取所有 Overlay 的 ID 列表
48
+ */
49
+ getOverlayIds(): string[];
50
+ /**
51
+ * 获取 Overlay 数量
52
+ */
53
+ get overlayCount(): number;
54
+ /**
55
+ * 获取影像类型的 Overlay 数量
56
+ */
57
+ getImageryOverlayCount(): number;
58
+ /**
59
+ * 更新 Overlay 配置
60
+ */
61
+ updateOverlay(id: string, updates: Partial<IOverlayResource['options']>): boolean;
62
+ /**
63
+ * 清空所有资源配置
64
+ */
65
+ clear(): void;
66
+ /**
67
+ * 导出所有资源配置(用于调试或持久化)
68
+ */
69
+ export(): {
70
+ overlays: IOverlayResource[];
71
+ };
72
+ /**
73
+ * 导入资源配置
74
+ */
75
+ import(data: {
76
+ overlays?: IOverlayResource[];
77
+ }): void;
78
+ }
@@ -0,0 +1,75 @@
1
+ import { ITerrainConfig } from './types';
2
+ /**
3
+ * 地形列表项(面向前端展示)
4
+ */
5
+ export interface ITerrainListItem {
6
+ /** 唯一标识符 */
7
+ id: string;
8
+ /** 地形配置 */
9
+ config: ITerrainConfig;
10
+ /** 是否为当前激活的地形 */
11
+ active: boolean;
12
+ }
13
+ /**
14
+ * TerrainManager 地形管理器
15
+ * 纯数据注册表,记录已添加的地形配置并跟踪当前激活项,供前端列表展示。
16
+ * 不持有运行时实例,不触发切换逻辑。
17
+ */
18
+ export declare class TerrainManager {
19
+ /** 地形配置映射表 */
20
+ private _terrains;
21
+ /** 当前激活的地形 ID */
22
+ private _currentId;
23
+ /**
24
+ * 获取当前激活的地形 ID
25
+ */
26
+ get currentId(): string | null;
27
+ /**
28
+ * 获取已注册的地形数量
29
+ */
30
+ get count(): number;
31
+ /**
32
+ * 添加地形配置
33
+ */
34
+ add(config: ITerrainConfig): void;
35
+ /**
36
+ * 移除地形配置
37
+ */
38
+ remove(id: string): boolean;
39
+ /**
40
+ * 设置当前激活的地形 ID
41
+ */
42
+ setCurrentId(id: string | null): void;
43
+ /**
44
+ * 检查地形是否已注册
45
+ */
46
+ has(id: string): boolean;
47
+ /**
48
+ * 获取指定地形配置
49
+ */
50
+ get(id: string): ITerrainConfig | undefined;
51
+ /**
52
+ * 获取当前激活的地形配置
53
+ */
54
+ getCurrent(): ITerrainConfig | undefined;
55
+ /**
56
+ * 获取所有地形配置列表(用于前端列表渲染)
57
+ */
58
+ getList(): ITerrainListItem[];
59
+ /**
60
+ * 获取所有地形配置
61
+ */
62
+ getAll(): ITerrainConfig[];
63
+ /**
64
+ * 获取所有地形 ID
65
+ */
66
+ getIds(): string[];
67
+ /**
68
+ * 清空所有地形配置
69
+ */
70
+ clear(): void;
71
+ /**
72
+ * 销毁管理器
73
+ */
74
+ dispose(): void;
75
+ }
@@ -0,0 +1,218 @@
1
+ import { TilesRenderer } from 'um-3d-tiles-renderer';
2
+ import { TilesFadePlugin, UpdateOnChangePlugin, ImageOverlayPlugin, ReorientationPlugin } from 'um-3d-tiles-renderer/plugins';
3
+ import { default as SoonSpace } from 'soonspacejs';
4
+ import { TileCustomMaterialPlugin } from './plugins';
5
+ import { OverlayManager } from './OverlayManager';
6
+ import { ResourceManager } from './ResourceManager';
7
+ import { TerrainManager } from './TerrainManager';
8
+ import { ITerrainTilesRendererOptions, IGeoJSONOverlayOptions, ICesiumIonOverlayOptions, ITMSTilesOverlayOptions, IXYZTilesOverlayOptions, IWMSTilesOverlayOptions, IWMTSTilesOverlayOptions, IUrlTemplateOverlayOptions, AlphaClipMode, ITerrainConfig } from './types';
9
+ /**
10
+ * TerrainTilesRenderer 地形渲染器
11
+ * 支持多种地形源和多个叠加层
12
+ *
13
+ * 注意:切换地形时会创建新的 TilesRenderer 实例以避免状态残留问题
14
+ */
15
+ export declare class TerrainTilesRenderer {
16
+ readonly ssp: SoonSpace;
17
+ readonly defaultTerrainId = "__default_terrain__";
18
+ readonly defaultImageryId = "__default_imagery__";
19
+ tiles: TilesRenderer;
20
+ tilesFadePlugin?: TilesFadePlugin;
21
+ updateOnChangePlugin?: UpdateOnChangePlugin;
22
+ customMaterialPlugin?: TileCustomMaterialPlugin;
23
+ imageOverlayPlugin?: ImageOverlayPlugin;
24
+ reorientationPlugin?: ReorientationPlugin;
25
+ /** 资源管理器(存储配置) */
26
+ resourceManager: ResourceManager;
27
+ /** 地形管理器(记录地形列表) */
28
+ terrainManager: TerrainManager;
29
+ /** Overlay 管理器(管理实例) */
30
+ overlayManager: OverlayManager;
31
+ /** 当前地形配置 */
32
+ private _currentTerrainConfig;
33
+ /** Alpha 裁剪模式 */
34
+ private _alphaClipMode;
35
+ /** 是否已启用(添加到场景) */
36
+ private _enabled;
37
+ loedTilesSets: Set<() => void>;
38
+ options: ITerrainTilesRendererOptions;
39
+ /**
40
+ * 是否使用 Cesium Ion 地形
41
+ */
42
+ get isCesiumIon(): boolean;
43
+ /**
44
+ * 获取当前地形配置
45
+ */
46
+ get currentTerrainConfig(): ITerrainConfig;
47
+ /**
48
+ * 获取/设置最大深度(GUI 可控)
49
+ */
50
+ get maxDepth(): number;
51
+ set maxDepth(value: number);
52
+ /**
53
+ * 获取/设置误差目标(GUI 可控)
54
+ */
55
+ get errorTarget(): number;
56
+ set errorTarget(value: number);
57
+ /**
58
+ * 获取/设置地形显示状态(GUI 可控)
59
+ */
60
+ get showTerrain(): boolean;
61
+ set showTerrain(value: boolean);
62
+ /**
63
+ * 获取/设置 Alpha 裁剪模式(GUI 可控)
64
+ * - 用于支持 GeoJSON mask 功能
65
+ */
66
+ get alphaClipMode(): AlphaClipMode;
67
+ set alphaClipMode(value: AlphaClipMode);
68
+ constructor(ssp: SoonSpace, options?: ITerrainTilesRendererOptions);
69
+ private _initTilesRenderer;
70
+ /**
71
+ * 创建 TilesRenderer(统一方法,支持自定义地形和 Cesium Ion 地形)
72
+ * @param config 地形配置
73
+ */
74
+ private _initPlugins;
75
+ /**
76
+ * 销毁当前 tiles 实例
77
+ */
78
+ private _disposeTilesRenderer;
79
+ /**
80
+ * 更新所有已加载模型的 alpha 裁剪模式
81
+ */
82
+ private _updateAlphaClipMode;
83
+ /**
84
+ * 设置地形
85
+ * 会创建新的 TilesRenderer 实例以避免状态残留问题
86
+ * @param config 地形配置
87
+ * @example
88
+ * // 设置量化网格地形
89
+ * tilesRenderer.setTerrain({
90
+ * type: TerrainType.QUANTIZED_MESH,
91
+ * url: 'https://terrain.example.com/'
92
+ * })
93
+ *
94
+ * // 设置 Cesium Ion 地形
95
+ * tilesRenderer.setTerrain({
96
+ * type: TerrainType.CESIUM_ION,
97
+ * apiToken: 'your-token',
98
+ * assetId: '1'
99
+ * })
100
+ */
101
+ setTerrain(config: ITerrainConfig, options?: ITerrainTilesRendererOptions | undefined): void;
102
+ /**
103
+ * 添加 GeoJSON Overlay
104
+ * @example
105
+ * tilesRenderer.addGeoJSON({
106
+ * id: 'china-boundary',
107
+ * url: './data/china.geojson',
108
+ * color: '#ff0000',
109
+ * opacity: 0.8
110
+ * })
111
+ */
112
+ addGeoJSON(options: IGeoJSONOverlayOptions): import('um-3d-tiles-renderer/plugins').GeoJSONOverlay | null;
113
+ /**
114
+ * 添加 Cesium Ion Overlay
115
+ */
116
+ addCesiumIonOverlay(options: ICesiumIonOverlayOptions): import('um-3d-tiles-renderer/plugins').CesiumIonOverlay | null;
117
+ /**
118
+ * 添加 TMS Tiles Overlay
119
+ */
120
+ addTMSOverlay(options: ITMSTilesOverlayOptions): import('um-3d-tiles-renderer/plugins').TMSTilesOverlay | null;
121
+ /**
122
+ * 添加 XYZ Tiles Overlay
123
+ */
124
+ addXYZOverlay(options: IXYZTilesOverlayOptions): import('um-3d-tiles-renderer/plugins').XYZTilesOverlay | null;
125
+ /**
126
+ * 添加 URL Template Overlay
127
+ *
128
+ * 支持多种 URL 模板变量:
129
+ * - `{z}`, `{x}`, `{y}` - 标准 XYZ 坐标
130
+ * - `{s}` - 子域名轮换
131
+ * - `{reverseY}` - TMS 风格的 Y 坐标
132
+ * - `{westDegrees}`, `{southDegrees}`, `{eastDegrees}`, `{northDegrees}` - 地理边界框
133
+ *
134
+ * @example
135
+ * tilesPlugin.addUrlTemplateOverlay({
136
+ * id: 'osm',
137
+ * url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png'
138
+ * })
139
+ *
140
+ * @example
141
+ * tilesPlugin.addUrlTemplateOverlay({
142
+ * id: 'carto',
143
+ * url: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',
144
+ * subdomains: 'abcd'
145
+ * })
146
+ */
147
+ addUrlTemplateOverlay(options: IUrlTemplateOverlayOptions): import('um-3d-tiles-renderer/plugins').UrlTemplateTilesOverlay | null;
148
+ /**
149
+ * 添加 WMS Tiles Overlay
150
+ */
151
+ addWMSOverlay(options: IWMSTilesOverlayOptions): Promise<import('um-3d-tiles-renderer/plugins').WMSTilesOverlay | null>;
152
+ /**
153
+ * 添加 WMTS Tiles Overlay
154
+ */
155
+ addWMTSOverlay(options: IWMTSTilesOverlayOptions): Promise<import('um-3d-tiles-renderer/plugins').WMTSTilesOverlay | null>;
156
+ /**
157
+ * 移除指定 overlay
158
+ */
159
+ removeOverlay(id: string): boolean;
160
+ /**
161
+ * 更新 GeoJSON 颜色
162
+ */
163
+ updateGeoJSONColor(id: string, color: string): boolean;
164
+ /**
165
+ * 更新 GeoJSON 模式
166
+ * - overlay: 普通叠加显示
167
+ * - mask: 只显示 GeoJSON 区域内的地形
168
+ * - invertMask: 只显示 GeoJSON 区域外的地形
169
+ */
170
+ updateGeoJSONMode(id: string, mode: 'overlay' | 'mask' | 'invertMask'): boolean;
171
+ /**
172
+ * 更新 GeoJSON 描边样式
173
+ */
174
+ updateGeoJSONStrokeStyle(id: string, strokeStyle: string): boolean;
175
+ /**
176
+ * 更新 GeoJSON 描边宽度
177
+ */
178
+ updateGeoJSONStrokeWidth(id: string, strokeWidth: number): boolean;
179
+ /**
180
+ * 更新 GeoJSON 填充样式
181
+ */
182
+ updateGeoJSONFillStyle(id: string, fillStyle: string): boolean;
183
+ /**
184
+ * 设置 overlay 层级顺序
185
+ * @param id overlay ID
186
+ * @param order 层级顺序,数值越大越靠上
187
+ * @example
188
+ * tilesRenderer.setOverlayOrder('china-boundary', 10)
189
+ */
190
+ setOverlayOrder(id: string, order: number): boolean;
191
+ /**
192
+ * 获取 overlay 当前的层级顺序
193
+ * @param id overlay ID
194
+ */
195
+ getOverlayOrder(id: string): number;
196
+ /**
197
+ * 将 overlay 移动到最顶层
198
+ */
199
+ bringOverlayToFront(id: string): boolean;
200
+ /**
201
+ * 将 overlay 移动到最底层
202
+ */
203
+ sendOverlayToBack(id: string): boolean;
204
+ /**
205
+ * 设置 overlay 可见性
206
+ */
207
+ setOverlayVisible(id: string, visible: boolean): boolean;
208
+ /**
209
+ * 设置 overlay 透明度
210
+ */
211
+ setOverlayOpacity(id: string, opacity: number): boolean;
212
+ render: () => void;
213
+ beforeRenderHandler: () => void;
214
+ enable(): void;
215
+ disable(): void;
216
+ invalidate(lon: number, lat: number, alt: number): () => void;
217
+ dispose(): void;
218
+ }
@@ -0,0 +1,6 @@
1
+ export { TerrainTilesRenderer, } from './TerrainTilesRenderer';
2
+ export { OverlayManager, } from './OverlayManager';
3
+ export { ResourceManager, } from './ResourceManager';
4
+ export { TerrainManager, } from './TerrainManager';
5
+ export { TileCustomMaterialPlugin, } from './plugins';
6
+ export * from './types';
@@ -0,0 +1,26 @@
1
+ import { Object3D } from 'three';
2
+ import { TilesRenderer } from 'um-3d-tiles-renderer';
3
+ export type AlphaClipMode = 'alphaTest' | 'transparent' | 'alphaToCoverage';
4
+ /**
5
+ * 自定义材质插件
6
+ * 参考 ionExample.js:只修改材质的 alpha 属性,不替换材质
7
+ * 支持设置 alpha 裁剪模式(用于 GeoJSON mask)
8
+ */
9
+ export declare class TileCustomMaterialPlugin {
10
+ priority: number;
11
+ /** Alpha 裁剪模式 */
12
+ alphaClipMode: AlphaClipMode;
13
+ /**
14
+ * um-3d-tiles-renderer 插件接口:处理新加载的瓦片模型
15
+ */
16
+ processTileModel(scene: Object3D): void;
17
+ /**
18
+ * 更新所有已加载模型的材质
19
+ * @param tiles TilesRenderer 实例
20
+ */
21
+ updateAllLoadedModels(tiles: TilesRenderer): void;
22
+ /**
23
+ * 应用配置到单个材质
24
+ */
25
+ private _applyToMaterial;
26
+ }
@@ -0,0 +1 @@
1
+ export { TileCustomMaterialPlugin, } from './TileCustomMaterialPlugin';