@ino-cesium/layers 0.0.26-beta.3 → 0.0.26-beta.5

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 CHANGED
@@ -1,3 +1,3 @@
1
- # ino-cesium 图层加载
2
-
3
- 图层加载
1
+ # ino-cesium 图层加载
2
+
3
+ 图层加载
package/dist/index.d.ts CHANGED
@@ -1,53 +1,90 @@
1
1
  import * as Cesium from 'cesium';
2
+ import Cesium__default from 'cesium';
3
+
4
+ interface ILayerLoader {
5
+ destroy: () => void;
6
+ isDestroyed: () => boolean;
7
+ remove: () => void;
8
+ setOpacity: (opacity: number) => void;
9
+ flyTo: () => void;
10
+ }
11
+ interface IImageryLayerLoader extends ILayerLoader {
12
+ layers: Cesium__default.ImageryLayer[];
13
+ }
14
+
15
+ /**
16
+ * @module 加载天地图图层
17
+ */
2
18
 
3
19
  /**
4
20
  *
5
21
  * vec:矢量底图、cva:矢量标注、img:影像底图、cia:影像标注
6
22
  * ter:地形晕渲、cta:地形标注、eva:矢量英文标注、eia:影像英文标注
7
- * @param viewer
8
- * @param token
23
+ * @param option
24
+ * @param option.viewer
25
+ * @param option.token
26
+ * @param option.vec
27
+ * @param option.label
28
+ * @param option.zIndex
9
29
  */
10
- declare const loadTianDiTu: (option: ILoadTiandituOptions) => {
11
- layers: Cesium.ImageryLayer[];
12
- remove: () => void;
13
- setOpacity: (opacity: number) => void;
14
- };
30
+ declare const loadTianDiTu: (option: ILoadTiandituOptions) => IImageryLayerLoader;
15
31
  interface ILoadTiandituOptions {
16
32
  viewer: Cesium.Viewer;
17
33
  token: string;
18
34
  vec?: boolean;
35
+ crs?: string;
19
36
  label?: boolean;
20
37
  zIndex?: number;
21
38
  }
22
- declare function setImageLayerTheme(viewer: Cesium.Viewer, options?: ISetImageLayerOptions): void;
23
- interface ISetImageLayerOptions {
24
- brightness?: number;
25
- contrast?: number;
26
- gamma?: number;
27
- hue?: number;
28
- saturation?: number;
29
- invertColor?: boolean;
30
- filterColor?: Cesium.Color;
31
- }
32
39
 
33
- declare const load3dTiles: (lOptions: ILoad3dtilesOptions) => Promise<{
34
- tileset: Cesium.Cesium3DTileset;
35
- setHeightOffset: (heightOffset: number) => void;
36
- remove: () => void;
37
- flyTo: () => void;
38
- }>;
40
+ declare const load3dTilesFromUrl: (option: ILoad3dtilesOptions) => Promise<I3dTilesLoader>;
41
+ declare const load3dTiles: (lOptions: ILoad3dtilesOptions) => Promise<I3dTilesLoader>;
39
42
  /**
40
43
  * 设置3dTiles的偏移高度
41
44
  * @param tileset
42
45
  * @param heightOffset
43
46
  */
44
47
  declare const setHeightOffsetFor3dTiles: (tileset: Cesium.Cesium3DTileset, heightOffset: number) => void;
45
- declare const getAllFeaturesFrom3dTiles: (tileset: Cesium.Cesium3DTileset) => Promise<unknown>;
46
- declare const getAllTilesFrom3dTiles: (tileset: Cesium.Cesium3DTileset) => Promise<unknown>;
48
+ interface I3dTilesLoader {
49
+ tileset: Cesium.Cesium3DTileset;
50
+ /**
51
+ * 3dTiles的高度偏移量
52
+ */
53
+ heightOffset: number;
54
+ remove: () => void;
55
+ flyTo: () => void;
56
+ flyToByFeatureId: (id: string) => Promise<boolean>;
57
+ twinkingByFeatureId: (id: string) => void;
58
+ twinkingByTileId: (id: string) => void;
59
+ setHeightOffset: (heightOffsetValue: number) => void;
60
+ setOpacity: (opacity: number) => void;
61
+ setScale: (scale: number) => void;
62
+ setSplitDirection: (splitDirection: Cesium.SplitDirection) => void;
63
+ setSelectByFeatureIds: (id?: string) => void;
64
+ setSelectByTileIds: (id?: string) => void;
65
+ setSelectColor: (color: string) => void;
66
+ setBrightness: (brightness: number) => void;
67
+ setVisible: (visible: boolean) => void;
68
+ setVisibleByFeatureIds: (ids: string[], visible: boolean) => void;
69
+ setVisibleByTileId: (ids: string[], visible: boolean) => void;
70
+ getFeatures: () => any[];
71
+ getFeaturesGroupByTileId: () => any;
72
+ gpuUsageMonitor: (change: (value: string) => any) => {
73
+ close: () => void;
74
+ };
75
+ /**
76
+ * 设置显存占用 单位为MB
77
+ * @param size
78
+ */
79
+ setGpuUsageSize: (size: number) => void;
80
+ getGpuUsageSize: () => number;
81
+ }
47
82
  interface ILoad3dtilesOptions {
48
83
  viewer: Cesium.Viewer;
49
84
  url: string;
85
+ allTilesLoaded?: (tileFeatures: any, tileFeatureMap: any) => void;
50
86
  options: Cesium.Cesium3DTileset.ConstructorOptions;
87
+ token?: string;
51
88
  }
