UNPKG

iceye-angular-cesium-fork

Version:

Angular library for working with Cesium.

137 lines 17.1 kB
import { Component, Input } from '@angular/core'; import { CesiumService } from '../../services/cesium/cesium.service'; import { Checker } from '../../utils/checker'; import { MapLayerProviderOptions } from '../../models'; /** * This component is used for adding a map provider service to the map (ac-map) * options according to selected map provider MapLayerProviderOptions enum. * additional setting can be done with cesium imageryLayer (exposed as class member) * check out: https://cesiumjs.org/Cesium/Build/Documentation/ImageryLayer.html * and: https://cesiumjs.org/Cesium/Build/Documentation/ImageryLayerCollection.html * * * __Usage :__ * ``` * <ac-map-layer-provider [options]="optionsObject" [provider]="myProvider"> * </ac-map-layer-provider> * ``` */ export class AcMapLayerProviderComponent { constructor(cesiumService) { this.cesiumService = cesiumService; /** * refer to cesium docs for details https://cesiumjs.org/Cesium/Build/Documentation/ImageryProvider.html */ this.options = {}; /** * the provider */ this.provider = MapLayerProviderOptions.OFFLINE; /** * show (optional) - Determines if the map layer is shown. */ this.show = true; /** * The alpha blending value of this layer: 0.0 to 1.0 */ this.alpha = 1.0; /** * The brightness of this layer: 0.0 to 1.0 */ this.brightness = 1.0; /** * The contrast of this layer: 0.0 to 1.0 */ this.contrast = 1.0; this.imageryLayersCollection = this.cesiumService.getScene().imageryLayers; } createOfflineMapProvider() { return Cesium.createTileMapServiceImageryProvider({ url: Cesium.buildModuleUrl('Assets/Textures/NaturalEarthII') }); } ngOnInit() { if (!Checker.present(this.options.url) && this.provider !== MapLayerProviderOptions.OFFLINE) { throw new Error('options must have a url'); } switch (this.provider) { case MapLayerProviderOptions.WebMapService: case MapLayerProviderOptions.WebMapTileService: case MapLayerProviderOptions.ArcGisMapServer: case MapLayerProviderOptions.SingleTileImagery: case MapLayerProviderOptions.BingMaps: case MapLayerProviderOptions.GoogleEarthEnterpriseMaps: case MapLayerProviderOptions.MapBox: case MapLayerProviderOptions.UrlTemplateImagery: case MapLayerProviderOptions.MapTileService: case MapLayerProviderOptions.OpenStreetMap: this.layerProvider = new this.provider(this.options); break; case MapLayerProviderOptions.OFFLINE: this.layerProvider = this.createOfflineMapProvider(); break; default: console.log('ac-map-layer-provider: [provider] wasn\'t found. setting OFFLINE provider as default'); this.layerProvider = this.createOfflineMapProvider(); break; } if (this.show) { this.imageryLayer = this.imageryLayersCollection.addImageryProvider(this.layerProvider, this.index); this.imageryLayer.alpha = this.alpha; this.imageryLayer.contrast = this.contrast; this.imageryLayer.brightness = this.brightness; } } ngOnChanges(changes) { if (changes['show'] && !changes['show'].isFirstChange()) { const showValue = changes['show'].currentValue; if (showValue) { if (this.imageryLayer) { this.imageryLayersCollection.add(this.imageryLayer, this.index); } else { this.imageryLayer = this.imageryLayersCollection.addImageryProvider(this.layerProvider, this.index); this.imageryLayer.alpha = this.alpha; this.imageryLayer.contrast = this.contrast; this.imageryLayer.brightness = this.brightness; } } else if (this.imageryLayer) { this.imageryLayersCollection.remove(this.imageryLayer, false); } } if (changes['alpha'] && !changes['alpha'].isFirstChange() && this.imageryLayer) { this.imageryLayer.alpha = this.alpha; } if (changes['contrast'] && !changes['contrast'].isFirstChange() && this.imageryLayer) { this.imageryLayer.contrast = this.contrast; } if (changes['brightness'] && !changes['brightness'].isFirstChange() && this.imageryLayer) { this.imageryLayer.brightness = this.brightness; } } ngOnDestroy() { if (this.imageryLayer) { this.imageryLayersCollection.remove(this.imageryLayer, true); } } } AcMapLayerProviderComponent.decorators = [ { type: Component, args: [{ selector: 'ac-map-layer-provider', template: '' },] } ]; AcMapLayerProviderComponent.ctorParameters = () => [ { type: CesiumService } ]; AcMapLayerProviderComponent.propDecorators = { options: [{ type: Input }], provider: [{ type: Input }], index: [{ type: Input }], show: [{ type: Input }], alpha: [{ type: Input }], brightness: [{ type: Input }], contrast: [{ type: Input }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWMtbWFwLWxheWVyLXByb3ZpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY2VzaXVtL3NyYy9saWIvYW5ndWxhci1jZXNpdW0vY29tcG9uZW50cy9hYy1tYXAtbGF5ZXItcHJvdmlkZXIvYWMtbWFwLWxheWVyLXByb3ZpZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBK0MsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdkQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUtILE1BQU0sT0FBTywyQkFBMkI7SUFnRHRDLFlBQW9CLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBOUNoRDs7V0FFRztRQUVILFlBQU8sR0FBcUIsRUFBRSxDQUFDO1FBRS9COztXQUVHO1FBRUgsYUFBUSxHQUFRLHVCQUF1QixDQUFDLE9BQU8sQ0FBQztRQVFoRDs7V0FFRztRQUVILFNBQUksR0FBRyxJQUFJLENBQUM7UUFFWjs7V0FFRztRQUVILFVBQUssR0FBRyxHQUFHLENBQUM7UUFFWjs7V0FFRztRQUVILGVBQVUsR0FBRyxHQUFHLENBQUM7UUFFakI7O1dBRUc7UUFFSCxhQUFRLEdBQUcsR0FBRyxDQUFDO1FBT2IsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDO0lBQzdFLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsT0FBTyxNQUFNLENBQUMsbUNBQW1DLENBQUM7WUFDaEQsR0FBRyxFQUFFLE1BQU0s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QUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2VzaXVtU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nlc2l1bS9jZXNpdW0uc2VydmljZSc7XG5pbXBvcnQgeyBDaGVja2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2hlY2tlcic7XG5pbXBvcnQgeyBNYXBMYXllclByb3ZpZGVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5cbi8qKlxuICogIFRoaXMgY29tcG9uZW50IGlzIHVzZWQgZm9yIGFkZGluZyBhIG1hcCBwcm92aWRlciBzZXJ2aWNlIHRvIHRoZSBtYXAgKGFjLW1hcClcbiAqICBvcHRpb25zIGFjY29yZGluZyB0byBzZWxlY3RlZCBtYXAgcHJvdmlkZXIgTWFwTGF5ZXJQcm92aWRlck9wdGlvbnMgZW51bS5cbiAqICBhZGRpdGlvbmFsIHNldHRpbmcgY2FuIGJlIGRvbmUgd2l0aCBjZXNpdW0gaW1hZ2VyeUxheWVyIChleHBvc2VkIGFzIGNsYXNzIG1lbWJlcilcbiAqICBjaGVjayBvdXQ6IGh0dHBzOi8vY2VzaXVtanMub3JnL0Nlc2l1bS9CdWlsZC9Eb2N1bWVudGF0aW9uL0ltYWdlcnlMYXllci5odG1sXG4gKiAgYW5kOiBodHRwczovL2Nlc2l1bWpzLm9yZy9DZXNpdW0vQnVpbGQvRG9jdW1lbnRhdGlvbi9JbWFnZXJ5TGF5ZXJDb2xsZWN0aW9uLmh0bWxcbiAqXG4gKlxuICogIF9fVXNhZ2UgOl9fXG4gKiAgYGBgXG4gKiAgICA8YWMtbWFwLWxheWVyLXByb3ZpZGVyIFtvcHRpb25zXT1cIm9wdGlvbnNPYmplY3RcIiBbcHJvdmlkZXJdPVwibXlQcm92aWRlclwiPlxuICogICAgPC9hYy1tYXAtbGF5ZXItcHJvdmlkZXI+XG4gKiAgYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjLW1hcC1sYXllci1wcm92aWRlcicsXG4gIHRlbXBsYXRlOiAnJyxcbn0pXG5leHBvcnQgY2xhc3MgQWNNYXBMYXllclByb3ZpZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgLyoqXG4gICAqIHJlZmVyIHRvIGNlc2l1bSBkb2NzIGZvciBkZXRhaWxzIGh0dHBzOi8vY2VzaXVtanMub3JnL0Nlc2l1bS9CdWlsZC9Eb2N1bWVudGF0aW9uL0ltYWdlcnlQcm92aWRlci5odG1sXG4gICAqL1xuICBASW5wdXQoKVxuICBvcHRpb25zOiB7IHVybD86IHN0cmluZyB9ID0ge307XG5cbiAgLyoqXG4gICAqIHRoZSBwcm92aWRlclxuICAgKi9cbiAgQElucHV0KClcbiAgcHJvdmlkZXI6IGFueSA9IE1hcExheWVyUHJvdmlkZXJPcHRpb25zLk9GRkxJTkU7XG5cbiAgLyoqXG4gICAqIGluZGV4IChvcHRpb25hbCkgLSBUaGUgaW5kZXggdG8gYWRkIHRoZSBsYXllciBhdC4gSWYgb21pdHRlZCwgdGhlIGxheWVyIHdpbGwgYWRkZWQgb24gdG9wIG9mIGFsbCBleGlzdGluZyBsYXllcnMuXG4gICAqL1xuICBASW5wdXQoKVxuICBpbmRleDogTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBzaG93IChvcHRpb25hbCkgLSBEZXRlcm1pbmVzIGlmIHRoZSBtYXAgbGF5ZXIgaXMgc2hvd24uXG4gICAqL1xuICBASW5wdXQoKVxuICBzaG93ID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIGFscGhhIGJsZW5kaW5nIHZhbHVlIG9mIHRoaXMgbGF5ZXI6IDAuMCB0byAxLjBcbiAgICovXG4gIEBJbnB1dCgpXG4gIGFscGhhID0gMS4wO1xuXG4gIC8qKlxuICAgKiBUaGUgYnJpZ2h0bmVzcyBvZiB0aGlzIGxheWVyOiAwLjAgdG8gMS4wXG4gICAqL1xuICBASW5wdXQoKVxuICBicmlnaHRuZXNzID0gMS4wO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udHJhc3Qgb2YgdGhpcyBsYXllcjogMC4wIHRvIDEuMFxuICAgKi9cbiAgQElucHV0KClcbiAgY29udHJhc3QgPSAxLjA7XG5cbiAgcHVibGljIGltYWdlcnlMYXllcjogYW55O1xuICBwdWJsaWMgaW1hZ2VyeUxheWVyc0NvbGxlY3Rpb246IGFueTtcbiAgcHVibGljIGxheWVyUHJvdmlkZXI6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNlc2l1bVNlcnZpY2U6IENlc2l1bVNlcnZpY2UpIHtcbiAgICB0aGlzLmltYWdlcnlMYXllcnNDb2xsZWN0aW9uID0gdGhpcy5jZXNpdW1TZXJ2aWNlLmdldFNjZW5lKCkuaW1hZ2VyeUxheWVycztcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT2ZmbGluZU1hcFByb3ZpZGVyKCkge1xuICAgIHJldHVybiBDZXNpdW0uY3JlYXRlVGlsZU1hcFNlcnZpY2VJbWFnZXJ5UHJvdmlkZXIoe1xuICAgICAgdXJsOiBDZXNpdW0uYnVpbGRNb2R1bGVVcmwoJ0Fzc2V0cy9UZXh0dXJlcy9OYXR1cmFsRWFydGhJSScpXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIUNoZWNrZXIucHJlc2VudCh0aGlzLm9wdGlvbnMudXJsKSAmJiB0aGlzLnByb3ZpZGVyICE9PSBNYXBMYXllclByb3ZpZGVyT3B0aW9ucy5PRkZMSU5FKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMgbXVzdCBoYXZlIGEgdXJsJyk7XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5wcm92aWRlcikge1xuICAgICAgY2FzZSBNYXBMYXllclByb3ZpZGVyT3B0aW9ucy5XZWJNYXBTZXJ2aWNlOlxuICAgICAgY2FzZSBNYXBMYXllclByb3ZpZGVyT3B0aW9ucy5XZWJNYXBUaWxlU2VydmljZTpcbiAgICAgIGNhc2UgTWFwTGF5ZXJQcm92aWRlck9wdGlvbnMuQXJjR2lzTWFwU2VydmVyOlxuICAgICAgY2FzZSBNYXBMYXllclByb3ZpZGVyT3B0aW9ucy5TaW5nbGVUaWxlSW1hZ2VyeTpcbiAgICAgIGNhc2UgTWFwTGF5ZXJQcm92aWRlck9wdGlvbnMuQmluZ01hcHM6XG4gICAgICBjYXNlIE1hcExheWVyUHJvdmlkZXJPcHRpb25zLkdvb2dsZUVhcnRoRW50ZXJwcmlzZU1hcHM6XG4gICAgICBjYXNlIE1hcExheWVyUHJvdmlkZXJPcHRpb25zLk1hcEJveDpcbiAgICAgIGNhc2UgTWFwTGF5ZXJQcm92aWRlck9wdGlvbnMuVXJsVGVtcGxhdGVJbWFnZXJ5OlxuICAgICAgY2FzZSBNYXBMYXllclByb3ZpZGVyT3B0aW9ucy5NYXBUaWxlU2VydmljZTpcbiAgICAgIGNhc2UgTWFwTGF5ZXJQcm92aWRlck9wdGlvbnMuT3BlblN0cmVldE1hcDpcbiAgICAgICAgdGhpcy5sYXllclByb3ZpZGVyID0gbmV3IHRoaXMucHJvdmlkZXIodGhpcy5vcHRpb25zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE1hcExheWVyUHJvdmlkZXJPcHRpb25zLk9GRkxJTkU6XG4gICAgICAgIHRoaXMubGF5ZXJQcm92aWRlciA9IHRoaXMuY3JlYXRlT2ZmbGluZU1hcFByb3ZpZGVyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5sb2coJ2FjLW1hcC1sYXllci1wcm92aWRlcjogW3Byb3ZpZGVyXSB3YXNuXFwndCBmb3VuZC4gc2V0dGluZyBPRkZMSU5FIHByb3ZpZGVyIGFzIGRlZmF1bHQnKTtcbiAgICAgICAgdGhpcy5sYXllclByb3ZpZGVyID0gdGhpcy5jcmVhdGVPZmZsaW5lTWFwUHJvdmlkZXIoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3cpIHtcbiAgICAgIHRoaXMuaW1hZ2VyeUxheWVyID0gdGhpcy5pbWFnZXJ5TGF5ZXJzQ29sbGVjdGlvbi5hZGRJbWFnZXJ5UHJvdmlkZXIodGhpcy5sYXllclByb3ZpZGVyLCB0aGlzLmluZGV4KTtcbiAgICAgIHRoaXMuaW1hZ2VyeUxheWVyLmFscGhhID0gdGhpcy5hbHBoYTtcbiAgICAgIHRoaXMuaW1hZ2VyeUxheWVyLmNvbnRyYXN0ID0gdGhpcy5jb250cmFzdDtcbiAgICAgIHRoaXMuaW1hZ2VyeUxheWVyLmJyaWdodG5lc3MgPSB0aGlzLmJyaWdodG5lc3M7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydzaG93J10gJiYgIWNoYW5nZXNbJ3Nob3cnXS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgIGNvbnN0IHNob3dWYWx1ZSA9IGNoYW5nZXNbJ3Nob3cnXS5jdXJyZW50VmFsdWU7XG4gICAgICBpZiAoc2hvd1ZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlcnlMYXllcikge1xuICAgICAgICAgIHRoaXMuaW1hZ2VyeUxheWVyc0NvbGxlY3Rpb24uYWRkKHRoaXMuaW1hZ2VyeUxheWVyLCB0aGlzLmluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmltYWdlcnlMYXllciA9IHRoaXMuaW1hZ2VyeUxheWVyc0NvbGxlY3Rpb24uYWRkSW1hZ2VyeVByb3ZpZGVyKHRoaXMubGF5ZXJQcm92aWRlciwgdGhpcy5pbmRleCk7XG4gICAgICAgICAgdGhpcy5pbWFnZXJ5TGF5ZXIuYWxwaGEgPSB0aGlzLmFscGhhO1xuICAgICAgICAgIHRoaXMuaW1hZ2VyeUxheWVyLmNvbnRyYXN0ID0gdGhpcy5jb250cmFzdDtcbiAgICAgICAgICB0aGlzLmltYWdlcnlMYXllci5icmlnaHRuZXNzID0gdGhpcy5icmlnaHRuZXNzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaW1hZ2VyeUxheWVyKSB7XG4gICAgICAgIHRoaXMuaW1hZ2VyeUxheWVyc0NvbGxlY3Rpb24ucmVtb3ZlKHRoaXMuaW1hZ2VyeUxheWVyLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2FscGhhJ10gJiYgIWNoYW5nZXNbJ2FscGhhJ10uaXNGaXJzdENoYW5nZSgpICYmIHRoaXMuaW1hZ2VyeUxheWVyKSB7XG4gICAgICB0aGlzLmltYWdlcnlMYXllci5hbHBoYSA9IHRoaXMuYWxwaGE7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydjb250cmFzdCddICYmICFjaGFuZ2VzWydjb250cmFzdCddLmlzRmlyc3RDaGFuZ2UoKSAmJiB0aGlzLmltYWdlcnlMYXllcikge1xuICAgICAgdGhpcy5pbWFnZXJ5TGF5ZXIuY29udHJhc3QgPSB0aGlzLmNvbnRyYXN0O1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snYnJpZ2h0bmVzcyddICYmICFjaGFuZ2VzWydicmlnaHRuZXNzJ10uaXNGaXJzdENoYW5nZSgpICYmIHRoaXMuaW1hZ2VyeUxheWVyKSB7XG4gICAgICB0aGlzLmltYWdlcnlMYXllci5icmlnaHRuZXNzID0gdGhpcy5icmlnaHRuZXNzO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmltYWdlcnlMYXllcikge1xuICAgICAgdGhpcy5pbWFnZXJ5TGF5ZXJzQ29sbGVjdGlvbi5yZW1vdmUodGhpcy5pbWFnZXJ5TGF5ZXIsIHRydWUpO1xuICAgIH1cbiAgfVxufVxuIl19