iceye-angular-cesium-fork
Version:
Angular library for working with Cesium.
62 lines • 9.63 kB
JavaScript
import { Injectable } from '@angular/core';
import { CesiumService } from '../../cesium/cesium.service';
import { PrimitivesDrawerService } from '../primitives-drawer/primitives-drawer.service';
import { GeoUtilsService } from '../../geo-utils/geo-utils.service';
/**
+ This drawer is responsible for drawing an arc over the Cesium map.
+ This implementation uses simple PolylineGeometry and Primitive parameters.
+ This doesn't allow us to change the position, color, etc.. of the arc but setShow only.
*/
export class ArcDrawerService extends PrimitivesDrawerService {
constructor(cesiumService) {
super(Cesium.PolylineCollection, cesiumService);
}
_calculateArcPositions(cesiumProps) {
const quality = cesiumProps.quality || 18;
const delta = (cesiumProps.delta) / quality;
const pointsArray = [];
for (let i = 0; i < quality + 1; ++i) {
const point = GeoUtilsService.pointByLocationDistanceAndAzimuth(cesiumProps.center, cesiumProps.radius, cesiumProps.angle + delta * i, true);
pointsArray.push(point);
}
return pointsArray;
}
_calculateTriangle(cesiumProps) {
return [
cesiumProps.center,
GeoUtilsService.pointByLocationDistanceAndAzimuth(cesiumProps.center, cesiumProps.radius, cesiumProps.angle, true)
];
}
_calculateArc(cesiumProps) {
const arcPoints = this._calculateArcPositions(cesiumProps);
return cesiumProps.drawEdges ? arcPoints.concat(this._calculateTriangle(cesiumProps)) : arcPoints;
}
add(cesiumProps) {
cesiumProps.positions = this._calculateArc(cesiumProps);
if (cesiumProps.color) {
const material = Cesium.Material.fromType('Color');
material.uniforms.color = cesiumProps.color;
cesiumProps.material = material;
}
return this._cesiumCollection.add(cesiumProps);
}
update(primitive, cesiumProps) {
if (!cesiumProps.constantColor && cesiumProps.color &&
!primitive.material.uniforms.color.equals(cesiumProps.color)) {
primitive.material.uniforms.color = cesiumProps.color;
}
primitive.width = cesiumProps.width !== undefined ? cesiumProps.width : primitive.width;
primitive.show = cesiumProps.show !== undefined ? cesiumProps.show : primitive.show;
primitive.distanceDisplayCondition = cesiumProps.distanceDisplayCondition !== undefined ?
cesiumProps.distanceDisplayCondition : primitive.distanceDisplayCondition;
primitive.positions = this._calculateArc(cesiumProps);
return primitive;
}
}
ArcDrawerService.decorators = [
{ type: Injectable }
];
ArcDrawerService.ctorParameters = () => [
{ type: CesiumService }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjLWRyYXdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jZXNpdW0vc3JjL2xpYi9hbmd1bGFyLWNlc2l1bS9zZXJ2aWNlcy9kcmF3ZXJzL2FyYy1kcmF3ZXIvYXJjLWRyYXdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVwRTs7OztHQUlHO0FBR0gsTUFBTSxPQUFPLGdCQUFpQixTQUFRLHVCQUF1QjtJQUMzRCxZQUFZLGFBQTRCO1FBQ3RDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELHNCQUFzQixDQUFDLFdBQWdCO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQzFDLE1BQU0sS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUM1QyxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDcEMsTUFBTSxLQUFLLEdBQ1QsZUFBZSxDQUFDLGlDQUFpQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakksV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN6QjtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxXQUFnQjtRQUNqQyxPQUFPO1lBQ0wsV0FBVyxDQUFDLE1BQU07WUFDbEIsZUFBZSxDQUFDLGlDQUFpQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQztTQUNuSCxDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxXQUFnQjtRQUM1QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0QsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDcEcsQ0FBQztJQUVELEdBQUcsQ0FBQyxXQUFnQjtRQUNsQixXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEQsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFO1lBQ3JCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25ELFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDNUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7U0FDakM7UUFFRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFjLEVBQUUsV0FBZ0I7UUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLElBQUksV0FBVyxDQUFDLEtBQUs7WUFDakQsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5RCxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztTQUN2RDtRQUNELFNBQVMsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDeEYsU0FBUyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztRQUNwRixTQUFTLENBQUMsd0JBQXdCLEdBQUcsV0FBVyxDQUFDLHdCQUF3QixLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZGLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDO1FBQzVFLFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV0RCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOzs7WUF0REYsVUFBVTs7O1lBVkYsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENlc2l1bVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jZXNpdW0vY2VzaXVtLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJpbWl0aXZlc0RyYXdlclNlcnZpY2UgfSBmcm9tICcuLi9wcmltaXRpdmVzLWRyYXdlci9wcmltaXRpdmVzLWRyYXdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEdlb1V0aWxzU2VydmljZSB9IGZyb20gJy4uLy4uL2dlby11dGlscy9nZW8tdXRpbHMuc2VydmljZSc7XG5cbi8qKlxuICsgIFRoaXMgZHJhd2VyIGlzIHJlc3BvbnNpYmxlIGZvciBkcmF3aW5nIGFuIGFyYyBvdmVyIHRoZSBDZXNpdW0gbWFwLlxuICsgIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyBzaW1wbGUgUG9seWxpbmVHZW9tZXRyeSBhbmQgUHJpbWl0aXZlIHBhcmFtZXRlcnMuXG4gKyAgVGhpcyBkb2Vzbid0IGFsbG93IHVzIHRvIGNoYW5nZSB0aGUgcG9zaXRpb24sIGNvbG9yLCBldGMuLiBvZiB0aGUgYXJjIGJ1dCBzZXRTaG93IG9ubHkuXG4gKi9cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFyY0RyYXdlclNlcnZpY2UgZXh0ZW5kcyBQcmltaXRpdmVzRHJhd2VyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKGNlc2l1bVNlcnZpY2U6IENlc2l1bVNlcnZpY2UpIHtcbiAgICBzdXBlcihDZXNpdW0uUG9seWxpbmVDb2xsZWN0aW9uLCBjZXNpdW1TZXJ2aWNlKTtcbiAgfVxuXG4gIF9jYWxjdWxhdGVBcmNQb3NpdGlvbnMoY2VzaXVtUHJvcHM6IGFueSkge1xuICAgIGNvbnN0IHF1YWxpdHkgPSBjZXNpdW1Qcm9wcy5xdWFsaXR5IHx8IDE4O1xuICAgIGNvbnN0IGRlbHRhID0gKGNlc2l1bVByb3BzLmRlbHRhKSAvIHF1YWxpdHk7XG4gICAgY29uc3QgcG9pbnRzQXJyYXkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1YWxpdHkgKyAxOyArK2kpIHtcbiAgICAgIGNvbnN0IHBvaW50ID1cbiAgICAgICAgR2VvVXRpbHNTZXJ2aWNlLnBvaW50QnlMb2NhdGlvbkRpc3RhbmNlQW5kQXppbXV0aChjZXNpdW1Qcm9wcy5jZW50ZXIsIGNlc2l1bVByb3BzLnJhZGl1cywgY2VzaXVtUHJvcHMuYW5nbGUgKyBkZWx0YSAqIGksIHRydWUpO1xuICAgICAgcG9pbnRzQXJyYXkucHVzaChwb2ludCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50c0FycmF5O1xuICB9XG5cbiAgX2NhbGN1bGF0ZVRyaWFuZ2xlKGNlc2l1bVByb3BzOiBhbnkpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY2VzaXVtUHJvcHMuY2VudGVyLFxuICAgICAgR2VvVXRpbHNTZXJ2aWNlLnBvaW50QnlMb2NhdGlvbkRpc3RhbmNlQW5kQXppbXV0aChjZXNpdW1Qcm9wcy5jZW50ZXIsIGNlc2l1bVByb3BzLnJhZGl1cywgY2VzaXVtUHJvcHMuYW5nbGUsIHRydWUpXG4gICAgXTtcbiAgfVxuXG4gIF9jYWxjdWxhdGVBcmMoY2VzaXVtUHJvcHM6IGFueSkge1xuICAgIGNvbnN0IGFyY1BvaW50cyA9IHRoaXMuX2NhbGN1bGF0ZUFyY1Bvc2l0aW9ucyhjZXNpdW1Qcm9wcyk7XG4gICAgcmV0dXJuIGNlc2l1bVByb3BzLmRyYXdFZGdlcyA/IGFyY1BvaW50cy5jb25jYXQodGhpcy5fY2FsY3VsYXRlVHJpYW5nbGUoY2VzaXVtUHJvcHMpKSA6IGFyY1BvaW50cztcbiAgfVxuXG4gIGFkZChjZXNpdW1Qcm9wczogYW55KTogYW55IHtcbiAgICBjZXNpdW1Qcm9wcy5wb3NpdGlvbnMgPSB0aGlzLl9jYWxjdWxhdGVBcmMoY2VzaXVtUHJvcHMpO1xuICAgIGlmIChjZXNpdW1Qcm9wcy5jb2xvcikge1xuICAgICAgY29uc3QgbWF0ZXJpYWwgPSBDZXNpdW0uTWF0ZXJpYWwuZnJvbVR5cGUoJ0NvbG9yJyk7XG4gICAgICBtYXRlcmlhbC51bmlmb3Jtcy5jb2xvciA9IGNlc2l1bVByb3BzLmNvbG9yO1xuICAgICAgY2VzaXVtUHJvcHMubWF0ZXJpYWwgPSBtYXRlcmlhbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY2VzaXVtQ29sbGVjdGlvbi5hZGQoY2VzaXVtUHJvcHMpO1xuICB9XG5cbiAgdXBkYXRlKHByaW1pdGl2ZTogYW55LCBjZXNpdW1Qcm9wczogYW55KSB7XG4gICAgaWYgKCFjZXNpdW1Qcm9wcy5jb25zdGFudENvbG9yICYmIGNlc2l1bVByb3BzLmNvbG9yICYmXG4gICAgICAhcHJpbWl0aXZlLm1hdGVyaWFsLnVuaWZvcm1zLmNvbG9yLmVxdWFscyhjZXNpdW1Qcm9wcy5jb2xvcikpIHtcbiAgICAgIHByaW1pdGl2ZS5tYXRlcmlhbC51bmlmb3Jtcy5jb2xvciA9IGNlc2l1bVByb3BzLmNvbG9yO1xuICAgIH1cbiAgICBwcmltaXRpdmUud2lkdGggPSBjZXNpdW1Qcm9wcy53aWR0aCAhPT0gdW5kZWZpbmVkID8gY2VzaXVtUHJvcHMud2lkdGggOiBwcmltaXRpdmUud2lkdGg7XG4gICAgcHJpbWl0aXZlLnNob3cgPSBjZXNpdW1Qcm9wcy5zaG93ICE9PSB1bmRlZmluZWQgPyBjZXNpdW1Qcm9wcy5zaG93IDogcHJpbWl0aXZlLnNob3c7XG4gICAgcHJpbWl0aXZlLmRpc3RhbmNlRGlzcGxheUNvbmRpdGlvbiA9IGNlc2l1bVByb3BzLmRpc3RhbmNlRGlzcGxheUNvbmRpdGlvbiAhPT0gdW5kZWZpbmVkID9cbiAgICAgIGNlc2l1bVByb3BzLmRpc3RhbmNlRGlzcGxheUNvbmRpdGlvbiA6IHByaW1pdGl2ZS5kaXN0YW5jZURpc3BsYXlDb25kaXRpb247XG4gICAgcHJpbWl0aXZlLnBvc2l0aW9ucyA9IHRoaXMuX2NhbGN1bGF0ZUFyYyhjZXNpdW1Qcm9wcyk7XG5cbiAgICByZXR1cm4gcHJpbWl0aXZlO1xuICB9XG59XG4iXX0=