89 lines
2.4 KiB
TypeScript
89 lines
2.4 KiB
TypeScript
import {
|
|
Component,
|
|
Host,
|
|
Input,
|
|
forwardRef,
|
|
Output,
|
|
EventEmitter,
|
|
OnChanges,
|
|
SimpleChanges,
|
|
OnInit,
|
|
} from '@angular/core';
|
|
import { ImageStatic } from 'ol/source';
|
|
import { SourceComponent } from './source.component';
|
|
import { LayerImageComponent } from '../layers/layerimage.component';
|
|
import { ProjectionLike } from 'ol/proj';
|
|
import { Extent } from 'ol/extent';
|
|
import { AttributionLike } from 'ol/source/Source';
|
|
import { LoadFunction } from 'ol/Image';
|
|
import { Size } from 'ol/size';
|
|
import { ImageSourceEvent } from 'ol/source/Image';
|
|
|
|
@Component({
|
|
selector: 'aol-source-imagestatic',
|
|
template: ` <ng-content></ng-content> `,
|
|
providers: [{ provide: SourceComponent, useExisting: forwardRef(() => SourceImageStaticComponent) }],
|
|
})
|
|
export class SourceImageStaticComponent extends SourceComponent implements OnInit, OnChanges {
|
|
@Input()
|
|
projection: ProjectionLike | string;
|
|
@Input()
|
|
imageExtent: Extent;
|
|
@Input()
|
|
url: string;
|
|
@Input()
|
|
attributions: AttributionLike;
|
|
@Input()
|
|
crossOrigin?: string;
|
|
@Input()
|
|
imageLoadFunction?: LoadFunction;
|
|
@Input()
|
|
imageSize?: Size;
|
|
|
|
@Output()
|
|
imageLoadStart = new EventEmitter<ImageSourceEvent>();
|
|
@Output()
|
|
imageLoadEnd = new EventEmitter<ImageSourceEvent>();
|
|
@Output()
|
|
imageLoadError = new EventEmitter<ImageSourceEvent>();
|
|
|
|
instance: ImageStatic;
|
|
|
|
constructor(@Host() layer: LayerImageComponent) {
|
|
super(layer);
|
|
}
|
|
|
|
setLayerSource(): void {
|
|
this.instance = new ImageStatic(this);
|
|
this.host.instance.setSource(this.instance);
|
|
this.instance.on('imageloadstart', (event: ImageSourceEvent) => this.imageLoadStart.emit(event));
|
|
this.instance.on('imageloadend', (event: ImageSourceEvent) => this.imageLoadEnd.emit(event));
|
|
this.instance.on('imageloaderror', (event: ImageSourceEvent) => this.imageLoadError.emit(event));
|
|
}
|
|
|
|
ngOnInit() {
|
|
this.setLayerSource();
|
|
}
|
|
|
|
ngOnChanges(changes: SimpleChanges) {
|
|
const properties: { [index: string]: any } = {};
|
|
if (!this.instance) {
|
|
return;
|
|
}
|
|
for (const key in changes) {
|
|
if (changes.hasOwnProperty(key)) {
|
|
switch (key) {
|
|
case 'url':
|
|
this.url = changes[key].currentValue;
|
|
this.setLayerSource();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
properties[key] = changes[key].currentValue;
|
|
}
|
|
}
|
|
this.instance.setProperties(properties, false);
|
|
}
|
|
}
|