52
89
  /**
53
90
  * 3dTiles的坐标变换
@@ -98,5 +135,173 @@ interface ILoadI3sOptions {
98
135
  options: Cesium.I3SDataProvider.ConstructorOptions;
99
136
  }
100
137
 
101
- export { TransformsFor3dtiles, getAllFeaturesFrom3dTiles, getAllTilesFrom3dTiles, load3dTiles, loadI3s, loadModel, loadTerrain, loadTerrainFromCesium, loadTianDiTu, loads3m, removeTerrain, setHeightOffsetFor3dTiles, setImageLayerTheme };
102
- export type { ILoadTerrainOptions, ILoadTiandituOptions, ISetImageLayerOptions };
138
+ declare function setImageLayerTheme(viewer: Cesium.Viewer, options?: ISetImageLayerOptions): void;
139
+ interface ISetImageLayerOptions {
140
+ brightness?: number;
141
+ contrast?: number;
142
+ gamma?: number;
143
+ hue?: number;
144
+ saturation?: number;
145
+ invertColor?: boolean;
146
+ filterColor?: Cesium.Color;
147
+ }
148
+
149
+ /**
150
+ * @module wmts图层
151
+ */
152
+
153
+ /**
154
+ * 使用WebMapTileServiceImageryProvider或者UrlTemplateImageryProvider添加wmts图层
155
+ * @param options 图层配置
156
+ * @param options.url wmts图层url
157
+ * @param options.zIndex wmts图层索引
158
+ * @param options.crs wmts图层投影系,默认EPSG:3857
159
+ * - EPSG:4326 经纬度投影
160
+ * - EPSG:3857 墨卡托投影
161
+ * @param options.zLevelOffset z偏移量,默认0
162
+ * @param options.minimumLevel 最小层级,默认0
163
+ * @param options.maximumLevel 最大层级,默认18
164
+ * @param options.subdomains 子域名
165
+ * @param options.kvpInfo
166
+ * - wmts图层kvp参数,使用WebMapTileServiceImageryProvider添加wmts图层必须参数
167
+ * @returns {SuperMap3D.ImageryLayer}
168
+ */
169
+ declare const loadWmtsLayer: (options: IWmtsLayerLoaderOptions) => IImageryLayerLoader;
170
+ interface IWmtsLayerLoaderOptions {
171
+ viewer: Cesium.Viewer;
172
+ url: string;
173
+ /**
174
+ * 图层层级
175
+ */
176
+ zIndex?: number;
177
+ /**
178
+ * wmts图层投影系,默认EPSG:3857
179
+ * - EPSG:4326 经纬度投影
180
+ * - EPSG:3857 墨卡托投影
181
+ */
182
+ crs?: string;
183
+ /**
184
+ * z偏移量,默认0
185
+ * 有些服务发布出的图层z层级从0开始,有些从1开始,
186
+ * Cesium是从1开始,所以如果图层z层级从0开始,需要设置zLevelOffset为1
187
+ */
188
+ zLevelOffset?: number;
189
+ minimumLevel?: number;
190
+ maximumLevel?: number;
191
+ subdomains?: string[];
192
+ /**
193
+ * 加载kvp风格wmts图层,使用WebMapTileServiceImageryProvider添加wmts图层必须参数
194
+ */
195
+ kvpInfo?: {
196
+ layer: string;
197
+ style: string;
198
+ format: string;
199
+ tileMatrixSetID: string;
200
+ /**
201
+ * 会根据zLevelOffset和maximumLevel自动生成
202
+ * 默认为zLevelOffset到maximumLevel的数组
203
+ */
204
+ tileMatrixLabels?: string[];
205
+ };
206
+ }
207
+
208
+ /**
209
+ * 使用WebMapServiceImageryProvider添加wms图层
210
+ */
211
+ declare const loadWmsLayer: (options: IWmsLayerLoaderOptions) => IImageryLayerLoader;
212
+ interface IWmsLayerLoaderOptions {
213
+ viewer: Cesium.Viewer;
214
+ url: string;
215
+ /**
216
+ * 图层层级
217
+ */
218
+ zIndex?: number;
219
+ /**
220
+ * wms图层投影系,默认EPSG:3857
221
+ * - EPSG:4326 经纬度投影
222
+ * - EPSG:3857 墨卡托投影
223
+ */
224
+ crs?: string;
225
+ /**
226
+ * 图层名称
227
+ * 默认为url中的最后一段
228
+ */
229
+ layerName?: string;
230
+ minimumLevel?: number;
231
+ maximumLevel?: number;
232
+ subdomains?: string[];
233
+ parameters?: Record<string, string>;
234
+ }
235
+
236
+ declare const createBaseMapHandler: (viewer: Cesium.Viewer) => IBaseMapHandler;
237
+ type BaseMapKey = 'none' | 'tdt-image' | 'tdt-vec' | 'tdt-image-2000' | 'tdt-vec-2000' | 'gao-de' | 'baidu' | 'osm' | 'google' | 'bing' | 'cesium';
238
+ interface IBaseMapOptions {
239
+ url?: string;
240
+ token?: string;
241
+ label?: boolean;
242
+ /**
243
+ * 图层z-index
244
+ * 默认0
245
+ */
246
+ zIndex?: number;
247
+ }
248
+ interface IBaseMapHandler {
249
+ set: (mapKey: BaseMapKey, options?: IBaseMapOptions) => any;
250
+ get: () => IImageryLayerLoader | undefined;
251
+ remove: () => void;
252
+ flyTo: () => void;
253
+ setOpacity: (opacity: number) => void;
254
+ }
255
+
256
+ /**
257
+ * @module 加载OpenStreetMap图层
258
+ */
259
+
260
+ /**
261
+ *
262
+ * @param option
263
+ * @param option.viewer
264
+ * @param option.token
265
+ * @param option.crs 投影系,默认EPSG:3857
266
+ * - EPSG:4326 经纬度投影
267
+ * - EPSG:3857 墨卡托投影
268
+ * @param option.zIndex
269
+ * - 默认为0
270
+ * @param option.minimumLevel 最小层级,默认0
271
+ * @param option.maximumLevel 最大层级,默认18
272
+ */
273
+ declare const loadOsmLayer: (option: ILoadOsmOptions) => IImageryLayerLoader;
274
+ interface ILoadOsmOptions {
275
+ viewer: Cesium.Viewer;
276
+ type: 'hot' | 'osm';
277
+ crs?: string;
278
+ zIndex?: number;
279
+ minimumLevel?: number;
280
+ maximumLevel?: number;
281
+ }
282
+
283
+ /**
284
+ * @module 加载cesium assets 图层
285
+ */
286
+
287
+ /**
288
+ * 加载cesium资产
289
+ * @param option
290
+ * @param option.viewer
291
+ * @param option.id 资产id 默认为3
292
+ */
293
+ declare const loadCesiumAssets: (option: ILoadCesiumAssetsOptions) => Promise<IImageryLayerLoader>;
294
+ interface ILoadCesiumAssetsOptions {
295
+ viewer: Cesium.Viewer;
296
+ /**
297
+ * 资产id 默认为3
298
+ */
299
+ id?: number;
300
+ /**
301
+ * 图层z-index
302
+ */
303
+ zIndex?: number;
304
+ }
305
+
306
+ export { TransformsFor3dtiles, createBaseMapHandler, load3dTiles, load3dTilesFromUrl, loadCesiumAssets, loadI3s, loadModel, loadOsmLayer, loadTerrain, loadTerrainFromCesium, loadTianDiTu, loadWmsLayer, loadWmtsLayer, loads3m, removeTerrain, setHeightOffsetFor3dTiles, setImageLayerTheme };
307
+ export type { I3dTilesLoader, IBaseMapHandler, IBaseMapOptions, IImageryLayerLoader, ILayerLoader, ILoadCesiumAssetsOptions, ILoadOsmOptions, ILoadTerrainOptions, ILoadTiandituOptions, ISetImageLayerOptions, IWmsLayerLoaderOptions, IWmtsLayerLoaderOptions };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import*as e from"cesium";const r=r=>{const{viewer:t,token:o}=r,a=r.vec?"vec":"img",i=[],n=t.imageryLayers.addImageryProvider(new e.WebMapTileServiceImageryProvider({url:`//t{s}.tianditu.gov.cn/${a}_w/wmts?tk=${o}`,layer:a,style:"default",tileMatrixSetID:"w",format:"tiles",maximumLevel:18,subdomains:["0","1","2","3","4","5","6","7"]}));if(i.push(n),r.label){const r=t.imageryLayers.addImageryProvider(new e.WebMapTileServiceImageryProvider({url:`//t{s}.tianditu.gov.cn/cia_w/wmts?tk=${o}`,layer:"cia",style:"default",tileMatrixSetID:"w",format:"tiles",maximumLevel:18,subdomains:["0","1","2","3","4","5","6","7"]}));i.push(r)}return{layers:i,remove:()=>{i.forEach(e=>{t.imageryLayers.remove(e)})},setOpacity:e=>{i.forEach(r=>{r.alpha=e})}}};function t(r,t){t||(t={}),console.log(t.filterColor);const o=r.imageryLayers.get(0);if(!o)return;o.brightness=t.brightness??.6,o.contrast=t.contrast??1.8,o.gamma=t.gamma??.3,o.hue=t.hue??1,o.saturation=t.saturation||0;const a=r.scene.globe._surfaceShaderSet.baseFragmentShaderSource.sources;for(let r=0;r<a.length;r++){const o="color = czm_saturation(color, textureSaturation);\n#endif\n";let i="color = czm_saturation(color, textureSaturation);\n#endif\n";t.invertColor||(i+="\n color.r = 1.0 - color.r;\n color.g = 1.0 - color.g;\n color.b = 1.0 - color.b;\n "),t.filterColor||(t.filterColor=e.Color.fromCssColorString("rgba(100,138,230,0.5)")),i+=`\n color.r = color.r * ${t.filterColor.red.toFixed(2)};\n color.g = color.g * ${t.filterColor.green.toFixed(2)};\n color.b = color.b * ${t.filterColor.blue.toFixed(2)};\n // color.a = color.a * ${t.filterColor.alpha.toFixed(2)};\n `,a[r]=a[r].replace(o,i)}r.scene.requestRender()}const o={cacheBytes:4294967296,maximumCacheOverflowBytes:5368709120},a=async r=>{const{viewer:t,url:a,options:n}=r,s=await e.Cesium3DTileset.fromUrl(a,{...o,...n});t.scene.primitives.add(s);return{tileset:s,setHeightOffset:e=>{i(s,e)},remove:()=>{t.scene.primitives.remove(s)},flyTo:()=>{t.flyTo(s)}}},i=(r,t)=>{l(r,e.Cartesian3.fromElements(0,0,t,new e.Cartesian3))},n=async e=>{const r=[];function t(e){if(console.log(e),!e.content||!e.content.featuresLength)return;const o=e.content;for(let e=0;e<o.featuresLength;e++)r.push(o.getFeature(e));e.children?.forEach(t)}return new Promise(o=>{e.allTilesLoaded.addEventListener(()=>{t(e.root),o(r)})})},s=e=>{const r=[];function t(e){r.push(e),e.children?.forEach(t)}return new Promise(o=>{e.allTilesLoaded.addEventListener(()=>{t(e.root),o(r)})})},l=(r,t)=>{if(t.equals(e.Cartesian3.ZERO))return;const o=r.boundingSphere.center,a=e.Transforms.eastNorthUpToFixedFrame(o),i=e.Matrix4.multiplyByPoint(a,t,new e.Cartesian3),n=e.Cartesian3.subtract(i,o,new e.Cartesian3),s=e.Matrix4.fromTranslation(n);r.modelMatrix=e.Matrix4.multiply(s,r.modelMatrix,new e.Matrix4)},c={translate:l,scale:(r,t)=>{if(t.equals(e.Cartesian3.ZERO)||t.equals(e.Cartesian3.ONE))return;const o=r.boundingSphere.center,a=e.Transforms.eastNorthUpToFixedFrame(o),i=e.Matrix4.inverse(a,new e.Matrix4),n=e.Matrix4.fromScale(t),s=e.Matrix4.multiply(n,i,new e.Matrix4),l=e.Matrix4.multiply(a,s,new e.Matrix4);r.modelMatrix=e.Matrix4.multiply(l,r.modelMatrix,new e.Matrix4)},rotate:(r,t)=>{const{x:o,y:a,z:i}=t,n=r.boundingSphere.center,s=e.Transforms.eastNorthUpToFixedFrame(n),l=e.Matrix4.inverse(s,new e.Matrix4),c=e.Matrix4.clone(e.Matrix4.IDENTITY);if(0!==o){const r=e.Matrix4.fromRotation(e.Matrix3.fromRotationX(e.Math.toRadians(o)));e.Matrix4.multiply(r,c,c)}if(0!==a){const r=e.Matrix4.fromRotation(e.Matrix3.fromRotationY(e.Math.toRadians(a)));e.Matrix4.multiply(r,c,c)}if(0!==i){const r=e.Matrix4.fromRotation(e.Matrix3.fromRotationZ(e.Math.toRadians(i)));e.Matrix4.multiply(r,c,c)}const m=e.Matrix4.multiply(c,l,new e.Matrix4),u=e.Matrix4.multiply(s,m,new e.Matrix4);r.modelMatrix=e.Matrix4.multiply(u,r.modelMatrix,new e.Matrix4)}},m=async r=>{const{viewer:t,url:o}=r,a=await e.CesiumTerrainProvider.fromUrl(o,{requestWaterMask:!0,requestVertexNormals:!0});t.scene.terrainProvider=a;return{terrainProvider:a,remove:()=>{t.scene.terrainProvider=new e.EllipsoidTerrainProvider}}},u=r=>{r.scene.terrainProvider=new e.EllipsoidTerrainProvider},d=async()=>await e.CesiumTerrainProvider.fromIonAssetId(1,{requestWaterMask:!0,requestVertexNormals:!0}),f=()=>{},x=()=>{},M=async r=>{const{viewer:t,url:o,options:a}=r,n=await e.I3SDataProvider.fromUrl(o,a);t.scene.primitives.add(n);return{i3sProvider:n,setHeightOffset:e=>{n.layers.forEach(r=>{const t=r.tileset;t&&i(t,e)})},remove:()=>{t.scene.primitives.remove(n)},flyTo:r=>{const o=e.Rectangle.center(n.extent);o.height=r;let a=n.data;e.defined(a.layers)&&a.layers.length>0&&(a=a.layers[0]),e.defined(a.fullExtent)&&e.defined(a.fullExtent.zmax)&&(o.height+=a.fullExtent.zmax);const i=e.Ellipsoid.WGS84.cartographicToCartesian(o);t.camera.flyTo({destination:i,orientation:{}})}}};export{c as TransformsFor3dtiles,n as getAllFeaturesFrom3dTiles,s as getAllTilesFrom3dTiles,a as load3dTiles,M as loadI3s,f as loadModel,m as loadTerrain,d as loadTerrainFromCesium,r as loadTianDiTu,x as loads3m,u as removeTerrain,i as setHeightOffsetFor3dTiles,t as setImageLayerTheme};
1
+ import*as e from"cesium";import{destroyAssert as r,getUrlResourceForToken as t,getFeaturesFromTileFeature as o}from"@ino-cesium/common";const a=t=>{const{viewer:o,token:a}=t;a||(t.token="1d109683f4d84198e37a38c442d68311");let s=!1;const l=t.vec?"vec":"img",c=t.vec?"cva":"via",m=[],d=i(t.crs),y=o.imageryLayers.addImageryProvider(new e.WebMapTileServiceImageryProvider({url:`//t{s}.tianditu.gov.cn/${l}_${d}/wmts?tk=${a}`,layer:l,style:"default",tileMatrixSetID:d,format:"tiles",maximumLevel:18,subdomains:["0","1","2","3","4","5","6","7"],tileMatrixLabels:n(t.crs)}));if(m.push(y),t.label){const r=o.imageryLayers.addImageryProvider(new e.WebMapTileServiceImageryProvider({url:`//t{s}.tianditu.gov.cn/${c}_${d}/wmts?tk=${a}`,layer:c,style:"default",tileMatrixSetID:d,format:"tiles",maximumLevel:18,subdomains:["0","1","2","3","4","5","6","7"],tileMatrixLabels:n(t.crs)}));m.push(r)}const u=()=>{r("TianDiTuLoader",s),m.forEach(e=>{o.imageryLayers.remove(e)})};return{layers:m,flyTo:()=>{r("TianDiTuLoader",s),o.flyTo(m[0])},remove:u,setOpacity:e=>{r("TianDiTuLoader",s),m.forEach(r=>{r.alpha=e})},destroy:()=>{r("TianDiTuLoader",s),u(),s=!0},isDestroyed:()=>(r("TianDiTuLoader",s),s)}},i=e=>"EPSG:4326"===e?"w":"c",n=e=>"EPSG:4326"===e?["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18"]:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"],s={cacheBytes:1073741824},l=async e=>{const{url:r}=e;return c({...e,url:r})},c=async r=>{const{viewer:a,url:i,options:n,token:l}=r;let c=0,d="",u="",g="rgba(45,140,240,0.5)",f=[];const v={},p=t({url:i,token:l}),w=await e.Cesium3DTileset.fromUrl(p,{...s,...n});a.scene.primitives.add(w);const h={};w.allTilesLoaded.addEventListener(()=>{w.root.children.forEach(e=>{e._tileId=numbersId();const r=[];if(e.content){h[e._tileId]=[];const t=e.content.featuresLength;Array.from({length:t}).forEach((t,a)=>{const i=e.content.getFeature(a),n=o(i);r.push(n),v[n.id]=i})}h[e._tileId]=r}),r.allTilesLoaded&&r.allTilesLoaded(h,v)});const x=()=>{const r=e.Color.fromCssColorString(g);w.style=new e.Cesium3DTileStyle({renderState:{backFaceCulling:!1},color:{evaluateColor(t,o){if(!t)return e.Color.clone(e.Color.WHITE,o);const a=t.getProperty("id");return u?a===u?e.Color.clone(r,o):e.Color.clone(e.Color.WHITE.withAlpha(.2),o):a===d?e.Color.clone(r,o):e.Color.clone(e.Color.WHITE,o)}},show:{evaluate(e){if(!e)return!0;const r=e.getProperty("id");return!f.includes(r)}}})};x();return{tileset:w,heightOffset:c,remove:()=>{c=0,a.scene.primitives.remove(w)},flyTo:()=>{w._newBoundingSphere?a.camera.flyToBoundingSphere(w._newBoundingSphere):a.flyTo(w)},flyToByFeatureId:async e=>{if(!e)return;const r=v[e].content.tile;return new Promise(e=>{a.camera.flyToBoundingSphere(r.boundingSphere,{complete:()=>{e(!0)}})})},twinkingByTileId:e=>e,twinkingByFeatureId:e=>{if(!e)return u="",void x();u=e,x(),setTimeout(()=>{u="",x(),setTimeout(()=>{u=e,x()},500)},500)},setHeightOffset:e=>{c=e,m(w,e)},setOpacity:r=>{w.style=new e.Cesium3DTileStyle({color:{conditions:[["true",`color('white', ${r})`]]}})},setScale:r=>{y(w,new e.Cartesian3(r,r,r))},setSplitDirection:e=>{w.splitDirection=e},setSelectByFeatureIds:e=>{u="",d=e||"",x()},setSelectColor:e=>{g=e},setSelectByTileIds:e=>e,setBrightness:e=>e,setVisible:e=>{w.show=e,f.length=0},setVisibleByFeatureIds:(e,r)=>{let t=[];r?t=f.filter(r=>!e.includes(r)):(t.push(...f),t.push(...e)),f=t,x()},getFeatures:()=>Object.values(v).map(e=>o(e)),getFeaturesGroupByTileId:()=>h,setVisibleByTileId:(e,r)=>{const t=[];e.forEach(e=>{const o=Object.values(h[e]).map(e=>e.id);r?t.push(...f.filter(e=>!o.includes(e))):t.push(...o)}),r||t.push(...f),f=t,x()},gpuUsageMonitor:e=>{const r=setInterval(()=>{const r=w.totalMemoryUsageInBytes;e((r/1024/1024).toFixed(2))},1e3);return{close:()=>{r&&clearInterval(r)}}},setGpuUsageSize:e=>{w.cacheBytes=1024*e*1024},getGpuUsageSize:()=>w.cacheBytes/1024/1024}},m=(r,t)=>{d(r,e.Cartesian3.fromElements(0,0,t,new e.Cartesian3))},d=(r,t)=>{if(t.equals(e.Cartesian3.ZERO))return;const o=r.boundingSphere.center,a=e.Transforms.eastNorthUpToFixedFrame(o),i=e.Matrix4.multiplyByPoint(a,t,new e.Cartesian3),n=e.Cartesian3.subtract(i,o,new e.Cartesian3),s=e.Matrix4.fromTranslation(n);r.modelMatrix=e.Matrix4.multiply(s,r.modelMatrix,new e.Matrix4)},y=(r,t)=>{if(t.equals(e.Cartesian3.ZERO)||t.equals(e.Cartesian3.ONE))return;const o=r.boundingSphere.center,a=e.Transforms.eastNorthUpToFixedFrame(o),i=e.Matrix4.inverse(a,new e.Matrix4),n=e.Matrix4.fromScale(t),s=e.Matrix4.multiply(n,i,new e.Matrix4),l=e.Matrix4.multiply(a,s,new e.Matrix4);r.modelMatrix=e.Matrix4.multiply(l,r.modelMatrix,new e.Matrix4)},u={translate:d,scale:y,rotate:(r,t)=>{const{x:o,y:a,z:i}=t,n=r.boundingSphere.center,s=e.Transforms.eastNorthUpToFixedFrame(n),l=e.Matrix4.inverse(s,new e.Matrix4),c=e.Matrix4.clone(e.Matrix4.IDENTITY);if(0!==o){const r=e.Matrix4.fromRotation(e.Matrix3.fromRotationX(e.Math.toRadians(o)));e.Matrix4.multiply(r,c,c)}if(0!==a){const r=e.Matrix4.fromRotation(e.Matrix3.fromRotationY(e.Math.toRadians(a)));e.Matrix4.multiply(r,c,c)}if(0!==i){const r=e.Matrix4.fromRotation(e.Matrix3.fromRotationZ(e.Math.toRadians(i)));e.Matrix4.multiply(r,c,c)}const m=e.Matrix4.multiply(c,l,new e.Matrix4),d=e.Matrix4.multiply(s,m,new e.Matrix4);r.modelMatrix=e.Matrix4.multiply(d,r.modelMatrix,new e.Matrix4)}},g=async r=>{const{viewer:t,url:o}=r,a=await e.CesiumTerrainProvider.fromUrl(o,{requestWaterMask:!0,requestVertexNormals:!0});t.scene.terrainProvider=a;return{terrainProvider:a,remove:()=>{t.scene.terrainProvider=new e.EllipsoidTerrainProvider}}},f=r=>{r.scene.terrainProvider=new e.EllipsoidTerrainProvider},v=async()=>await e.CesiumTerrainProvider.fromIonAssetId(1,{requestWaterMask:!0,requestVertexNormals:!0}),p=()=>{},w=()=>{},h=async r=>{const{viewer:t,url:o,options:a}=r,i=await e.I3SDataProvider.fromUrl(o,a);t.scene.primitives.add(i);return{i3sProvider:i,setHeightOffset:e=>{i.layers.forEach(r=>{const t=r.tileset;t&&m(t,e)})},remove:()=>{t.scene.primitives.remove(i)},flyTo:r=>{const o=e.Rectangle.center(i.extent);o.height=r;let a=i.data;e.defined(a.layers)&&a.layers.length>0&&(a=a.layers[0]),e.defined(a.fullExtent)&&e.defined(a.fullExtent.zmax)&&(o.height+=a.fullExtent.zmax);const n=e.Ellipsoid.WGS84.cartographicToCartesian(o);t.camera.flyTo({destination:n,orientation:{}})}}};function x(r,t){t||(t={});const o=r.imageryLayers.get(0);if(!o)return;o.brightness=t.brightness??.6,o.contrast=t.contrast??1.8,o.gamma=t.gamma??.3,o.hue=t.hue??1,o.saturation=t.saturation||0;const a=r.scene.globe._surfaceShaderSet.baseFragmentShaderSource.sources;for(let r=0;r<a.length;r++){const o="color = czm_saturation(color, textureSaturation);\n#endif\n";let i="color = czm_saturation(color, textureSaturation);\n#endif\n";t.invertColor||(i+="\n color.r = 1.0 - color.r;\n color.g = 1.0 - color.g;\n color.b = 1.0 - color.b;\n "),t.filterColor||(t.filterColor=e.Color.fromCssColorString("rgba(100,138,230,0.5)")),i+=`\n color.r = color.r * ${t.filterColor.red.toFixed(2)};\n color.g = color.g * ${t.filterColor.green.toFixed(2)};\n color.b = color.b * ${t.filterColor.blue.toFixed(2)};\n // color.a = color.a * ${t.filterColor.alpha.toFixed(2)};\n `,a[r]=a[r].replace(o,i)}r.scene.requestRender()}const T=r=>{const t="EPSG:3857",o={"EPSG:4326":new e.GeographicTilingScheme,"EPSG:4490":new e.GeographicTilingScheme,"EPSG:3857":new e.WebMercatorTilingScheme};return o[r||t]||o[t]},L=t=>{let o,a,i=!1;if(t.zLevelOffset||(t.zLevelOffset=0),t.url.includes("{z}")){const r=function(r){const t=T(r.crs),o=r.url.replace("{z}","{levelZ}"),a=new e.UrlTemplateImageryProvider({...r,url:o,tilingScheme:t,customTags:{levelZ:(e,t,o,a)=>a+(r.zLevelOffset||0)}}),i=new e.ImageryLayer(a);return r.viewer.imageryLayers.add(i,r.zIndex),{imageryProvider:a,imageryLayer:i}}(t);o=r.imageryProvider,a=r.imageryLayer}else{const e=M(t);o=e.imageryProvider,a=e.imageryLayer}if(!o)throw new Error("wmts图层加载失败");const n=()=>{r("wmtsLoader",i),t.viewer.imageryLayers.remove(a)};return{layers:[a],remove:n,destroy:()=>{r("wmtsLoader",i),i=!0,n()},isDestroyed:()=>(r("wmtsLoader",i),i),flyTo:()=>{r("wmtsLoader",i),setTimeout(()=>{t.viewer.camera.flyTo({destination:o.rectangle})},1e3)},setOpacity:e=>{r("wmtsLoader",i),a.alpha=e}}};const M=r=>{const t=T(r.crs),o=r.zLevelOffset||0,a=r.kvpInfo?.tileMatrixLabels||I(o,r.maximumLevel||18),i=new e.WebMapTileServiceImageryProvider({tileMatrixLabels:a,...r,...r.kvpInfo,tilingScheme:t}),n=new e.ImageryLayer(i);return r.viewer.imageryLayers.add(n,r.zIndex),{imageryProvider:i,imageryLayer:n}},I=(e,r)=>Array.from({length:r-e},(r,t)=>t+e).map(String),S=t=>{let o=!1;const a=T(t.crs);t.layerName||(t.layerName=t.url.split("?")[0].split("/").pop()||"",t.url=t.url.replace(`/${t.layerName}`,""));const i=new e.WebMapServiceImageryProvider({layers:t.layerName,parameters:{format:"image/png",transparent:!0},...t,tilingScheme:a}),n=new e.ImageryLayer(i);if(t.viewer.imageryLayers.add(n,t.zIndex),!i)throw new Error("wms图层加载失败");const s=()=>{r("wmsLayer",o),t.viewer.imageryLayers.remove(n)};return{layers:[n],remove:s,destroy:()=>{r("loadWmsLayer",o),o=!0,s()},isDestroyed:()=>(r("wmsLayer",o),o),flyTo:()=>{r("wmsLayer",o),setTimeout(()=>{t.viewer.camera.flyTo({destination:i.rectangle})},1e3)},setOpacity:e=>{r("wmsLayer",o),n.alpha=e}}},b=async t=>{const{viewer:o,id:a}=t;let i=!1;const n=[];a||(t.id=3);const s=o.imageryLayers.addImageryProvider(await e.IonImageryProvider.fromAssetId(a),t.zIndex);n.push(s);const l=()=>{r("TianDiTuLoader",i),n.forEach(e=>{o.imageryLayers.remove(e)})};return{layers:n,flyTo:()=>{r("TianDiTuLoader",i),o.flyTo(n[0])},remove:l,setOpacity:e=>{r("TianDiTuLoader",i),n.forEach(r=>{r.alpha=e})},destroy:()=>{r("TianDiTuLoader",i),l(),i=!0},isDestroyed:()=>(r("TianDiTuLoader",i),i)}},C=e=>{let r,t=0;const o=()=>{r&&(r.remove(),r=void 0)},i={none:()=>{r&&r?.remove()},"tdt-image":(e,r)=>a({viewer:e,token:r.token,label:r.label}),"tdt-vec":(e,r)=>a({viewer:e,token:r.token,label:r.label,vec:!0}),"tdt-image-2000":(e,r)=>a({viewer:e,token:r.token,label:r.label,crs:"EPSG:4326"}),"tdt-vec-2000":(e,r)=>a({viewer:e,token:r.token,label:r.label,vec:!0,crs:"EPSG:4326"}),"gao-de":(e,r)=>({viewer:e,options:r}),baidu:(e,r)=>({viewer:e,options:r}),osm:(e,r)=>({viewer:e,options:r}),google:(e,r)=>({viewer:e,options:r}),bing:(e,r)=>({viewer:e,options:r}),cesium:(e,r)=>b({viewer:e,id:r.url,zIndex:t})};return{set:(a,n)=>{if(t=n?.zIndex||0,!i[a])throw new Error(`未定义的底图类型:${a}`);return o(),n||(n={token:"",url:"",label:!1}),r=i[a](e,n),r},get:()=>r,setOpacity:e=>{r&&r.setOpacity(e)},remove:o,flyTo:()=>{r&&r.flyTo()}}},P=t=>{const{viewer:o}=t;let a=!1;const i=[],n=E[t.type]||E.osm,s=new e.UrlTemplateImageryProvider({url:n,tilingScheme:T(t.crs),minimumLevel:t.minimumLevel||0,maximumLevel:t.maximumLevel||18}),l=new e.ImageryLayer(s);o.imageryLayers.addImageryProvider(s,t.zIndex||0),i.push(l);const c=()=>{r("loadOsmLayer",a),i.forEach(e=>{o.imageryLayers.remove(e)})};return{layers:i,flyTo:()=>{r("loadOsmLayer",a),o.flyTo(i[0])},remove:c,setOpacity:e=>{r("loadOsmLayer",a),i.forEach(r=>{r.alpha=e})},destroy:()=>{r("loadOsmLayer",a),c(),a=!0},isDestroyed:()=>(r("loadOsmLayer",a),a)}},E={hot:"//{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",osm:"//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",cycle:"//{s}.tile.openstreetmap.org/cycle/{z}/{x}/{y}.png"};export{u as TransformsFor3dtiles,C as createBaseMapHandler,c as load3dTiles,l as load3dTilesFromUrl,b as loadCesiumAssets,h as loadI3s,p as loadModel,P as loadOsmLayer,g as loadTerrain,v as loadTerrainFromCesium,a as loadTianDiTu,S as loadWmsLayer,L as loadWmtsLayer,w as loads3m,f as removeTerrain,m as setHeightOffsetFor3dTiles,x as setImageLayerTheme};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ino-cesium/layers",
3
3
  "type": "module",
4
- "version": "0.0.26-beta.3",
4
+ "version": "0.0.26-beta.5",
5
5
  "author": "koino",
6
6
  "keywords": [
7
7
  "cesium",
@@ -24,11 +24,12 @@
24
24
  "dist/*.js",
25
25
  "README.MD"
26
26
  ],
27
+ "main": "./dist/index.js",
27
28
  "peerDependencies": {
28
29
  "cesium": "1.134.0"
29
30
  },
30
31
  "dependencies": {
31
- "@ino-cesium/common": "0.0.26-beta.3"
32
+ "@ino-cesium/common": "0.0.26-beta.5"
32
33
  },
33
34
  "devDependencies": {},
34
35
  "scripts": {