{"version":3,"file":"auscope-angular-cesium.mjs","sources":["../../src/lib/angular-cesium/services/viewer-factory/viewer-factory.service.ts","../../src/lib/angular-cesium/services/viewer-configuration/viewer-configuration.service.ts","../../src/lib/angular-cesium/services/cesium/cesium.service.ts","../../src/lib/angular-cesium/models/scene-mode.enum.ts","../../src/lib/angular-cesium/services/camera/camera.service.ts","../../src/lib/angular-cesium/services/map-events-mananger/consts/cesium-event.enum.ts","../../src/lib/angular-cesium/services/map-events-mananger/consts/pickOptions.enum.ts","../../src/lib/angular-cesium/services/context-menu/context-menu.service.ts","../../src/lib/angular-cesium/services/coordinate-converter/coordinate-converter.service.ts","../../src/lib/angular-cesium/services/drawers/basic-drawer/basic-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/primitives-drawer/primitives-drawer.service.ts","../../src/lib/angular-cesium/services/geo-utils/geo-utils.service.ts","../../src/lib/angular-cesium/services/drawers/arc-drawer/arc-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/entities-drawer/enums/graphics-type.enum.ts","../../src/lib/angular-cesium/services/drawers/entities-drawer/optimized-entity-collection.ts","../../src/lib/angular-cesium/services/drawers/entities-drawer/entities-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/billboard-drawer/billboard-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/czml-drawer/czml-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/ellipse-drawer/ellipse-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/label-drawer/label-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/point-drawer/point-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/polygon-drawer/polygon-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/polyline-drawer/polyline-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/polyline-primitive-drawer/polyline-primitive-drawer.service.ts","../../src/lib/angular-cesium/models/ac-keyboard-action.enum.ts","../../src/lib/angular-cesium/services/keyboard-control/predefined-actions.ts","../../src/lib/angular-cesium/services/keyboard-control/keyboard-control.service.ts","../../src/lib/angular-cesium/services/map-events-mananger/event-observers/cesium-pure-event-observer.ts","../../src/lib/angular-cesium/services/map-events-mananger/event-observers/cesium-long-press-observer.ts","../../src/lib/angular-cesium/services/map-events-mananger/cesium-event-builder.ts","../../src/lib/angular-cesium/utils/utils.service.ts","../../src/lib/angular-cesium/services/map-events-mananger/event-observers/cesium-drag-drop-helper.ts","../../src/lib/angular-cesium/services/plonter/plonter.service.ts","../../src/lib/angular-cesium/services/map-events-mananger/map-events-manager.ts","../../src/lib/angular-cesium/services/map-layers/map-layers.service.ts","../../src/lib/angular-cesium/services/screenshot/screenshot.service.ts","../../src/lib/angular-cesium/services/maps-manager/maps-manager.service.ts","../../src/lib/angular-cesium/components/ac-html/ac-html.component.ts","../../src/lib/angular-cesium/components/ac-default-plonter/ac-default-plonter.component.ts","../../src/lib/angular-cesium/components/ac-context-menu-wrapper/ac-context-menu-wrapper.component.ts","../../src/lib/angular-cesium/components/ac-map/ac-map.component.ts","../../src/lib/angular-cesium/services/layer-service/layer-service.service.ts","../../src/lib/angular-cesium/models/action-type.enum.ts","../../src/lib/angular-cesium/services/computation-cache/computation-cache.service.ts","../../src/lib/angular-cesium/utils/checker.ts","../../src/lib/angular-cesium/services/drawers/static-dynamic/ellipse-drawer/dynamic-ellipse-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/static-dynamic/dynamic-polyline-drawer/dynamic-polyline-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/static-dynamic/static-primitive-drawer/static-primitive-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/static-dynamic/static-circle-drawer/static-circle-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/static-dynamic/static-polyline-drawer/static-polyline-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/static-dynamic/static-polygon-drawer/polygon-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/static-dynamic/ellipse-drawer/ellipse-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/model-drawer/model-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/box-dawer/box-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/corridor-dawer/corridor-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/cylinder-dawer/cylinder-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/ellipoid-drawer/ellipsoid-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/polyline-volume-dawer/polyline-volume-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/wall-dawer/wall-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/rectangle-dawer/rectangle-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/label-primitive-drawer/label-primitive-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/billboard-primitive-drawer/billboard-primitive-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/point-primitive-drawer/point-primitive-drawer.service.ts","../../src/lib/angular-cesium/services/drawers/html-drawer/html-drawer.service.ts","../../src/lib/angular-cesium/components/ac-layer/ac-layer.component.ts","../../src/lib/angular-cesium/services/entity-on-map/entity-on-map.component.ts","../../src/lib/angular-cesium/components/ac-billboard/ac-billboard.component.ts","../../src/lib/angular-cesium/services/smart-assigner/smart-assigner.service.ts","../../src/lib/angular-cesium/services/json-mapper/json-mapper.service.ts","../../src/lib/angular-cesium/services/cesium-properties/cesium-properties.service.ts","../../src/lib/angular-cesium/services/basic-desc/basic-desc.service.ts","../../src/lib/angular-cesium/components/ac-billborad-desc/ac-billborad-desc.component.ts","../../src/lib/angular-cesium/components/ac-ellipse-desc/ac-ellipse-desc.component.ts","../../src/lib/angular-cesium/components/ac-polyline-desc/ac-polyline-desc.component.ts","../../src/lib/angular-cesium/pipes/pixel-offset/pixel-offset.pipe.ts","../../src/lib/angular-cesium/pipes/radians-to-degrees/radians-to-degrees.pipe.ts","../../src/lib/angular-cesium/components/ac-label-desc/ac-label-desc.component.ts","../../src/lib/angular-cesium/utils/utils.module.ts","../../src/lib/angular-cesium/components/ac-circle-desc/ac-circle-desc.component.ts","../../src/lib/angular-cesium/components/ac-arc-desc/ac-arc-desc.component.ts","../../src/lib/angular-cesium/models/ac-entity.ts","../../src/lib/angular-cesium/models/ac-notification.ts","../../src/lib/angular-cesium/models/map-layer-provider-options.enum.ts","../../src/lib/angular-cesium/models/map-terrain-provider-options.enum.ts","../../src/lib/angular-cesium/components/ac-map-layer-provider/ac-map-layer-provider.component.ts","../../src/lib/angular-cesium/components/ac-map-terrain-provider/ac-map-terrain-provider.component.ts","../../src/lib/angular-cesium/components/ac-point-desc/ac-point-desc.component.ts","../../src/lib/angular-cesium/components/ac-label/ac-label.component.ts","../../src/lib/angular-cesium/components/ac-polyline/ac-polyline.component.ts","../../src/lib/angular-cesium/components/ac-ellipse/ac-ellipse.component.ts","../../src/lib/angular-cesium/components/ac-point/ac-point.component.ts","../../src/lib/angular-cesium/components/ac-circle/ac-circle.component.ts","../../src/lib/angular-cesium/components/ac-arc/ac-arc.component.ts","../../src/lib/angular-cesium/components/ac-polygon-desc/ac-polygon-desc.component.ts","../../src/lib/angular-cesium/components/ac-polygon/ac-polygon.component.ts","../../src/lib/angular-cesium/services/basic-primitive-desc/basic-static-primitive-desc.service.ts","../../src/lib/angular-cesium/components/static-dynamic/ac-static-ellipse-desc/ac-static-ellipse-desc.component.ts","../../src/lib/angular-cesium/components/static-dynamic/ac-dynamic-ellipse-desc/ac-dynamic-ellipse-desc.component.ts","../../src/lib/angular-cesium/components/static-dynamic/ac-dynamic-polyline-desc/ac-dynamic-polyline-desc.component.ts","../../src/lib/angular-cesium/components/static-dynamic/ac-static-polygon-desc/ac-static-polygon-desc.component.ts","../../src/lib/angular-cesium/components/static-dynamic/ac-static-circle-desc/ac-static-circle-desc.component.ts","../../src/lib/angular-cesium/components/static-dynamic/ac-dynamic-circle-desc/ac-dynamic-circle-desc.component.ts","../../src/lib/angular-cesium/components/static-dynamic/ac-static-polyline-desc/ac-static-polyline-desc.component.ts","../../src/lib/angular-cesium/components/ac-model-desc/ac-model-desc.component.ts","../../src/lib/angular-cesium/components/ac-3d-tileset/ac-tileset-3d.component.ts","../../src/lib/angular-cesium/components/ac-box-desc/ac-box-desc.component.ts","../../src/lib/angular-cesium/components/ac-cylinder-desc/ac-cylinder-desc.component.ts","../../src/lib/angular-cesium/components/ac-corridor-desc/ac-corridor-desc.component.ts","../../src/lib/angular-cesium/components/ac-ellipsoid-desc/ac-ellipsoid-desc.component.ts","../../src/lib/angular-cesium/components/ac-polyline-volume-desc/ac-polyline-volume-desc.component.ts","../../src/lib/angular-cesium/components/ac-wall-desc/ac-wall-desc.component.ts","../../src/lib/angular-cesium/components/ac-rectangle-desc/ac-rectangle-desc.component.ts","../../src/lib/angular-cesium/components/ac-billboard-primitive-desc/ac-billboard-primitive-desc.component.ts","../../src/lib/angular-cesium/components/ac-label-primitive-desc/ac-label-primitive-desc.component.ts","../../src/lib/angular-cesium/components/ac-polyline-primitive-desc/ac-polyline-primitive-desc.component.ts","../../src/lib/angular-cesium/cesium-enhancements/StaticGeometryColorBatch.ts","../../src/lib/angular-cesium/cesium-enhancements/ConfigurationService.ts","../../src/lib/cesium-extender/primitives/html.ts","../../src/lib/cesium-extender/collections/html.ts","../../src/lib/cesium-extender/extender.ts","../../src/lib/angular-cesium/services/ac-html-manager/ac-html-manager.service.ts","../../src/lib/angular-cesium/directives/ac-html/ac-html.directive.ts","../../src/lib/angular-cesium/directives/ac-html-container/ac-html-container.directive.ts","../../src/lib/angular-cesium/components/ac-html-desc/ac-html-desc.component.ts","../../src/lib/angular-cesium/components/ac-array-desc/ac-array-desc.component.ts","../../src/lib/angular-cesium/components/ac-point-primitive-desc/ac-point-primitive-desc.component.ts","../../src/lib/angular-cesium/components/ac-primitive-polyline/ac-primitive-polyline.component.ts","../../src/lib/angular-cesium/pipes/pipe-config-map.ts","../../src/lib/angular-cesium/components/ac-czml-desc/ac-czml-desc.component.ts","../../src/lib/angular-cesium/components/ac-rectangle/ac-rectangle.component.ts","../../src/lib/angular-cesium/angular-cesium.module.ts","../../src/lib/angular-cesium/services/map-events-mananger/disposable-observable.ts","../../src/lib/angular-cesium/services/map-events-mananger/consts/cesium-event-modifier.enum.ts","../../src/lib/angular-cesium/services/selection-manager/selection-manager.service.ts","../../src/lib/angular-cesium/index.ts","../../src/lib/angular-cesium-widgets/models/edit-mode.enum.ts","../../src/lib/angular-cesium-widgets/models/edit-actions.enum.ts","../../src/lib/angular-cesium-widgets/models/edit-point.ts","../../src/lib/angular-cesium-widgets/models/label-props.ts","../../src/lib/angular-cesium-widgets/models/editable-point.ts","../../src/lib/angular-cesium-widgets/services/entity-editors/points-editor/points-manager.service.ts","../../src/lib/angular-cesium-widgets/services/utils.ts","../../src/lib/angular-cesium-widgets/services/entity-editors/points-editor/points-editor.service.ts","../../src/lib/angular-cesium-widgets/components/points-editor/points-editor.component.ts","../../src/lib/angular-cesium-widgets/models/edit-polyline.ts","../../src/lib/angular-cesium-widgets/models/editable-polygon.ts","../../src/lib/angular-cesium-widgets/services/entity-editors/polygons-editor/polygons-manager.service.ts","../../src/lib/angular-cesium-widgets/services/entity-editors/polygons-editor/polygons-editor.service.ts","../../src/lib/angular-cesium-widgets/components/polygons-editor/polygons-editor.component.ts","../../src/lib/angular-cesium-widgets/models/edit-arc.ts","../../src/lib/angular-cesium-widgets/models/editable-circle.ts","../../src/lib/angular-cesium-widgets/services/entity-editors/circles-editor/circles-manager.service.ts","../../src/lib/angular-cesium-widgets/services/entity-editors/circles-editor/circles-editor.service.ts","../../src/lib/angular-cesium-widgets/components/circles-editor/circles-editor.component.ts","../../src/lib/angular-cesium-widgets/models/editable-ellipse.ts","../../src/lib/angular-cesium-widgets/services/entity-editors/ellipses-editor/ellipses-manager.service.ts","../../src/lib/angular-cesium-widgets/services/entity-editors/ellipses-editor/ellipses-editor.service.ts","../../src/lib/angular-cesium-widgets/components/ellipses-editor/ellipses-editor.component.ts","../../src/lib/angular-cesium-widgets/models/editable-polyline.ts","../../src/lib/angular-cesium-widgets/services/entity-editors/polyline-editor/polylines-manager.service.ts","../../src/lib/angular-cesium-widgets/models/editable-rectangle.ts","../../src/lib/angular-cesium-widgets/models/editor-observable.ts","../../src/lib/angular-cesium-widgets/models/point-editor-observable.ts","../../src/lib/angular-cesium-widgets/models/polyline-editor-observable.ts","../../src/lib/angular-cesium-widgets/models/polygon-editor-observable.ts","../../src/lib/angular-cesium-widgets/models/rectangle-editor-observable.ts","../../src/lib/angular-cesium-widgets/models/circle-editor-observable.ts","../../src/lib/angular-cesium-widgets/models/ellipse-editor-observable.ts","../../src/lib/angular-cesium-widgets/models/hippodrome-editor-oboservable.ts","../../src/lib/angular-cesium-widgets/models/editable-hippodrome.ts","../../src/lib/angular-cesium-widgets/services/entity-editors/polyline-editor/polylines-editor.service.ts","../../src/lib/angular-cesium-widgets/components/polylines-editor/polylines-editor.component.ts","../../src/lib/angular-cesium-widgets/services/entity-editors/hippodrome-editor/hippodrome-manager.service.ts","../../src/lib/angular-cesium-widgets/services/entity-editors/hippodrome-editor/hippodrome-editor.service.ts","../../src/lib/angular-cesium-widgets/components/hippodrome-editor/hippodrome-editor.component.ts","../../src/lib/angular-cesium-widgets/services/draggable-to-map.service.ts","../../src/lib/angular-cesium-widgets/directives/draggable-to-map.directive.ts","../../src/lib/angular-cesium-widgets/components/toolbar/ac-toolbar/drag-icon.component.ts","../../src/lib/angular-cesium-widgets/components/toolbar/ac-toolbar-button/ac-toolbar-button.component.ts","../../src/lib/angular-cesium-widgets/components/toolbar/ac-toolbar/ac-toolbar.component.ts","../../src/lib/angular-cesium-widgets/components/range-and-bearing/range-and-bearing.component.ts","../../src/lib/angular-cesium-widgets/services/zoom-to-rectangle.service.ts","../../src/lib/angular-cesium-widgets/services/entity-editors/rectangles-editor/rectangles-manager.service.ts","../../src/lib/angular-cesium-widgets/services/entity-editors/rectangles-editor/rectangles-editor.service.ts","../../src/lib/angular-cesium-widgets/components/rectangles-editor/rectangles-editor.component.ts","../../src/lib/angular-cesium-widgets/angular-cesium-widgets.module.ts","../../src/public_api.ts","../../src/auscope-angular-cesium.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { Viewer } from 'cesium';\n\n@Injectable()\nexport class ViewerFactory {\n\n  /**\n   * Creates a viewer with default or custom options\n   * @param mapContainer - container to initialize the viewer on\n   * @param options - Options to create the viewer with - Optional\n   *\n   * @returns new viewer\n   */\n  createViewer(mapContainer: HTMLElement, options?: any) {\n    let viewer = null;\n    if (options) {\n      viewer = new Viewer(mapContainer, {\n        contextOptions: {\n          webgl: {preserveDrawingBuffer: true}\n        },\n        ...options\n      });\n    } else {\n      viewer = new Viewer(mapContainer,\n        {\n          contextOptions: {\n            webgl: {preserveDrawingBuffer: true}\n          },\n        });\n    }\n\n    return viewer;\n  }\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * Service for setting cesium viewer map options.\n * defaulty angular-cesium doesnt provide this service and viewer is created with default options.\n * In order set specific options you must set this service as provider in your component and\n * set the wanted options.\n * ```typescript\n * constructor(viewerConf :ViewerConfiguration ) {\n *   viewerConf.viewerOptions = { timeline: false };\n * }\n * ```\n * notice this configuration will be for all <ac-maps> in your component.\n */\n@Injectable()\nexport class ViewerConfiguration {\n  /**\n   * cesium viewer options According to [Viewer]{@link https://cesiumjs.org/Cesium/Build/Documentation/Viewer.html?classFilter=vie}\n   */\n  private _viewerOptions: object | object[];\n  private _viewerModifier: Function | Function[];\n  private nextViewerOptionsIndex = 0;\n  private nextViewerModifierIndex = 0;\n\n  get viewerOptions(): object | object[] {\n    return this._viewerOptions;\n  }\n\n  Ï;\n\n  getNextViewerOptions(): object | object[] {\n    if (this._viewerOptions instanceof Array) {\n      return this._viewerOptions[this.nextViewerOptionsIndex++];\n    } else {\n      return this._viewerOptions;\n    }\n  }\n\n  /**\n   * Can be used to set initial map viewer options.\n   * If there is more than one map you can give the function an array of options.\n   * The map initialized first will be set with the first option object in the options array and so on.\n   */\n  set viewerOptions(value: object | object[]) {\n    this._viewerOptions = value;\n  }\n\n  get viewerModifier(): Function | Function[] {\n    return this._viewerModifier;\n  }\n\n  getNextViewerModifier(): Function | Function[] {\n    if (this._viewerModifier instanceof Array) {\n      return this._viewerModifier[this.nextViewerModifierIndex++];\n    } else {\n      return this._viewerModifier;\n    }\n  }\n\n  /**\n   * Can be used to set map viewer options after the map has been initialized.\n   * If there is more than one map you can give the function an array of functions.\n   * The map initialized first will be set with the first option object in the options array and so on.\n   */\n  set viewerModifier(value: Function | Function[]) {\n    this._viewerModifier = value;\n  }\n}\n","import { Injectable, NgZone, Optional } from '@angular/core';\nimport { ViewerFactory } from '../viewer-factory/viewer-factory.service';\nimport { ViewerConfiguration } from '../viewer-configuration/viewer-configuration.service';\n\n/**\n *  Service that initialize cesium viewer and expose cesium viewer and scene.\n */\n@Injectable()\nexport class CesiumService {\n  private cesiumViewer: any;\n  private mapContainer: HTMLElement;\n\n  constructor(private ngZone: NgZone, private viewerFactory: ViewerFactory, @Optional() private viewerConfiguration: ViewerConfiguration) {\n  }\n\n  init(mapContainer: HTMLElement) {\n    this.mapContainer = mapContainer;\n    this.ngZone.runOutsideAngular(() => {\n      const options = this.viewerConfiguration ? this.viewerConfiguration.getNextViewerOptions() : undefined;\n      this.cesiumViewer = this.viewerFactory.createViewer(mapContainer, options);\n\n      const viewerModifier = this.viewerConfiguration && this.viewerConfiguration.getNextViewerModifier();\n      if (typeof viewerModifier === 'function') {\n        viewerModifier(this.cesiumViewer);\n      }\n    });\n  }\n\n  /**\n   * For more information see https://cesiumjs.org/Cesium/Build/Documentation/Viewer.html?classFilter=viewe\n   * @returns cesiumViewer\n   */\n  getViewer() {\n    return this.cesiumViewer;\n  }\n\n  /**\n   * For more information see https://cesiumjs.org/Cesium/Build/Documentation/Scene.html?classFilter=scene\n   * @returns cesium scene\n   */\n  getScene() {\n    return this.cesiumViewer.scene;\n  }\n\n  /**\n   * For more information see https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API\n   * @returns cesium canvas\n   */\n  getCanvas(): HTMLCanvasElement {\n    return this.cesiumViewer.canvas as HTMLCanvasElement;\n  }\n\n  getMapContainer(): HTMLElement {\n    return this.mapContainer;\n  }\n}\n","/**\n * Cesium scene modes\n */\nexport enum SceneMode {\n  SCENE3D,\n  COLUMBUS_VIEW,\n  SCENE2D,\n  PERFORMANCE_SCENE2D\n}\n","import { Injectable } from '@angular/core';\n\nimport { Cartesian3, Cartographic, JulianDate } from 'cesium';\nimport { Math as cMath} from 'cesium';\n\nimport { CesiumService } from '../cesium/cesium.service';\nimport { SceneMode } from '../../models/scene-mode.enum';\n\n/**\n *  The service exposes the scene's camera and screenSpaceCameraController\n *  SceneMode.PERFORMANCE_SCENE2D -  is a 3D scene mode that acts like Cesium 2D mode,\n *  but is more efficient performance wise.\n */\n@Injectable()\nexport class CameraService {\n  static PERFORMANCE_2D_ALTITUDE = 25000000;\n\n  private viewer: any;\n  private scene: any;\n  private camera: any;\n  private screenSpaceCameraController: any;\n  private morphListenerCancelFn: any;\n  private lastRotate: boolean;\n  private lastTilt: boolean;\n  private lastLook: boolean;\n  private isSceneModePerformance2D = false;\n\n  constructor() {\n  }\n\n  init(cesiumService: CesiumService) {\n    this.viewer = cesiumService.getViewer();\n    this.scene = cesiumService.getScene();\n    this.screenSpaceCameraController = this.scene.screenSpaceCameraController;\n    this.camera = this.scene.camera;\n    this.lastRotate = this.screenSpaceCameraController.enableRotate;\n    this.lastTilt = this.screenSpaceCameraController.enableTilt;\n    this.lastLook = this.screenSpaceCameraController.enableLook;\n  }\n\n  _listenToSceneModeMorph(callback: Function) {\n    this.morphListenerCancelFn = this.scene.morphStart.addEventListener(\n      callback\n    );\n  }\n\n  _revertCameraProperties() {\n    this.isSceneModePerformance2D = false;\n    this.enableTilt(this.lastTilt);\n    this.enableRotate(this.lastRotate);\n    this.enableLook(this.lastLook);\n  }\n\n  /**\n   * Gets the scene's camera\n   */\n  getCamera() {\n    return this.camera;\n  }\n\n  /**\n   * Gets the scene's screenSpaceCameraController\n   */\n  getScreenSpaceCameraController() {\n    return this.screenSpaceCameraController;\n  }\n\n  /**\n   * Gets the minimum zoom value in meters\n   */\n  getMinimumZoom(): number {\n    return this.screenSpaceCameraController.minimumZoomDistance;\n  }\n\n  /**\n   * Sets the minimum zoom value in meters\n   * @param zoom amount\n   */\n  setMinimumZoom(amount: number): void {\n    this.screenSpaceCameraController.minimumZoomDistance = amount;\n  }\n\n  /**\n   * Gets the maximum zoom value in meters\n   */\n  getMaximumZoom(): number {\n    return this.screenSpaceCameraController.maximumZoomDistance;\n  }\n\n  /**\n   * Sets the maximum zoom value in meters\n   * @param zoom amount\n   */\n  setMaximumZoom(amount: number): void {\n    this.screenSpaceCameraController.maximumZoomDistance = amount;\n  }\n\n  /**\n   * Sets if the camera is able to tilt\n   */\n  enableTilt(tilt: boolean): void {\n    this.screenSpaceCameraController.enableTilt = tilt;\n  }\n\n  /**\n   * Sets if the camera is able to rotate\n   */\n  enableRotate(rotate: boolean): void {\n    this.screenSpaceCameraController.enableRotate = rotate;\n  }\n\n  /**\n   * Sets if the camera is able to free-look\n   */\n  enableLook(lock: boolean): void {\n    this.screenSpaceCameraController.enableLook = lock;\n  }\n\n  /**\n   * Sets if the camera is able to translate\n   */\n  enableTranslate(translate: boolean): void {\n    this.screenSpaceCameraController.enableTranslate = translate;\n  }\n\n  /**\n   * Sets if the camera is able to zoom\n   */\n  enableZoom(zoom: boolean): void {\n    this.screenSpaceCameraController.enableZoom = zoom;\n  }\n\n  /**\n   * Sets if the camera receives inputs\n   */\n  enableInputs(inputs: boolean): void {\n    this.screenSpaceCameraController.enableInputs = inputs;\n  }\n\n  /**\n   * Sets the map's SceneMode\n   * @param sceneMode - The SceneMode to morph the scene into.\n   * @param duration - The duration of scene morph animations, in seconds\n   */\n  setSceneMode(sceneMode: SceneMode, duration?: number) {\n    switch (sceneMode) {\n      case SceneMode.SCENE3D: {\n        if (this.isSceneModePerformance2D) {\n          this._revertCameraProperties();\n        }\n\n        this.scene.morphTo3D(duration);\n\n        break;\n      }\n      case SceneMode.COLUMBUS_VIEW: {\n        if (this.isSceneModePerformance2D) {\n          this._revertCameraProperties();\n        }\n\n        this.scene.morphToColumbusView(duration);\n\n        break;\n      }\n      case SceneMode.SCENE2D: {\n        if (this.isSceneModePerformance2D) {\n          this._revertCameraProperties();\n        }\n        this.scene.morphTo2D(duration);\n\n        break;\n      }\n      case SceneMode.PERFORMANCE_SCENE2D: {\n        this.isSceneModePerformance2D = true;\n        this.lastLook = this.screenSpaceCameraController.enableLook;\n        this.lastTilt = this.screenSpaceCameraController.enableTilt;\n        this.lastRotate = this.screenSpaceCameraController.enableRotate;\n        this.screenSpaceCameraController.enableTilt = false;\n        this.screenSpaceCameraController.enableRotate = false;\n        this.screenSpaceCameraController.enableLook = false;\n        if (this.morphListenerCancelFn) {\n          this.morphListenerCancelFn();\n        }\n        this.scene.morphToColumbusView(duration);\n        const morphCompleteEventListener = this.scene.morphComplete.addEventListener(\n          () => {\n            this.camera.setView({\n              destination: Cartesian3.fromDegrees(\n                0.0,\n                0.0,\n                Math.min(\n                  CameraService.PERFORMANCE_2D_ALTITUDE,\n                  this.getMaximumZoom()\n                )\n              ),\n              orientation: {\n                pitch: cMath.toRadians(-90)\n              }\n            });\n            morphCompleteEventListener();\n            this._listenToSceneModeMorph(\n              this._revertCameraProperties.bind(this)\n            );\n          }\n        );\n\n        break;\n      }\n    }\n  }\n\n  /**\n   * Flies the camera to a destination\n   * API: https://cesiumjs.org/Cesium/Build/Documentation/Camera.html?classFilter=cam#flyTo\n   */\n  cameraFlyTo(options: any) {\n    return this.camera.flyTo(options);\n  }\n\n  /**\n   * Flies the camera to a target\n   * API: https://cesiumjs.org/Cesium/Build/Documentation/Viewer.html?classFilter=viewer#flyTo\n   * @returns Promise<boolean>\n   */\n  flyTo(target: any, options?: any) {\n    return this.viewer.flyTo(target, options);\n  }\n\n  /**\n   * Zooms amount along the camera's view vector.\n   * API: https://cesiumjs.org/Cesium/Build/Documentation/Camera.html#zoomIn\n   */\n  zoomIn(amount: number) {\n    return this.camera.zoomIn(amount || this.camera.defaultZoomAmount);\n  }\n\n  /**\n   * Zooms amount along the opposite direction of the camera's view vector.\n   * API: https://cesiumjs.org/Cesium/Build/Documentation/Camera.html#zoomOut\n   */\n  zoomOut(amount: number) {\n    return this.camera.zoomOut(amount || this.camera.defaultZoomAmount);\n  }\n\n  /**\n   * Zoom the camera to a target\n   * API: https://cesiumjs.org/Cesium/Build/Documentation/Viewer.html?classFilter=viewer#zoomTo\n   * @returns Promise<boolean>\n   */\n  zoomTo(target: any, offset?: any) {\n    return this.viewer.zoomTo(target, offset);\n  }\n\n  /**\n   * Flies the camera to a destination\n   * API: https://cesiumjs.org/Cesium/Build/Documentation/Camera.html?classFilter=camera#setView\n   * @param options viewer options\n   */\n  setView(options: any) {\n    this.camera.setView(options);\n  }\n\n  /**\n   * Set camera's rotation\n   */\n  setRotation(degreesInRadians: number) {\n    this.setView({orientation: {heading: degreesInRadians}});\n  }\n\n  /**\n   * Locks or unlocks camera rotation\n   */\n  lockRotation(lock: boolean) {\n    this.scene.screenSpaceCameraController.enableRotate = !lock;\n  }\n\n  /**\n   * Make the camera track a specific entity\n   * API: https://cesiumjs.org/Cesium/Build/Documentation/Viewer.html?classFilter=viewer#trackedEntity\n   * @param cesiumEntity - cesium entity( billboard, polygon...) to track\n   * @param options - track entity options\n   */\n  trackEntity(\n    cesiumEntity?: any,\n    options?: { flyTo: boolean; flyToDuration?: number; altitude?: number }\n  ) {\n    const flyTo = (options && options.flyTo) || false;\n\n    this.viewer.trackedEntity = undefined;\n    return new Promise<void>(resolve => {\n      if (flyTo) {\n        const flyToDuration = (options && options.flyToDuration) || 1;\n        const altitude = (options && options.altitude) || 10000;\n\n        // Calc entity flyTo position and wanted altitude\n        const entPosCar3 = cesiumEntity.position.getValue(JulianDate.now());\n        const entPosCart = Cartographic.fromCartesian(entPosCar3);\n        const zoomAmount = altitude - entPosCart.height;\n        entPosCart.height = altitude;\n        const flyToPosition = Cartesian3.fromRadians(\n          entPosCart.longitude,\n          entPosCart.latitude,\n          entPosCart.height\n        );\n\n        this.cameraFlyTo({\n          duration: flyToDuration,\n          destination: flyToPosition,\n          complete: () => {\n            this.viewer.trackedEntity = cesiumEntity;\n            setTimeout(() => {\n              if (zoomAmount > 0) {\n                this.camera.zoomOut(zoomAmount);\n              } else {\n                this.camera.zoomIn(zoomAmount);\n              }\n            }, 0);\n            resolve();\n          }\n        });\n      } else {\n        this.viewer.trackedEntity = cesiumEntity;\n        resolve();\n      }\n    });\n  }\n\n  untrackEntity() {\n    this.trackEntity();\n  }\n}\n","import {ScreenSpaceEventType } from 'cesium';\n/**\n * Event options for registration on map-event-manager.\n */\nexport enum CesiumEvent {\n  MOUSE_MOVE = ScreenSpaceEventType.MOUSE_MOVE,\n  LEFT_CLICK = ScreenSpaceEventType.LEFT_CLICK,\n  LEFT_DOUBLE_CLICK = ScreenSpaceEventType.LEFT_DOUBLE_CLICK,\n  LEFT_DOWN = ScreenSpaceEventType.LEFT_DOWN,\n  LEFT_UP = ScreenSpaceEventType.LEFT_UP,\n  MIDDLE_CLICK = ScreenSpaceEventType.MIDDLE_CLICK,\n  // MIDDLE_DOUBLE_CLICK = ScreenSpaceEventType.MIDDLE_DOUBLE_CLICK,\n  MIDDLE_DOWN = ScreenSpaceEventType.MIDDLE_DOWN,\n  MIDDLE_UP = ScreenSpaceEventType.MIDDLE_UP,\n  PINCH_START = ScreenSpaceEventType.PINCH_START,\n  PINCH_END = ScreenSpaceEventType.PINCH_END,\n  PINCH_MOVE = ScreenSpaceEventType.PINCH_MOVE,\n  RIGHT_CLICK = ScreenSpaceEventType.RIGHT_CLICK,\n  // RIGHT_DOUBLE_CLICK = ScreenSpaceEventType.RIGHT_DOUBLE_CLICK,\n  RIGHT_DOWN = ScreenSpaceEventType.RIGHT_DOWN,\n  RIGHT_UP = ScreenSpaceEventType.RIGHT_UP,\n  WHEEL = ScreenSpaceEventType.WHEEL,\n  LONG_LEFT_PRESS = 110,\n  LONG_RIGHT_PRESS,\n  LONG_MIDDLE_PRESS,\n  LEFT_CLICK_DRAG,\n  RIGHT_CLICK_DRAG,\n  MIDDLE_CLICK_DRAG,\n}\n","/**\n *  NO_PICK,    - will not pick entities\n *  PICK_FIRST  - first entity will be picked . use Cesium.scene.pick()\n *  PICK_ONE    - in case a few entities are picked plonter is resolved . use Cesium.scene.drillPick()\n *  PICK_ALL    - all entities are picked. use Cesium.scene.drillPick()\n */\nexport enum PickOptions {\n  NO_PICK,\n  PICK_FIRST,\n  PICK_ONE,\n  PICK_ALL\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { Cartesian3 } from 'cesium';\nimport { ContextMenuOptions } from '../../models/context-menu-options';\nimport { MapEventsManagerService } from '../map-events-mananger/map-events-manager';\nimport { CesiumEvent } from '../map-events-mananger/consts/cesium-event.enum';\nimport { PickOptions } from '../map-events-mananger/consts/pickOptions.enum';\nimport { DisposableObservable } from '../map-events-mananger/disposable-observable';\nimport { BasicContextMenu } from '../../models/basic-context-menu';\nimport { Subscription } from 'rxjs';\n\n\n/**\n * The Service manages a singleton context menu over the map. It should be initialized with MapEventsManager.\n * The Service allows opening and closing of the context menu and passing data to the context menu inner component.\n *\n * notice, `data` will be injected to your custom menu component into the `data` field in the component.\n * __Usage :__\n * ```\n *  ngOnInit() {\n *   this.clickEvent$ = this.eventsManager.register({ event: CesiumEvent.RIGHT_CLICK, pick: PickOptions.PICK_ONE });\n *   this.clickEvent$.subscribe(result => {\n *    if (result.entities) {\n *      const pickedMarker = result.entities[0];\n *      this.contextMenuService.open(MapContextmenuComponent, pickedMarker.position, {\n *        data: {\n *          myData: data,\n *          onDelete: () => this.delete(pickedMarker.id)\n *        }\n *      });\n *    }\n *   });\n *  }\n *\n *\n *  private delete(id) {\n *    this.mapMenu.close();\n *    this.detailedSiteService.removeMarker(id);\n *  }\n * ```\n */\n@Injectable()\nexport class ContextMenuService {\n  private _showContextMenu = false;\n  private _options: ContextMenuOptions;\n  private _position: Cartesian3;\n  private _content: BasicContextMenu;\n  private mapEventsManager: MapEventsManagerService;\n  private leftClickRegistration: DisposableObservable<any>;\n  private leftClickSubscription: Subscription;\n  private _contextMenuChangeNotifier = new EventEmitter();\n  private _onOpen = new EventEmitter();\n  private _onClose = new EventEmitter();\n  private _defaultContextMenuOptions: ContextMenuOptions = {\n    closeOnLeftCLick: true,\n    closeOnLeftClickPriority: 10,\n  };\n\n  get contextMenuChangeNotifier(): EventEmitter<any> {\n    return this._contextMenuChangeNotifier;\n  }\n\n  get showContextMenu(): boolean {\n    return this._showContextMenu;\n  }\n\n  get options(): ContextMenuOptions {\n    return this._options;\n  }\n\n  get position(): Cartesian3 {\n    return this._position;\n  }\n\n  get content(): BasicContextMenu {\n    return this._content;\n  }\n\n  get onOpen(): EventEmitter<any> {\n    return this._onOpen;\n  }\n\n  get onClose(): EventEmitter<any> {\n    return this._onClose;\n  }\n\n\n  init(mapEventsManager: MapEventsManagerService) {\n    this.mapEventsManager = mapEventsManager;\n  }\n\n  open<D>(contentComponent: any, position: Cartesian3, options: ContextMenuOptions<D> = {}) {\n    this.close();\n    this._content = contentComponent;\n    this._position = position;\n    this._options = Object.assign({}, this._defaultContextMenuOptions, options);\n    this._showContextMenu = true;\n    if (this.mapEventsManager && this._options.closeOnLeftCLick) {\n      this.leftClickRegistration = this.mapEventsManager.register({\n        event: CesiumEvent.LEFT_CLICK,\n        pick: PickOptions.NO_PICK,\n        priority: this._options.closeOnLeftClickPriority,\n      });\n      this.leftClickSubscription = this.leftClickRegistration.subscribe(() => {\n        this.leftClickSubscription.unsubscribe();\n        this.close();\n      });\n    }\n\n    this._contextMenuChangeNotifier.emit();\n    this._onOpen.emit();\n  }\n\n  close() {\n    this._content = undefined;\n    this._position = undefined;\n    this._options = undefined;\n    this._showContextMenu = false;\n    if (this.leftClickRegistration) {\n      this.leftClickRegistration.dispose();\n      this.leftClickRegistration = undefined;\n    }\n    if (this.leftClickSubscription) {\n      this.leftClickSubscription.unsubscribe();\n      this.leftClickSubscription = undefined;\n    }\n\n    this._contextMenuChangeNotifier.emit();\n    this._onClose.emit();\n  }\n}\n","import { Injectable, Optional } from '@angular/core';\nimport { Cartographic, Math as cMath, Cartesian3, SceneTransforms, Cartesian2 } from 'cesium';\nimport { CesiumService } from '../cesium/cesium.service';\nimport * as geodesy from 'geodesy';\nimport { hemisphere, LatLon, LatLonEllipsoidal, Utm } from 'geodesy';\n\nconst LatLonVectors = geodesy['LatLonVectors']; // doesnt exists on typings\n\nwindow['geodesy'] = geodesy;\n\n/**\n *  Given different types of coordinates, we provide you a service converting those types to the most common other types.\n *  We are using the geodesy implementation of UTM conversion. see: https://github.com/chrisveness/geodesy.\n *\n * @example\n * import { Component, OnInit } from '@angular/core';\n * import { CoordinateConverter } from 'angular2-cesium';\n *\n * @Component({\n * \t\tselector:'my-component',\n * \t\ttemplate:'<div>{{showCartographic}}</div>',\n * \t\tproviders:[CoordinateConverter]\n * })\n * export class MyComponent implements OnInit {\n * \t\tshowCartographic;\n *\n * \t\tconstructor(private coordinateConverter:CoordinateConverter){\n * \t\t}\n *\n * \t\tngOnInit(){\n * \t\t\tthis.showCartographic = this.coordinateConverter.degreesToCartographic(5, 5, 5);\n *  }\n * }\n *\n */\n@Injectable()\nexport class CoordinateConverter {\n  constructor(@Optional() private cesiumService?: CesiumService) {\n  }\n\n  static cartesian3ToLatLon(cartesian3: Cartesian3, ellipsoid?: any): {lon: number, lat: number; height: number} {\n    const cart = Cartographic.fromCartesian(cartesian3, ellipsoid);\n    return {\n      lon: cMath.toDegrees(cart.longitude),\n      lat: cMath.toDegrees(cart.latitude),\n      height: cart.height\n    };\n  }\n\n  screenToCartesian3(screenPos: { x: number, y: number }, addMapCanvasBoundsToPos?: boolean) {\n    if (!this.cesiumService) {\n      throw new Error('ANGULAR2-CESIUM - Cesium service should be provided in order' +\n        ' to do screen position calculations');\n    } else {\n      const screenPosition = { ...screenPos };\n      if (addMapCanvasBoundsToPos) {\n        const mapBounds = this.cesiumService.getViewer().canvas.getBoundingClientRect();\n        screenPosition.x += mapBounds.left;\n        screenPosition.y += mapBounds.top;\n      }\n\n      const camera = this.cesiumService.getViewer().camera;\n      return camera.pickEllipsoid(screenPosition);\n    }\n  }\n\n  screenToCartographic(screenPos: { x: number, y: number }, ellipsoid?: any) {\n    return this.cartesian3ToCartographic(this.screenToCartesian3(screenPos), ellipsoid);\n  }\n\n  cartesian3ToCartographic(cartesian: Cartesian3, ellipsoid?: any) {\n    return Cartographic.fromCartesian(cartesian, ellipsoid);\n  }\n\n  degreesToCartographic(longitude: number, latitude: number, height?: number) {\n    return Cartographic.fromDegrees(longitude, latitude, height);\n  }\n\n  radiansToCartographic(longitude: number, latitude: number, height?: number) {\n    return Cartographic.fromRadians(longitude, latitude, height);\n  }\n\n  degreesToUTM(longitude: number, latitude: number) {\n    return new LatLonEllipsoidal(latitude, longitude).toUtm();\n  }\n\n  UTMToDegrees(zone: number, hemisphereType: hemisphere, easting: number, northing: number) {\n    return this.geodesyToCesiumObject(new Utm(zone, hemisphereType, easting, northing).toLatLonE());\n  }\n\n  private geodesyToCesiumObject(geodesyRadians: LatLon) {\n    return {\n      longitude: geodesyRadians.lon,\n      latitude: geodesyRadians.lat,\n      height: geodesyRadians['height'] ? geodesyRadians['height'] : 0\n    };\n  }\n\n  /**\n   * middle point between two points\n   * @param first  (latitude,longitude) in radians\n   * @param second (latitude,longitude) in radians\n   */\n  midPointToCartesian3(first: { latitude: number, longitude: number }, second: { latitude: number, longitude: number }) {\n    const toDeg = (rad: number) => cMath.toDegrees(rad);\n    const firstPoint = new LatLonVectors(toDeg(first.latitude), toDeg(first.longitude));\n    const secondPoint = new LatLonVectors(toDeg(second.latitude), toDeg(second.longitude));\n    const middlePoint: any = firstPoint.midpointTo(secondPoint);\n\n    return Cartesian3.fromDegrees(middlePoint.lon, middlePoint.lat);\n  }\n\n  middlePointByScreen(position0: Cartesian3, position1: Cartesian3): Cartesian3 {\n    const scene = this.cesiumService.getScene();\n    const screenPosition1 = SceneTransforms.worldToWindowCoordinates(scene, position0);\n    const screenPosition2 = SceneTransforms.worldToWindowCoordinates(scene, position1);\n    const middleScreenPoint =\n      new Cartesian2((screenPosition2.x + screenPosition1.x) / 2.0, (screenPosition2.y + screenPosition1.y) / 2.0);\n    return scene.pickPosition(middleScreenPoint);\n  }\n\n  /**\n   * initial bearing between two points\n   *\n   * * @return bearing in degrees\n   * @param first - {latitude,longitude} in radians\n   * @param second - {latitude,longitude} in radians\n   */\n  bearingTo(first: { latitude: number, longitude: number }, second: { latitude: number, longitude: number }) {\n    const toDeg = (rad: number) => cMath.toDegrees(rad);\n    const firstPoint = new LatLonVectors(toDeg(first.latitude), toDeg(first.longitude));\n    const secondPoint = new LatLonVectors(toDeg(second.latitude), toDeg(second.longitude));\n    const bearing = firstPoint.bearingTo(secondPoint);\n\n    return bearing;\n  }\n\n  /**\n   * initial bearing between two points\n   *\n   * @return bearing in degrees\n   */\n  bearingToCartesian(firstCartesian3: Cartesian3, secondCartesian3: Cartesian3) {\n    const firstCart = Cartographic.fromCartesian(firstCartesian3);\n    const secondCart = Cartographic.fromCartesian(secondCartesian3);\n\n    return this.bearingTo(firstCart, secondCart);\n  }\n}\n","/**\n *  Abstract drawer. All drawers extends this class.\n */\n\nexport abstract class BasicDrawerService {\n  protected _propsAssigner: Function;\n\n  constructor() {\n  }\n\n  abstract add(cesiumProps: any, ...args: any[]): any;\n\n  abstract update(primitive: any, cesiumProps: any, ...args: any[]): void;\n\n  abstract remove(primitive: any): void;\n\n  abstract removeAll(): void;\n\n  abstract setShow(showValue: boolean): void;\n\n  abstract init(options?: any): any;\n\n  setPropsAssigner(assigner: Function) {\n    this._propsAssigner = assigner;\n  }\n}\n","import { PrimitiveCollection } from 'cesium';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { BasicDrawerService } from '../basic-drawer/basic-drawer.service';\n\n/**\n *  General primitives drawer responsible of drawing Cesium primitives.\n *  Drawers the handle Cesium primitives extend it.\n */\nexport abstract class PrimitivesDrawerService extends BasicDrawerService {\n  private _show = true;\n  private _primitiveCollectionWrap: any;\n  protected _cesiumCollection: any;\n  protected _propsAssigner: Function;\n\n  constructor(private drawerType: any, private cesiumService: CesiumService) {\n    super();\n  }\n\n  init() {\n    this._cesiumCollection = new this.drawerType();\n    this._primitiveCollectionWrap = new PrimitiveCollection();\n    this._primitiveCollectionWrap.add(this._cesiumCollection);\n    this.cesiumService.getScene().primitives.add(this._primitiveCollectionWrap);\n  }\n\n  add(cesiumProps: any, ...args: any[]): any {\n    return this._cesiumCollection.add(cesiumProps);\n  }\n\n  update(entity: any, cesiumProps: any, ...args: any[]) {\n    if (this._propsAssigner) {\n      this._propsAssigner(entity, cesiumProps);\n    } else {\n      Object.assign(entity, cesiumProps);\n    }\n  }\n\n  remove(entity: any) {\n    this._cesiumCollection.remove(entity);\n  }\n\n  removeAll() {\n    this._cesiumCollection.removeAll();\n  }\n\n  setShow(showValue: boolean) {\n    this._show = showValue;\n    this._primitiveCollectionWrap.show = showValue;\n  }\n\n  getShow(): boolean {\n    return this._show;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Ellipsoid, Cartesian3, Cartographic } from 'cesium';\nimport { CesiumService } from '../cesium/cesium.service';\nimport { Vec3 } from '../../models/vec3';\n\n@Injectable()\nexport class GeoUtilsService {\n  static pointByLocationDistanceAndAzimuth(currentLocation: any, meterDistance: number, radianAzimuth: number, deprecated?) {\n    const distance = meterDistance / Ellipsoid.WGS84.maximumRadius;\n    const cartographicLocation =\n      currentLocation instanceof Cartesian3 ? Cartographic.fromCartesian(currentLocation) : currentLocation;\n    const cartesianLocation =\n      currentLocation instanceof Cartesian3\n        ? currentLocation\n        : Cartesian3.fromRadians(currentLocation.longitude, currentLocation.latitude, currentLocation.height);\n\n    let resultPosition;\n    let resultDistance;\n    let counter = 0;\n    let distanceFactorRangeMax = 0.1;\n    let distanceFactorRangeMin = -0.1;\n    while (\n      counter === 0 ||\n      (counter < 16 && Math.max(resultDistance, meterDistance) / Math.min(resultDistance, meterDistance) > 1.000001)\n      ) {\n      const factor = distanceFactorRangeMin + (distanceFactorRangeMax - distanceFactorRangeMin) / 2;\n      resultPosition = GeoUtilsService._pointByLocationDistanceAndAzimuth(cartographicLocation, distance * (1 + factor), radianAzimuth);\n      resultDistance = this.distance(cartesianLocation, resultPosition);\n\n      if (resultDistance > meterDistance) {\n        distanceFactorRangeMax = distanceFactorRangeMin + (distanceFactorRangeMax - distanceFactorRangeMin) / 2;\n      } else {\n        distanceFactorRangeMin = distanceFactorRangeMin + (distanceFactorRangeMax - distanceFactorRangeMin) / 2;\n      }\n      counter++;\n    }\n\n    return resultPosition;\n  }\n\n  static _pointByLocationDistanceAndAzimuth(cartographicLocation: any, distance: number, radianAzimuth: number) {\n    const curLat = cartographicLocation.latitude;\n    const curLon = cartographicLocation.longitude;\n    const destinationLat = Math.asin(\n      Math.sin(curLat) * Math.cos(distance) + Math.cos(curLat) * Math.sin(distance) * Math.cos(radianAzimuth),\n    );\n\n    let destinationLon =\n      curLon +\n      Math.atan2(\n        Math.sin(radianAzimuth) * Math.sin(distance) * Math.cos(curLat),\n        Math.cos(distance) - Math.sin(curLat) * Math.sin(destinationLat),\n      );\n\n    destinationLon = ((destinationLon + 3 * Math.PI) % (2 * Math.PI)) - Math.PI;\n\n    return Cartesian3.fromRadians(destinationLon, destinationLat);\n  }\n\n  static distance(pos0: Cartesian3, pos1: Cartesian3): number {\n    return Cartesian3.distance(pos0, pos1);\n  }\n\n  static getPositionsDelta(position0: Cartesian3, position1: Cartesian3): Vec3 {\n    return {\n      x: position1.x - position0.x,\n      y: position1.y - position0.y,\n      z: position1.z - position0.z,\n    };\n  }\n\n  static addDeltaToPosition(position: Cartesian3, delta: Vec3, updateReference = false): Cartesian3 {\n    if (updateReference) {\n      position.x += delta.x;\n      position.y += delta.y;\n      position.z += delta.z;\n      const cartographic = Cartographic.fromCartesian(position);\n      cartographic.height = 0;\n      const cartesian = Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, cartographic.height);\n      position.x = cartesian.x;\n      position.y = cartesian.y;\n      position.z = cartesian.z;\n      return position;\n    } else {\n      const cartesian = new Cartesian3(position.x + delta.x, position.y + delta.y, position.z + delta.z);\n      const cartographic = Cartographic.fromCartesian(cartesian);\n      cartographic.height = 0;\n      return Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, cartographic.height);\n    }\n  }\n\n  static middleCartesian3Point(position0: Cartesian3, position1: Cartesian3) {\n    return new Cartesian3(position1.x - position0.x / 2, position1.y - position0.y / 2, position1.z - position0.z / 2);\n  }\n\n  constructor(private cesiumService: CesiumService) {\n  }\n\n  screenPositionToCartesian3(screenPos: { x: number; y: number }) {\n    const camera = this.cesiumService.getViewer().camera;\n    return camera.pickEllipsoid(screenPos);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { PolylineCollection, Material } from 'cesium';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { PrimitivesDrawerService } from '../primitives-drawer/primitives-drawer.service';\nimport { GeoUtilsService } from '../../geo-utils/geo-utils.service';\n\n/**\n +  This drawer is responsible for drawing an arc over the Cesium map.\n +  This implementation uses simple PolylineGeometry and Primitive parameters.\n +  This doesn't allow us to change the position, color, etc.. of the arc but setShow only.\n */\n\n@Injectable()\nexport class ArcDrawerService extends PrimitivesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(PolylineCollection, cesiumService);\n  }\n\n  _calculateArcPositions(cesiumProps: any) {\n    const quality = cesiumProps.quality || 18;\n    const delta = (cesiumProps.delta) / quality;\n    const pointsArray = [];\n    for (let i = 0; i < quality + 1; ++i) {\n      const point =\n        GeoUtilsService.pointByLocationDistanceAndAzimuth(cesiumProps.center, cesiumProps.radius, cesiumProps.angle + delta * i, true);\n      pointsArray.push(point);\n    }\n\n    return pointsArray;\n  }\n\n  _calculateTriangle(cesiumProps: any) {\n    return [\n      cesiumProps.center,\n      GeoUtilsService.pointByLocationDistanceAndAzimuth(cesiumProps.center, cesiumProps.radius, cesiumProps.angle, true)\n    ];\n  }\n\n  _calculateArc(cesiumProps: any) {\n    const arcPoints = this._calculateArcPositions(cesiumProps);\n    return cesiumProps.drawEdges ? arcPoints.concat(this._calculateTriangle(cesiumProps)) : arcPoints;\n  }\n\n  add(cesiumProps: any): any {\n    cesiumProps.positions = this._calculateArc(cesiumProps);\n    if (cesiumProps.color) {\n      const material = Material.fromType('Color');\n      material.uniforms.color = cesiumProps.color;\n      cesiumProps.material = material;\n    }\n\n    return this._cesiumCollection.add(cesiumProps);\n  }\n\n  update(primitive: any, cesiumProps: any) {\n    if (!cesiumProps.constantColor && cesiumProps.color &&\n      !primitive.material.uniforms.color.equals(cesiumProps.color)) {\n      primitive.material.uniforms.color = cesiumProps.color;\n    }\n    primitive.width = cesiumProps.width !== undefined ? cesiumProps.width : primitive.width;\n    primitive.show = cesiumProps.show !== undefined ? cesiumProps.show : primitive.show;\n    primitive.distanceDisplayCondition = cesiumProps.distanceDisplayCondition !== undefined ?\n      cesiumProps.distanceDisplayCondition : primitive.distanceDisplayCondition;\n    primitive.positions = this._calculateArc(cesiumProps);\n\n    return primitive;\n  }\n}\n","import * as Cesium from 'cesium';\nexport class GraphicsType {\n  static ellipse = Cesium.EllipseGraphics;\n  static ellipsoid = Cesium.EllipsoidGraphics;\n  static polygon = Cesium.PolygonGraphics;\n  static polyline = Cesium.PolylineGraphics;\n  static polylineVolume = Cesium.PolylineVolumeGraphics;\n  static box = Cesium.BoxGraphics;\n  static corridor = Cesium.CorridorGraphics;\n  static cylinder = Cesium.CylinderGraphics;\n  static label = Cesium.LabelGraphics;\n  static billboard = Cesium.BillboardGraphics;\n  static model = Cesium.ModelGraphics;\n  static path = Cesium.PathGraphics;\n  static point = Cesium.PointGraphics;\n  static rectangle = Cesium.RectangleGraphics;\n  static wall = Cesium.WallGraphics;\n}\n","export class OptimizedEntityCollection {\n  private _updateRate: number;\n  private _collectionSize: number;\n  private _isSuspended = false;\n  private _isHardSuspend = false;\n  private _suspensionTimeout: any;\n  private _onEventSuspensionCallback: { once: boolean, callback: Function };\n  private _onEventResumeCallback: { once: boolean, callback: Function };\n\n  constructor(private entityCollection: any, collectionSize = -1, updateRate = -1) {\n    this._updateRate = updateRate;\n    this._collectionSize = collectionSize;\n\n  }\n\n  setShow(show: boolean) {\n    this.entityCollection.show = show;\n  }\n\n  get isSuspended(): boolean {\n    return this._isSuspended;\n  }\n\n  get updateRate(): number {\n    return this._updateRate;\n  }\n\n  set updateRate(value: number) {\n    this._updateRate = value;\n  }\n\n  get collectionSize(): number {\n    return this._collectionSize;\n  }\n\n  set collectionSize(value: number) {\n    this._collectionSize = value;\n  }\n\n  collection() {\n    return this.entityCollection;\n  }\n\n  isFree(): boolean {\n    return this._collectionSize < 1 || this.entityCollection.values.length < this._collectionSize;\n  }\n\n  add(entity: any) {\n    this.suspend();\n    return this.entityCollection.add(entity);\n  }\n\n  remove(entity: any) {\n    this.suspend();\n    return this.entityCollection.remove(entity);\n  }\n\n  removeNoSuspend(entity: any) {\n    this.entityCollection.remove(entity);\n  }\n\n  removeAll() {\n    this.suspend();\n    this.entityCollection.removeAll();\n  }\n\n  onEventSuspension(callback: Function, once = false): Function {\n    this._onEventSuspensionCallback = {callback, once};\n    return () => {\n      this._onEventSuspensionCallback = undefined;\n    };\n  }\n\n  onEventResume(callback: Function, once = false): Function {\n    this._onEventResumeCallback = {callback, once};\n    if (!this._isSuspended) {\n      this.triggerEventResume();\n    }\n    return () => {\n      this._onEventResumeCallback = undefined;\n    };\n  }\n\n  triggerEventSuspension() {\n    if (this._onEventSuspensionCallback !== undefined) {\n      const callback = this._onEventSuspensionCallback.callback;\n      if (this._onEventSuspensionCallback.once) {\n        this._onEventSuspensionCallback = undefined;\n      }\n      callback();\n    }\n  }\n\n  triggerEventResume() {\n    if (this._onEventResumeCallback !== undefined) {\n      const callback = this._onEventResumeCallback.callback;\n      if (this._onEventResumeCallback.once) {\n        this._onEventResumeCallback = undefined;\n      }\n      callback();\n    }\n  }\n\n  public suspend() {\n    if (this._updateRate < 0) {\n      return;\n    }\n    if (this._isHardSuspend) {\n      return;\n    }\n    if (!this._isSuspended) {\n      this._isSuspended = true;\n      this.entityCollection.suspendEvents();\n      this.triggerEventSuspension();\n      this._suspensionTimeout = setTimeout(() => {\n        this.entityCollection.resumeEvents();\n        this.triggerEventResume();\n        this._isSuspended = false;\n        this._suspensionTimeout = undefined;\n      }, this._updateRate);\n    }\n  }\n\n  public hardSuspend() {\n    this.entityCollection.suspendEvents();\n    this._isHardSuspend = true;\n  }\n\n  public hardResume() {\n    this.entityCollection.resumeEvents();\n    this._isHardSuspend = false;\n  }\n\n}\n","import { BasicDrawerService } from '../basic-drawer/basic-drawer.service';\nimport { CustomDataSource, CallbackProperty } from 'cesium';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { GraphicsType } from './enums/graphics-type.enum';\nimport { EntitiesDrawerOptions } from '../../../models/entities-drawer-options';\nimport { OptimizedEntityCollection } from './optimized-entity-collection';\n\n/**\n *  General primitives drawer responsible of drawing Cesium primitives.\n *  Drawers the handle Cesium primitives extend it.\n */\n\nexport class EntitiesDrawerService extends BasicDrawerService {\n  private entityCollections = new Map<any, OptimizedEntityCollection>();\n  private graphicsTypeName: string;\n\n  constructor(\n    private cesiumService: CesiumService,\n    private graphicsType: GraphicsType,\n    private defaultOptions: EntitiesDrawerOptions = {\n      collectionMaxSize: -1,\n      collectionSuspensionTime: -1,\n      collectionsNumber: 1,\n    },\n  ) {\n    super();\n    this.graphicsTypeName = \"Unknown\";\n\n    // Fix bad enum compilation\n    for (const i in GraphicsType) {\n      if (GraphicsType[i] as any === this.graphicsType) {\n        this.graphicsTypeName = i;\n      }\n    }\n  }\n\n  private getFreeEntitiesCollection(): OptimizedEntityCollection {\n    let freeEntityCollection = null;\n    this.entityCollections.forEach(entityCollection => {\n      if (entityCollection.isFree()) {\n        freeEntityCollection = entityCollection;\n      }\n    });\n\n    return freeEntityCollection;\n  }\n\n  init(options?: EntitiesDrawerOptions) {\n    const finalOptions = options || this.defaultOptions;\n    const dataSources = [];\n    for (let i = 0; i < finalOptions.collectionsNumber; i++) {\n      const dataSource = new CustomDataSource(this.graphicsTypeName);\n      dataSources.push(dataSource);\n      this.cesiumService.getViewer().dataSources.add(dataSource);\n      this.entityCollections.set(\n        dataSource.entities,\n        new OptimizedEntityCollection(dataSource.entities, finalOptions.collectionMaxSize, finalOptions.collectionSuspensionTime),\n      );\n    }\n\n    return dataSources;\n  }\n\n  add(cesiumProps: any): any {\n    const optimizedEntityCollection = this.getFreeEntitiesCollection();\n    if (optimizedEntityCollection === null) {\n      throw new Error('No more free entity collections');\n    }\n\n    const entityObject = {\n      position: cesiumProps.position !== undefined ? cesiumProps.position : undefined,\n      description: cesiumProps.description !== undefined ? cesiumProps.description : undefined,\n      orientation: cesiumProps.orientation !== undefined ? cesiumProps.orientation : undefined,\n      viewFrom: cesiumProps.viewFrom !== undefined ? cesiumProps.viewFrom : undefined,\n      [this.graphicsTypeName]: cesiumProps,\n    };\n\n    if (cesiumProps.name !== undefined) {\n      entityObject.name = cesiumProps.name;\n    }\n    if (cesiumProps.availability !== undefined) {\n      entityObject.availability = cesiumProps.availability;\n    }\n\n    return optimizedEntityCollection.add(entityObject);\n  }\n\n  update(entity: any, cesiumProps: any) {\n    this.suspendEntityCollection(entity);\n\n    if (entity.position instanceof CallbackProperty) {\n      if (entity.position._isConstant) {\n        entity.position = cesiumProps.position;\n      }\n    }\n    entity.position = cesiumProps.position !== undefined ? cesiumProps.position : undefined;\n    entity.name = cesiumProps.name !== undefined ? cesiumProps.name : entity.name;\n    entity.description = cesiumProps.description !== undefined ? cesiumProps.description : entity.description;\n    entity.orientation = cesiumProps.orientation !== undefined ? cesiumProps.orientation : entity.orientation;\n    entity.viewFrom = cesiumProps.viewFrom !== undefined ? cesiumProps.viewFrom : entity.viewFrom;\n    entity.availability = cesiumProps.availability !== undefined ? cesiumProps.availability : cesiumProps.availability;\n\n    if (this._propsAssigner) {\n      this._propsAssigner(entity[this.graphicsTypeName], cesiumProps);\n    } else {\n      Object.assign(entity[this.graphicsTypeName], cesiumProps);\n    }\n  }\n\n  remove(entity: any) {\n    const optimizedEntityCollection = this.entityCollections.get(entity.entityCollection);\n    optimizedEntityCollection.remove(entity);\n  }\n\n  removeAll() {\n    this.entityCollections.forEach(entityCollection => {\n      entityCollection.removeAll();\n    });\n  }\n\n  setShow(showValue: boolean) {\n    this.entityCollections.forEach(entityCollection => {\n      entityCollection.setShow(showValue);\n    });\n  }\n\n  private suspendEntityCollection(entity: any) {\n    const id = entity.entityCollection;\n    if (!this.entityCollections.has(id)) {\n      throw new Error('No EntityCollection for entity.entityCollection');\n    }\n\n    const entityCollection = this.entityCollections.get(id);\n    entityCollection.suspend();\n  }\n}\n\n","import { Injectable } from '@angular/core';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { EntitiesDrawerService } from '../entities-drawer/entities-drawer.service';\nimport { GraphicsType } from '../entities-drawer/enums/graphics-type.enum';\n\n/**\n *  This drawer is responsible for drawing billboards.\n */\n@Injectable()\nexport class BillboardDrawerService extends EntitiesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(cesiumService, GraphicsType.billboard);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { CzmlDataSource } from 'cesium';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { BasicDrawerService } from '../basic-drawer/basic-drawer.service';\nimport { EntitiesDrawerOptions } from '../../../models/entities-drawer-options';\n\n/**\n *  This drawer is responsible for drawing czml dataSources.\n */\n@Injectable()\nexport class CzmlDrawerService extends BasicDrawerService {\n\n  czmlStream: any;\n\n  constructor(\n    private cesiumService: CesiumService,\n  ) {\n    super();\n  }\n\n\n  init(options?: EntitiesDrawerOptions) {\n    const dataSources = [];\n\n    this.czmlStream = new CzmlDataSource('czml');\n\n    dataSources.push(this.czmlStream);\n\n    this.cesiumService.getViewer().dataSources.add(this.czmlStream);\n\n    return dataSources;\n  }\n\n  // returns the packet, provided by the stream\n  add(cesiumProps: any): any {\n\n    this.czmlStream.process(cesiumProps.czmlPacket);\n\n    return cesiumProps;\n  }\n\n  update(entity: any, cesiumProps: any) {\n    this.czmlStream.process(cesiumProps.czmlPacket);\n  }\n\n  remove(entity: any) {\n    this.czmlStream.entities.removeById(entity.acEntity.id);\n  }\n\n  removeAll() {\n    this.czmlStream.entities.removeAll();\n  }\n\n  setShow(showValue: boolean) {\n    this.czmlStream.entities.show = showValue;\n  }\n\n}\n\n\n","import { Injectable } from '@angular/core';\nimport { EntitiesDrawerService } from '../entities-drawer/entities-drawer.service';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { GraphicsType } from '../entities-drawer/enums/graphics-type.enum';\n\n/**\n *  This drawer is responsible for drawing ellipses.\n */\n@Injectable()\nexport class EllipseDrawerService extends EntitiesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(cesiumService, GraphicsType.ellipse);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { EntitiesDrawerService } from '../entities-drawer/entities-drawer.service';\nimport { GraphicsType } from '../entities-drawer/enums/graphics-type.enum';\n\n/**\n *  This drawer is responsible for drawing labels.\n */\n@Injectable()\nexport class LabelDrawerService extends EntitiesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(cesiumService, GraphicsType.label);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { EntitiesDrawerService } from '../entities-drawer/entities-drawer.service';\nimport { GraphicsType } from '../entities-drawer/enums/graphics-type.enum';\n\n/**\n *  This drawer is responsible for drawing points.\n */\n@Injectable()\nexport class PointDrawerService extends EntitiesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(cesiumService, GraphicsType.point);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { EntitiesDrawerService } from '../entities-drawer/entities-drawer.service';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { GraphicsType } from '../entities-drawer/enums/graphics-type.enum';\n\n/**\n *  This drawer is responsible for drawing polygons.\n */\n@Injectable()\nexport class PolygonDrawerService extends EntitiesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(cesiumService, GraphicsType.polygon);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { EntitiesDrawerService } from '../entities-drawer/entities-drawer.service';\nimport { GraphicsType } from '../entities-drawer/enums/graphics-type.enum';\n\n/**\n *  This drawer is responsible of drawing polylines.\n */\n@Injectable()\nexport class PolylineDrawerService extends EntitiesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(cesiumService, GraphicsType.polyline);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { PolylineCollection, Color, Material } from 'cesium';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { PrimitivesDrawerService } from '../primitives-drawer/primitives-drawer.service';\n\n/**\n *  This drawer is responsible of drawing polylines as primitives.\n *  This drawer is more efficient than PolylineDrawerService when drawing dynamic polylines.\n */\n@Injectable()\nexport class PolylinePrimitiveDrawerService extends PrimitivesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(PolylineCollection, cesiumService);\n  }\n\n  add(cesiumProps: any) {\n    return this._cesiumCollection.add(this.withColorMaterial(cesiumProps));\n  }\n\n  update(cesiumObject: any, cesiumProps: any) {\n    if (cesiumProps.material instanceof Color) {\n      if (cesiumObject.material && cesiumObject.material.uniforms &&\n        cesiumObject.material.uniforms.color instanceof Color) {\n        this.withColorMaterial(cesiumProps);\n      } else if (!cesiumObject.material.uniforms.color.equals(cesiumProps.material)) {\n        cesiumObject.material.uniforms.color = cesiumProps.material;\n      }\n    }\n    super.update(cesiumObject, cesiumProps);\n  }\n\n  withColorMaterial(cesiumProps: any) {\n    if (cesiumProps.material instanceof Color) {\n      const material = Material.fromType('Color');\n      material.uniforms.color = cesiumProps.material;\n      cesiumProps.material = material;\n    }\n\n    return cesiumProps;\n  }\n}\n","export enum KeyboardAction {\n  CAMERA_FORWARD,\n  CAMERA_BACKWARD,\n  CAMERA_RIGHT,\n  CAMERA_LEFT,\n  CAMERA_UP,\n  CAMERA_DOWN,\n  CAMERA_LOOK_RIGHT,\n  CAMERA_LOOK_LEFT,\n  CAMERA_LOOK_UP,\n  CAMERA_LOOK_DOWN,\n  CAMERA_TWIST_RIGHT,\n  CAMERA_TWIST_LEFT,\n  CAMERA_ROTATE_RIGHT,\n  CAMERA_ROTATE_LEFT,\n  CAMERA_ROTATE_UP,\n  CAMERA_ROTATE_DOWN,\n  CAMERA_ZOOM_IN,\n  CAMERA_ZOOM_OUT,\n}\n","import { KeyboardAction } from '../../models/ac-keyboard-action.enum';\nimport { KeyboardControlActionFn } from './keyboard-control.service';\nimport { CesiumService } from '../cesium/cesium.service';\n\nconst CAMERA_MOVEMENT_DEFAULT_FACTOR = 100.0;\nconst CAMERA_LOOK_DEFAULT_FACTOR = 0.01;\nconst CAMERA_TWIST_DEFAULT_FACTOR = 0.01;\nconst CAMERA_ROTATE_DEFAULT_FACTOR = 0.01;\n\nexport const PREDEFINED_KEYBOARD_ACTIONS: { [key: number]: KeyboardControlActionFn } = {\n  /**\n   * Moves the camera forward, accepts a numeric parameter named `moveRate` that controls\n   * the factor of movement, according to the camera height.\n   */\n  [KeyboardAction.CAMERA_FORWARD]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const scene = cesiumService.getScene();\n    const cameraHeight = scene.globe.ellipsoid.cartesianToCartographic(camera.position).height;\n    const moveRate = cameraHeight / (params.moveRate || CAMERA_MOVEMENT_DEFAULT_FACTOR);\n    camera.moveForward(moveRate);\n  },\n  /**\n   * Moves the camera backward, accepts a numeric parameter named `moveRate` that controls\n   * the factor of movement, according to the camera height.\n   */\n  [KeyboardAction.CAMERA_BACKWARD]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const scene = cesiumService.getScene();\n    const cameraHeight = scene.globe.ellipsoid.cartesianToCartographic(camera.position).height;\n    const moveRate = cameraHeight / (params.moveRate || CAMERA_MOVEMENT_DEFAULT_FACTOR);\n    camera.moveBackward(moveRate);\n  },\n  /**\n   * Moves the camera up, accepts a numeric parameter named `moveRate` that controls\n   * the factor of movement, according to the camera height.\n   */\n  [KeyboardAction.CAMERA_UP]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const scene = cesiumService.getScene();\n    const cameraHeight = scene.globe.ellipsoid.cartesianToCartographic(camera.position).height;\n    const moveRate = cameraHeight / (params.moveRate || CAMERA_MOVEMENT_DEFAULT_FACTOR);\n    camera.moveUp(moveRate);\n  },\n  /**\n   * Moves the camera down, accepts a numeric parameter named `moveRate` that controls\n   * the factor of movement, according to the camera height.\n   */\n  [KeyboardAction.CAMERA_DOWN]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const scene = cesiumService.getScene();\n    const cameraHeight = scene.globe.ellipsoid.cartesianToCartographic(camera.position).height;\n    const moveRate = cameraHeight / (params.moveRate || CAMERA_MOVEMENT_DEFAULT_FACTOR);\n    camera.moveDown(moveRate);\n  },\n  /**\n   * Moves the camera right, accepts a numeric parameter named `moveRate` that controls\n   * the factor of movement, according to the camera height.\n   */\n  [KeyboardAction.CAMERA_RIGHT]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const scene = cesiumService.getScene();\n    const cameraHeight = scene.globe.ellipsoid.cartesianToCartographic(camera.position).height;\n    const moveRate = cameraHeight / (params.moveRate || CAMERA_MOVEMENT_DEFAULT_FACTOR);\n    camera.moveRight(moveRate);\n  },\n  /**\n   * Moves the camera left, accepts a numeric parameter named `moveRate` that controls\n   * the factor of movement, according to the camera height.\n   */\n  [KeyboardAction.CAMERA_LEFT]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const scene = cesiumService.getScene();\n    const cameraHeight = scene.globe.ellipsoid.cartesianToCartographic(camera.position).height;\n    const moveRate = cameraHeight / (params.moveRate || CAMERA_MOVEMENT_DEFAULT_FACTOR);\n    camera.moveLeft(moveRate);\n  },\n  /**\n   * Changes the camera to look to the right, accepts a numeric parameter named `lookFactor` that controls\n   * the factor of looking, according to the camera current position.\n   */\n  [KeyboardAction.CAMERA_LOOK_RIGHT]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const currentPosition = camera.positionCartographic;\n    const lookFactor = params.lookFactor || CAMERA_LOOK_DEFAULT_FACTOR;\n    camera.lookRight(currentPosition.latitude * lookFactor);\n  },\n  /**\n   * Changes the camera to look to the left, accepts a numeric parameter named `lookFactor` that controls\n   * the factor of looking, according to the camera current position.\n   */\n  [KeyboardAction.CAMERA_LOOK_LEFT]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const currentPosition = camera.positionCartographic;\n    const lookFactor = params.lookFactor || CAMERA_LOOK_DEFAULT_FACTOR;\n    camera.lookLeft(currentPosition.latitude * lookFactor);\n  },\n  /**\n   * Changes the camera to look up, accepts a numeric parameter named `lookFactor` that controls\n   * the factor of looking, according to the camera current position.\n   */\n  [KeyboardAction.CAMERA_LOOK_UP]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const currentPosition = camera.positionCartographic;\n    const lookFactor = params.lookFactor || CAMERA_LOOK_DEFAULT_FACTOR;\n    camera.lookUp(currentPosition.longitude * (lookFactor * -1));\n  },\n  /**\n   * Changes the camera to look down, accepts a numeric parameter named `lookFactor` that controls\n   * the factor of looking, according to the camera current position.\n   */\n  [KeyboardAction.CAMERA_LOOK_DOWN]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const currentPosition = camera.positionCartographic;\n    const lookFactor = params.lookFactor || CAMERA_LOOK_DEFAULT_FACTOR;\n    camera.lookDown(currentPosition.longitude * (lookFactor * -1));\n  },\n  /**\n   * Twists the camera to the right, accepts a numeric parameter named `amount` that controls\n   * the twist amount\n   */\n  [KeyboardAction.CAMERA_TWIST_RIGHT]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const lookFactor = params.amount || CAMERA_TWIST_DEFAULT_FACTOR;\n    camera.twistRight(lookFactor);\n  },\n  /**\n   * Twists the camera to the left, accepts a numeric parameter named `amount` that controls\n   * the twist amount\n   */\n  [KeyboardAction.CAMERA_TWIST_LEFT]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const lookFactor = params.amount || CAMERA_TWIST_DEFAULT_FACTOR;\n    camera.twistLeft(lookFactor);\n  },\n  /**\n   * Rotates the camera to the right, accepts a numeric parameter named `angle` that controls\n   * the rotation angle\n   */\n  [KeyboardAction.CAMERA_ROTATE_RIGHT]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const lookFactor = params.angle || CAMERA_ROTATE_DEFAULT_FACTOR;\n    camera.rotateRight(lookFactor);\n  },\n  /**\n   * Rotates the camera to the left, accepts a numeric parameter named `angle` that controls\n   * the rotation angle\n   */\n  [KeyboardAction.CAMERA_ROTATE_LEFT]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const lookFactor = params.angle || CAMERA_ROTATE_DEFAULT_FACTOR;\n    camera.rotateLeft(lookFactor);\n  },\n  /**\n   * Rotates the camera upwards, accepts a numeric parameter named `angle` that controls\n   * the rotation angle\n   */\n  [KeyboardAction.CAMERA_ROTATE_UP]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const lookFactor = params.angle || CAMERA_ROTATE_DEFAULT_FACTOR;\n    camera.rotateUp(lookFactor);\n  },\n  /**\n   * Rotates the camera downwards, accepts a numeric parameter named `angle` that controls\n   * the rotation angle\n   */\n  [KeyboardAction.CAMERA_ROTATE_DOWN]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const lookFactor = params.angle || CAMERA_ROTATE_DEFAULT_FACTOR;\n    camera.rotateDown(lookFactor);\n  },\n  /**\n   * Zoom in into the current camera center position, accepts a numeric parameter named\n   * `amount` that controls the amount of zoom in meters.\n   */\n  [KeyboardAction.CAMERA_ZOOM_IN]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const amount = params.amount;\n    camera.zoomIn(amount);\n  },\n  /**\n   * Zoom out from the current camera center position, accepts a numeric parameter named\n   * `amount` that controls the amount of zoom in meters.\n   */\n  [KeyboardAction.CAMERA_ZOOM_OUT]: (cesiumService: CesiumService, params: any) => {\n    const camera = cesiumService.getViewer().camera;\n    const amount = params.amount;\n    camera.zoomOut(amount);\n  },\n};\n","import { Inject, Injectable, NgZone, DOCUMENT } from '@angular/core';\n\nimport { KeyboardAction } from '../../models/ac-keyboard-action.enum';\nimport { CesiumService } from '../cesium/cesium.service';\nimport { PREDEFINED_KEYBOARD_ACTIONS } from './predefined-actions';\n\nexport type KeyboardControlActionFn = (cesiumService: CesiumService, params: any, event: KeyboardEvent) => boolean | void;\nexport type KeyboardControlValidationFn = (cesiumService: CesiumService, params: any, event: KeyboardEvent) => boolean;\nexport type KeyboardControlDoneFn = (cesiumService: CesiumService, event: KeyboardEvent) => boolean;\n\nexport interface KeyboardControlParams {\n  action: KeyboardAction | KeyboardControlActionFn;\n  validation?: KeyboardControlValidationFn;\n  params?: { [paramName: string]: any };\n  done?: KeyboardControlDoneFn;\n}\n\nexport interface KeyboardControlDefinition {\n  [keyboardCharCode: string]: KeyboardControlParams;\n}\n\nenum KeyEventState {\n  IGNORED,\n  NOT_PRESSED,\n  PRESSED,\n}\n\ninterface ActiveDefinition {\n  keyboardEvent: KeyboardEvent;\n  state: KeyEventState;\n  action: KeyboardControlParams;\n}\n\n/**\n *  Service that manages keyboard keys and execute actions per request.\n *  Inject the keyboard control service into any layer, under your `ac-map` component,\n *  And defined you keyboard handlers using `setKeyboardControls`.\n *\n * <caption>Simple Example</caption>\n * ```typescript\n * Component({\n *   selector: 'keyboard-control-layer',\n *   template: '',\n * })\n * export class KeyboardControlLayerComponent implements OnInit, OnDestroy {\n *   constructor(private keyboardControlService: KeyboardControlService) {}\n *\n *   ngOnInit() {\n *     this.keyboardControlService.setKeyboardControls({\n *       W: { action: KeyboardAction.CAMERA_FORWARD },\n *       S: { action: KeyboardAction.CAMERA_BACKWARD },\n *       D: { action: KeyboardAction.CAMERA_RIGHT },\n *       A: { action: KeyboardAction.CAMERA_LEFT },\n *     });\n *    }\n *\n *   ngOnDestroy() {\n *     this.keyboardControlService.removeKeyboardControls();\n *   }\n * }\n * ```\n *\n * <caption>Advanced Example</caption>\n * ```typescript\n * Component({\n *   selector: 'keyboard-control-layer',\n *   template: '',\n * })\n * export class KeyboardControlLayerComponent implements OnInit, OnDestroy {\n *   constructor(private keyboardControlService: KeyboardControlService) {}\n *\n *   private myCustomValue = 10;\n *\n *   ngOnInit() {\n *     this.keyboardControlService.setKeyboardControls({\n *       W: {\n *          action: KeyboardAction.CAMERA_FORWARD,\n *          validate: (camera, scene, params, key) => {\n *            // Replace `checkCamera` you with your validation logic\n *            if (checkCamera(camera) || params.customParams === true) {\n *              return true;\n *            }\n *\n *            return false;\n *          },\n *          params: () => {\n *            return {\n *              myValue: this.myCustomValue,\n *            };\n *          },\n *        }\n *     });\n *    }\n *\n *   ngOnDestroy() {\n *     this.keyboardControlService.removeKeyboardControls();\n *   }\n * }\n * ```\n * <b>Predefined keyboard actions:</b>\n * + `KeyboardAction.CAMERA_FORWARD` - Moves the camera forward, accepts a numeric parameter named `moveRate` that controls\n * the factor of movement, according to the camera height.\n * + `KeyboardAction.CAMERA_BACKWARD` - Moves the camera backward, accepts a numeric parameter named `moveRate` that controls\n * the factor of movement, according to the camera height.\n * + `KeyboardAction.CAMERA_UP` - Moves the camera up, accepts a numeric parameter named `moveRate` that controls\n * the factor of movement, according to the camera height.\n * + `KeyboardAction.CAMERA_DOWN` - Moves the camera down, accepts a numeric parameter named `moveRate` that controls\n * the factor of movement, according to the camera height.\n * + `KeyboardAction.CAMERA_RIGHT` - Moves the camera right, accepts a numeric parameter named `moveRate` that controls\n * the factor of movement, according to the camera height.\n * + `KeyboardAction.CAMERA_LEFT` - Moves the camera left, accepts a numeric parameter named `moveRate` that controls\n * the factor of movement, according to the camera height.\n * + `KeyboardAction.CAMERA_LOOK_RIGHT` - Changes the camera to look to the right, accepts a numeric parameter named `lookFactor` that\n * controls the factor of looking, according to the camera current position.\n * + `KeyboardAction.CAMERA_LOOK_LEFT` - Changes the camera to look to the left, accepts a numeric parameter named `lookFactor` that\n * controls the factor of looking, according to the camera current position.\n * + `KeyboardAction.CAMERA_LOOK_UP` - Changes the camera to look up, accepts a numeric parameter named `lookFactor` that controls\n * the factor of looking, according to the camera current position.\n * + `KeyboardAction.CAMERA_LOOK_DOWN` - Changes the camera to look down, accepts a numeric parameter named `lookFactor` that controls\n * the factor of looking, according to the camera current position.\n * + `KeyboardAction.CAMERA_TWIST_RIGHT` - Twists the camera to the right, accepts a numeric parameter named `amount` that controls\n * the twist amount\n * + `KeyboardAction.CAMERA_TWIST_LEFT` - Twists the camera to the left, accepts a numeric parameter named `amount` that controls\n * the twist amount\n * + `KeyboardAction.CAMERA_ROTATE_RIGHT` - Rotates the camera to the right, accepts a numeric parameter named `angle` that controls\n * the rotation angle\n * + `KeyboardAction.CAMERA_ROTATE_LEFT` - Rotates the camera to the left, accepts a numeric parameter named `angle` that controls\n * the rotation angle\n * + `KeyboardAction.CAMERA_ROTATE_UP` - Rotates the camera upwards, accepts a numeric parameter named `angle` that controls\n * the rotation angle\n * + `KeyboardAction.CAMERA_ROTATE_DOWN` - Rotates the camera downwards, accepts a numeric parameter named `angle` that controls\n * the rotation angle\n * + `KeyboardAction.CAMERA_ZOOM_IN` - Zoom in into the current camera center position, accepts a numeric parameter named\n * `amount` that controls the amount of zoom in meters.\n * + `KeyboardAction.CAMERA_ZOOM_OUT` -  Zoom out from the current camera center position, accepts a numeric parameter named\n * `amount` that controls the amount of zoom in meters.\n */\n@Injectable()\nexport class KeyboardControlService {\n  private _currentDefinitions: KeyboardControlDefinition = null;\n  private _activeDefinitions: { [definitionKey: string]: ActiveDefinition } = {};\n  private _keyMappingFn: Function = this.defaultKeyMappingFn;\n\n  /**\n   * Creats the keyboard control service.\n   */\n  constructor(private ngZone: NgZone, private cesiumService: CesiumService, @Inject(DOCUMENT) private document: any) {\n  }\n\n  /**\n   * Initializes the keyboard control service.\n   */\n  init() {\n    const canvas = this.cesiumService.getCanvas();\n    canvas.addEventListener('click', () => {\n      canvas.focus();\n    });\n\n    this.handleKeydown = this.handleKeydown.bind(this);\n    this.handleKeyup = this.handleKeyup.bind(this);\n    this.handleTick = this.handleTick.bind(this);\n  }\n\n  /**\n   * Sets the current map keyboard control definitions.\n   * The definitions is a key mapping between a key string and a KeyboardControlDefinition:\n   * - `action` is a predefine action from `KeyboardAction` enum, or a custom method:\n   * `(camera, scene, params, key) => boolean | void` - returning false will cancel the current keydown.\n   * - `validation` is a method that validates if the event should occur or not (`camera, scene, params, key`)\n   * - `params` is an object (or function that returns object) that will be passed into the action executor.\n   * - `done` is a function that will be triggered when `keyup` is triggered.\n   * @param definitions Keyboard Control Definition\n   * @param keyMappingFn - Mapping function for custom keys\n   * @param outsideOfAngularZone - if key down events will run outside of angular zone.\n   */\n  setKeyboardControls(definitions: KeyboardControlDefinition,\n                      keyMappingFn?: (keyEvent: KeyboardEvent) => string,\n                      outsideOfAngularZone = false) {\n    if (!definitions) {\n      return this.removeKeyboardControls();\n    }\n\n    if (!this._currentDefinitions) {\n      this.registerEvents(outsideOfAngularZone);\n    }\n\n    this._currentDefinitions = definitions;\n    this._keyMappingFn = keyMappingFn || this.defaultKeyMappingFn;\n\n    Object.keys(this._currentDefinitions).forEach(key => {\n      this._activeDefinitions[key] = {\n        state: KeyEventState.NOT_PRESSED,\n        action: null,\n        keyboardEvent: null,\n      };\n    });\n  }\n\n  /**\n   * Removes the current set of keyboard control items, and unregister from map events.\n   */\n  removeKeyboardControls() {\n    this.unregisterEvents();\n    this._currentDefinitions = null;\n  }\n\n  /**\n   * Returns the current action that handles `char` key string, or `null` if not exists\n   */\n  private getAction(char: string): KeyboardControlParams {\n    return this._currentDefinitions[char] || null;\n  }\n\n  /**\n   * The default `defaultKeyMappingFn` that maps `KeyboardEvent` into a key string.\n   */\n  private defaultKeyMappingFn(keyEvent: KeyboardEvent): string {\n    return String.fromCharCode(keyEvent.keyCode);\n  }\n\n  /**\n   * document's `keydown` event handler\n   */\n  private handleKeydown(e: KeyboardEvent) {\n    const char = this._keyMappingFn(e);\n    const action = this.getAction(char);\n\n    if (action) {\n      const actionState = this._activeDefinitions[char];\n\n      if (actionState.state !== KeyEventState.IGNORED) {\n        let execute = true;\n\n        const params = this.getParams(action.params, e);\n\n        if (action.validation) {\n          execute = action.validation(this.cesiumService, params, e);\n        }\n\n        if (execute === true) {\n          this._activeDefinitions[char] = {\n            state: KeyEventState.PRESSED,\n            action,\n            keyboardEvent: e,\n          };\n        }\n      }\n    }\n  }\n\n  /**\n   * document's `keyup` event handler\n   */\n  private handleKeyup(e: KeyboardEvent) {\n    const char = this._keyMappingFn(e);\n    const action = this.getAction(char);\n\n    if (action) {\n      this._activeDefinitions[char] = {\n        state: KeyEventState.NOT_PRESSED,\n        action: null,\n        keyboardEvent: e,\n      };\n\n      if (action.done && typeof action.done === 'function') {\n        action.done(this.cesiumService, e);\n      }\n    }\n  }\n\n  /**\n   * `tick` event handler that triggered by Cesium render loop\n   */\n  private handleTick() {\n    const activeKeys = Object.keys(this._activeDefinitions);\n\n    activeKeys.forEach(key => {\n      const actionState = this._activeDefinitions[key];\n\n      if (actionState !== null && actionState.action !== null && actionState.state === KeyEventState.PRESSED) {\n        this.executeAction(actionState.action, key, actionState.keyboardEvent);\n      }\n    });\n  }\n\n  /**\n   *\n   * Params resolve function, returns object.\n   * In case of params function, executes it and returns it's return value.\n   *\n   */\n  private getParams(paramsDef: any, keyboardEvent: KeyboardEvent): { [paramName: string]: any } {\n    if (!paramsDef) {\n      return {};\n    }\n\n    if (typeof paramsDef === 'function') {\n      return paramsDef(this.cesiumService, keyboardEvent);\n    }\n\n    return paramsDef;\n  }\n\n  /**\n   *\n   * Executes a given `KeyboardControlParams` object.\n   *\n   */\n  private executeAction(execution: KeyboardControlParams, key: string, keyboardEvent: KeyboardEvent) {\n    if (!this._currentDefinitions) {\n      return;\n    }\n\n    const params = this.getParams(execution.params, keyboardEvent);\n\n    if (typeof execution.action == 'number') {\n      const predefinedAction = PREDEFINED_KEYBOARD_ACTIONS[execution.action as number];\n\n      if (predefinedAction) {\n        predefinedAction(this.cesiumService, params, keyboardEvent);\n      }\n    } else if (typeof execution.action === 'function') {\n      const shouldCancelEvent = execution.action(this.cesiumService, params, keyboardEvent);\n\n      if (shouldCancelEvent === false) {\n        this._activeDefinitions[key] = {\n          state: KeyEventState.IGNORED,\n          action: null,\n          keyboardEvent: null,\n        };\n      }\n    }\n  }\n\n  /**\n   * Registers to keydown, keyup of `document`, and `tick` of Cesium.\n   */\n  private registerEvents(outsideOfAngularZone: boolean) {\n    const registerToEvents = () => {\n      this.document.addEventListener('keydown', this.handleKeydown);\n      this.document.addEventListener('keyup', this.handleKeyup);\n      this.cesiumService.getViewer().clock.onTick.addEventListener(this.handleTick);\n    };\n\n    if (outsideOfAngularZone) {\n      this.ngZone.runOutsideAngular(registerToEvents);\n    } else {\n      registerToEvents();\n    }\n  }\n\n  /**\n   * Unregisters to keydown, keyup of `document`, and `tick` of Cesium.\n   */\n  private unregisterEvents() {\n    this.document.removeEventListener('keydown', this.handleKeydown);\n    this.document.removeEventListener('keyup', this.handleKeyup);\n    this.cesiumService.getViewer().clock.onTick.removeEventListener(this.handleTick);\n  }\n}\n","import { Observable, Subscriber } from 'rxjs';\nimport { CesiumEvent } from '../consts/cesium-event.enum';\nimport { CesiumEventModifier } from '../consts/cesium-event-modifier.enum';\n\nexport class CesiumPureEventObserver {\n  public observer: Observable<any>;\n\n  constructor(protected event: CesiumEvent, protected modifier: CesiumEventModifier) {\n  }\n\n  init(eventsHandler: any): Observable<any> {\n    this.observer = Observable.create((observer: Subscriber<any>) => {\n        eventsHandler.setInputAction((movement: any) => {\n          if (movement.position) {\n            movement.startPosition = movement.position;\n            movement.endPosition = movement.position;\n          }\n          observer.next(movement);\n        }, this.event, this.modifier);\n      }\n    );\n    return this.observer;\n  }\n}\n","import { ConnectableObservable, merge, of as observableOf } from 'rxjs';\nimport { delay, filter, mergeMap, publish, takeUntil, tap } from 'rxjs/operators';\nimport { Cartesian2 } from 'cesium';\nimport { CesiumPureEventObserver } from './cesium-pure-event-observer';\nimport { CesiumEvent } from '../consts/cesium-event.enum';\nimport { CesiumEventModifier } from '../consts/cesium-event-modifier.enum';\nimport { CesiumEventBuilder } from '../cesium-event-builder';\n\nexport class CesiumLongPressObserver extends CesiumPureEventObserver {\n  public static LONG_PRESS_EVENTS_DURATION = 250;\n  public static LONG_PRESS_EVENTS_MIN_DISTANCE_PX = 10;\n\n  constructor(protected event: CesiumEvent,\n              protected modifier: CesiumEventModifier,\n              private eventFactory: CesiumEventBuilder) {\n    super(event, modifier);\n  }\n\n  init(): ConnectableObservable<any> {\n    let startEvent: CesiumEvent;\n    let stopEvent: CesiumEvent;\n\n    if (this.event === CesiumEvent.LONG_LEFT_PRESS) {\n      startEvent = CesiumEvent.LEFT_DOWN;\n      stopEvent = CesiumEvent.LEFT_UP;\n    } else if (this.event === CesiumEvent.LONG_RIGHT_PRESS) {\n      startEvent = CesiumEvent.RIGHT_DOWN;\n      stopEvent = CesiumEvent.RIGHT_UP;\n    } else if (this.event === CesiumEvent.LONG_MIDDLE_PRESS) {\n      startEvent = CesiumEvent.MIDDLE_DOWN;\n      stopEvent = CesiumEvent.MIDDLE_UP;\n    }\n\n    // Save start event position\n    let startEventPosition: Cartesian2 = null;\n    const startEventObservable = this.eventFactory.get(startEvent, this.modifier)\n      .pipe(tap((movement) => (startEventPosition = movement.endPosition)));\n\n    // Prevent drag mistaken for long press by observing mouse move far from start event position\n    const mouseMoveEventObservable = this.eventFactory.get(CesiumEvent.MOUSE_MOVE)\n      .pipe(\n        filter((movement) => \n          Math.abs(movement.endPosition.x - startEventPosition.x) > CesiumLongPressObserver.LONG_PRESS_EVENTS_MIN_DISTANCE_PX ||\n          Math.abs(movement.endPosition.y - startEventPosition.y) > CesiumLongPressObserver.LONG_PRESS_EVENTS_MIN_DISTANCE_PX\n        )\n      );\n\n    const stopEventObservable = merge(\n      this.eventFactory.get(stopEvent, this.modifier),\n      mouseMoveEventObservable \n    );\n\n    // publish for preventing side effect\n    const longPressObservable = publish()(startEventObservable.pipe(\n      mergeMap((e) => observableOf(e).pipe(\n        delay(CesiumLongPressObserver.LONG_PRESS_EVENTS_DURATION),\n        takeUntil(stopEventObservable))),\n    ));\n    return longPressObservable;\n  }\n}\n","import { publish } from 'rxjs/operators';\nimport { CesiumService } from '../cesium/cesium.service';\nimport { CesiumEvent } from './consts/cesium-event.enum';\nimport { CesiumEventModifier } from './consts/cesium-event-modifier.enum';\nimport { Injectable } from '@angular/core';\nimport { CesiumPureEventObserver } from './event-observers/cesium-pure-event-observer';\nimport { CesiumLongPressObserver } from './event-observers/cesium-long-press-observer';\nimport { ConnectableObservable } from 'rxjs';\n\n@Injectable()\nexport class CesiumEventBuilder {\n\n  constructor(private cesiumService: CesiumService) {\n  }\n\n  public static longPressEvents: Set<CesiumEvent> = new Set([\n    CesiumEvent.LONG_LEFT_PRESS,\n    CesiumEvent.LONG_RIGHT_PRESS,\n    CesiumEvent.LONG_MIDDLE_PRESS\n  ]);\n\n  private eventsHandler: any;\n  private cesiumEventsObservables = new Map<string, ConnectableObservable<any>>();\n\n  public static getEventFullName(event: CesiumEvent, modifier?: CesiumEventModifier): string {\n    if (modifier) {\n      return `${event}_${modifier}`;\n    } else {\n      return event.toString();\n    }\n  }\n\n  init() {\n    this.eventsHandler = this.cesiumService.getViewer().screenSpaceEventHandler;\n  }\n\n  get(event: CesiumEvent, modifier?: CesiumEventModifier): ConnectableObservable<any> {\n    const eventName = CesiumEventBuilder.getEventFullName(event, modifier);\n    if (this.cesiumEventsObservables.has(eventName)) {\n      return this.cesiumEventsObservables.get(eventName);\n    } else {\n      const eventObserver = this.createCesiumEventObservable(event, modifier);\n      this.cesiumEventsObservables.set(eventName, eventObserver);\n      return eventObserver;\n    }\n  }\n\n  private createCesiumEventObservable(event: CesiumEvent, modifier?: CesiumEventModifier): ConnectableObservable<any> {\n    let cesiumEventObservable: ConnectableObservable<any>;\n    if (CesiumEventBuilder.longPressEvents.has(event)) {\n      cesiumEventObservable = this.createSpecialCesiumEventObservable(event, modifier);\n    } else {\n      cesiumEventObservable = publish()(new CesiumPureEventObserver(event, modifier).init(this.eventsHandler));\n    }\n    cesiumEventObservable.connect();\n    return cesiumEventObservable;\n  }\n\n  private createSpecialCesiumEventObservable(event: CesiumEvent, modifier: CesiumEventModifier): ConnectableObservable<any> {\n    // could support more events if needed\n    return new CesiumLongPressObserver(event, modifier, this).init();\n  }\n}\n\n","export const UtilsService = {\n  unique: (array: any[]): any[] => {\n    return array.reduce((accumulator, currentValue) => {\n      if (accumulator.indexOf(currentValue) < 0) {\n        accumulator.push(currentValue);\n      }\n      return accumulator;\n    }, []);\n  }\n};\n\n","import { CesiumEvent } from '../consts/cesium-event.enum';\n\nexport class CesiumDragDropHelper {\n\n  public static dragEvents: Set<CesiumEvent> = new Set([\n    CesiumEvent.LEFT_CLICK_DRAG,\n    CesiumEvent.RIGHT_CLICK_DRAG,\n    CesiumEvent.MIDDLE_CLICK_DRAG\n  ]);\n\n\n  public static getDragEventTypes(dragEvent: CesiumEvent) {\n    let mouseDownEvent;\n    let mouseUpEvent;\n    if (dragEvent === CesiumEvent.LEFT_CLICK_DRAG) {\n      mouseDownEvent = CesiumEvent.LEFT_DOWN;\n      mouseUpEvent = CesiumEvent.LEFT_UP;\n    } else if (dragEvent === CesiumEvent.RIGHT_CLICK_DRAG) {\n      mouseDownEvent = CesiumEvent.RIGHT_DOWN;\n      mouseUpEvent = CesiumEvent.RIGHT_UP;\n    } else if (dragEvent === CesiumEvent.MIDDLE_CLICK_DRAG) {\n      mouseDownEvent = CesiumEvent.MIDDLE_DOWN;\n      mouseUpEvent = CesiumEvent.MIDDLE_UP;\n    }\n\n    return {mouseDownEvent, mouseUpEvent};\n  }\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { AcEntity } from '../../models/ac-entity';\nimport { Subject } from 'rxjs';\nimport { EventResult, Movement } from '../map-events-mananger/map-events-manager';\n\n/**\n * Service for solving plonter.\n * Used by map-event-manager and plonter context component\n */\n@Injectable()\nexport class PlonterService {\n  private _plonterShown: boolean;\n  private _entitesToPlonter: AcEntity[] = [];\n  private _plonterObserver: Subject<EventResult>;\n  private _eventResult: EventResult;\n  private _plonterChangeNotifier: EventEmitter<any> = new EventEmitter();\n\n  constructor() {\n    this._plonterObserver = new Subject<EventResult>();\n  }\n\n  get plonterChangeNotifier(): EventEmitter<any> {\n    return this._plonterChangeNotifier;\n  }\n\n  get plonterShown(): boolean {\n    return this._plonterShown;\n  }\n\n  get entitesToPlonter(): AcEntity[] {\n    return this._entitesToPlonter;\n  }\n\n  get plonterClickPosition(): Movement {\n    return this._eventResult.movement;\n  }\n\n  plonterIt(eventResult: EventResult) {\n    this._eventResult = eventResult;\n    this._entitesToPlonter = eventResult.entities;\n    this._plonterShown = true;\n\n    this._plonterChangeNotifier.emit();\n    return this._plonterObserver;\n  }\n\n  resolvePlonter(entity: AcEntity) {\n    this._plonterShown = false;\n    this._eventResult.entities = [entity];\n\n    this._plonterChangeNotifier.emit();\n    this._plonterObserver.next(this._eventResult);\n  }\n}\n","import { merge, Observable, of as observableOf, Subject } from 'rxjs';\n\nimport { filter, map, mergeMap, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { Entity } from 'cesium';\nimport { CesiumService } from '../cesium/cesium.service';\nimport { CesiumEventBuilder } from './cesium-event-builder';\nimport { EventRegistrationInput, PickConfiguration } from './event-registration-input';\nimport { DisposableObservable } from './disposable-observable';\nimport { PickOptions } from './consts/pickOptions.enum';\nimport { CesiumEvent } from './consts/cesium-event.enum';\nimport { PlonterService } from '../plonter/plonter.service';\nimport { UtilsService } from '../../utils/utils.service';\nimport { CesiumDragDropHelper } from './event-observers/cesium-drag-drop-helper';\n\nclass Registration {\n  constructor(public observable: Observable<EventResult>,\n              public  stopper: Subject<any>,\n              public  priority: number,\n              public  isPaused: boolean) {\n  }\n}\n\n/**\n * Returns screen position, drag boolean for drag events only\n */\nexport interface Movement {\n  startPosition: { x: number, y: number };\n  endPosition: { x: number, y: number };\n  drop?: boolean;\n}\n\nexport interface EventResult {\n  movement: Movement;\n  cesiumEntities: any[];\n  entities: any[];\n}\n\n/**\n * Manages all map events. Notice events will run outside of Angular zone.\n * Provided by `<ac-map/>` component there for could be injected at any component under `<ac-map/>` hierarchy\n * or from the `<ac-map/>` component reference `acMapComponent.getMapEventsManager()`\n *\n * __usage:__\n * ```\n * MapEventsManagerService.register({event, modifier, priority, entityType, pickOption}).subscribe()\n * ```\n * __param:__ {CesiumEvent} event\n * __param:__ {CesiumEventModifier} modifier\n * __param:__ priority - the bigger the number the bigger the priority. default : 0.\n * __param:__ entityType - entity type class that you are interested like (Track). the class must extends AcEntity\n * __param:__ pickOption - self explained\n */\n@Injectable()\nexport class MapEventsManagerService {\n\n  private scene: any;\n  private eventRegistrations = new Map<string, Registration[]>();\n\n  constructor(private cesiumService: CesiumService,\n              private eventBuilder: CesiumEventBuilder,\n              private plonterService: PlonterService) {\n  }\n\n  init() {\n    this.eventBuilder.init();\n    this.scene = this.cesiumService.getScene();\n  }\n\n  /**\n   * Register to map event\n   * @param input Event Registration Input\n   *\n   * @returns DisposableObservable<EventResult>\n   */\n  register(input: EventRegistrationInput): DisposableObservable<EventResult> {\n    if (this.scene === undefined) {\n      throw new Error('CesiumService has not been initialized yet - MapEventsManagerService must be injected  under ac-map');\n    }\n\n    input.pick = input.pick || PickOptions.NO_PICK;\n    input.priority = input.priority || 0;\n    input.pickConfig = input.pickConfig || {};\n\n    if (input.entityType && input.pick === PickOptions.NO_PICK) {\n      throw new Error('MapEventsManagerService: can\\'t register an event ' +\n        'with entityType and PickOptions.NO_PICK - It doesn\\'t make sense ');\n    }\n\n    const eventName = CesiumEventBuilder.getEventFullName(input.event, input.modifier);\n\n    if (!this.eventRegistrations.has(eventName)) {\n      this.eventRegistrations.set(eventName, []);\n    }\n\n    const eventRegistration = this.createEventRegistration(input);\n    const registrationObservable: any = eventRegistration.observable;\n    registrationObservable.dispose = () => this.disposeObservable(eventRegistration, eventName);\n    this.eventRegistrations.get(eventName).push(eventRegistration);\n\n    this.sortRegistrationsByPriority(eventName);\n    return <DisposableObservable<EventResult>>registrationObservable;\n  }\n\n  private disposeObservable(eventRegistration: Registration, eventName: string) {\n    eventRegistration.stopper.next(1);\n    const registrations = this.eventRegistrations.get(eventName);\n    const index = registrations.indexOf(eventRegistration);\n    if (index !== -1) {\n      registrations.splice(index, 1);\n    }\n    this.sortRegistrationsByPriority(eventName);\n  }\n\n  private sortRegistrationsByPriority(eventName: string) {\n    const registrations = this.eventRegistrations.get(eventName);\n    registrations.sort((a, b) => b.priority - a.priority);\n    if (registrations.length === 0) {\n      return;\n    }\n\n    // Active registrations by priority\n    const currentPriority = registrations[0].priority;\n    registrations.forEach((registration) => {\n      registration.isPaused = registration.priority < currentPriority;\n    });\n\n  }\n\n  private createEventRegistration({\n                                    event,\n                                    modifier,\n                                    entityType,\n                                    pick: pickOption,\n                                    priority,\n                                    pickFilter,\n                                    pickConfig,\n                                  }: EventRegistrationInput): Registration {\n    const cesiumEventObservable = this.eventBuilder.get(event, modifier);\n    const stopper = new Subject<any>();\n\n    const registration = new Registration(undefined, stopper, priority, false);\n    let observable: Observable<EventResult>;\n\n    if (!CesiumDragDropHelper.dragEvents.has(event)) {\n      observable = cesiumEventObservable.pipe(\n        filter(() => !registration.isPaused),\n        map((movement) => this.triggerPick(movement, pickOption, pickConfig)),\n        filter((result) => result.cesiumEntities !== null || entityType === undefined),\n        map((picksAndMovement) => this.addEntities(picksAndMovement, entityType, pickOption, pickFilter)),\n        filter((result) => result.entities !== null || (entityType === undefined && !pickFilter)),\n        switchMap((entitiesAndMovement) => this.plonter(entitiesAndMovement, pickOption)),\n        takeUntil(stopper));\n    } else {\n      observable = this.createDragEvent({\n        event,\n        modifier,\n        entityType,\n        pick: pickOption,\n        priority,\n        pickFilter,\n        pickConfig\n      }).pipe(takeUntil(stopper));\n    }\n\n    registration.observable = observable;\n    return registration;\n  }\n\n  private createDragEvent({\n                            event,\n                            modifier,\n                            entityType,\n                            pick: pickOption,\n                            priority,\n                            pickFilter,\n                            pickConfig,\n                          }: EventRegistrationInput): Observable<EventResult> {\n    const { mouseDownEvent, mouseUpEvent } = CesiumDragDropHelper.getDragEventTypes(event);\n\n    const mouseUpObservable = this.eventBuilder.get(mouseUpEvent);\n    const mouseMoveObservable = this.eventBuilder.get(CesiumEvent.MOUSE_MOVE);\n\n    const mouseDownRegistration = this.createEventRegistration({\n      event: mouseDownEvent,\n      modifier,\n      entityType,\n      pick: pickOption,\n      priority,\n      pickFilter,\n      pickConfig,\n    });\n\n    const dropSubject = new Subject<EventResult>();\n    const dragObserver = mouseDownRegistration.observable.pipe(mergeMap(e => {\n      let lastMove: any = null;\n      const dragStartPositionX = e.movement.startPosition.x;\n      const dragStartPositionY = e.movement.startPosition.y;\n      return mouseMoveObservable.pipe(map((movement) => {\n        lastMove = {\n          movement: {\n            drop: false,\n            startPosition: {\n              x: dragStartPositionX,\n              y: dragStartPositionY,\n            },\n            endPosition: movement.endPosition,\n          },\n          entities: e.entities,\n          cesiumEntities: e.cesiumEntities\n        };\n        return lastMove;\n      }), takeUntil(mouseUpObservable), tap({\n        complete: () => {\n          // On complete\n          if (lastMove) {\n            const dropEvent = Object.assign({}, lastMove);\n            dropEvent.movement.drop = true;\n            dropSubject.next(dropEvent);\n          }\n        }\n      }));\n    }));\n\n    return merge(dragObserver, dropSubject);\n\n  }\n\n  private triggerPick(movement: any, pickOptions: PickOptions, pickConfig: PickConfiguration) {\n    let picks: any = [];\n    switch (pickOptions) {\n      case PickOptions.PICK_ONE:\n      case PickOptions.PICK_ALL:\n        picks = this.scene.drillPick(movement.endPosition, pickConfig.drillPickLimit, pickConfig.pickWidth, pickConfig.pickHeight);\n        picks = picks.length === 0 ? null : picks;\n        break;\n      case PickOptions.PICK_FIRST:\n        const pick = this.scene.pick(movement.endPosition, pickConfig.pickWidth, pickConfig.pickHeight);\n        picks = pick === undefined ? null : [pick];\n        break;\n      case PickOptions.NO_PICK:\n        break;\n      default:\n        break;\n    }\n\n    // Picks can be cesium entity or cesium primitive\n    if (picks) {\n      picks = picks.map((pick: any) => pick.id && pick.id instanceof Entity ? pick.id : pick.primitive);\n    }\n\n    return { movement: movement, cesiumEntities: picks };\n  }\n\n  private addEntities(picksAndMovement: any, entityType: any, pickOption: PickOptions, pickFilter?: (any) => boolean): EventResult {\n\n    if (picksAndMovement.cesiumEntities === null) {\n      picksAndMovement.entities = null;\n      return picksAndMovement;\n    }\n    let entities = [];\n    if (pickOption !== PickOptions.NO_PICK) {\n      if (entityType) {\n        entities = picksAndMovement.cesiumEntities.map((pick: any) => pick.acEntity).filter((acEntity: any) => {\n          return acEntity && acEntity instanceof entityType;\n        });\n      } else {\n        entities = picksAndMovement.cesiumEntities.map((pick: any) => pick.acEntity);\n      }\n\n      entities = UtilsService.unique(entities);\n      entities = (pickFilter && entities) ? entities.filter(pickFilter) : entities;\n      if (entities.length === 0) {\n        entities = null;\n      }\n    }\n\n    picksAndMovement.entities = entities;\n\n    return picksAndMovement;\n  }\n\n  private plonter(entitiesAndMovement: EventResult, pickOption: PickOptions): Observable<EventResult> {\n    if (pickOption === PickOptions.PICK_ONE && entitiesAndMovement.entities !== null && entitiesAndMovement.entities.length > 1) {\n      return this.plonterService.plonterIt(entitiesAndMovement);\n    } else {\n      return observableOf(entitiesAndMovement);\n    }\n  }\n}\n","import { CesiumService } from '../cesium/cesium.service';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class MapLayersService {\n\n  private layersDataSources: any[] = [];\n\n  constructor(private cesiumService: CesiumService) {\n\n  }\n\n  registerLayerDataSources(dataSources: any[], zIndex: number) {\n    dataSources.forEach(ds => {\n      ds.zIndex = zIndex;\n      this.layersDataSources.push(ds);\n    });\n  }\n\n  drawAllLayers() {\n    this.layersDataSources.sort((a, b) => a.zIndex - b.zIndex);\n\n    this.layersDataSources.forEach((dataSource) => {\n      this.cesiumService.getViewer().dataSources.add(dataSource);\n    });\n  }\n\n  updateAndRefresh(dataSources: any[], newZIndex: number) {\n    if (dataSources && dataSources.length) {\n      dataSources.forEach((ds) => {\n        const index = this.layersDataSources.indexOf(ds);\n        if (index !== -1) {\n          this.layersDataSources[index].zIndex = newZIndex;\n        }\n      });\n\n      this.cesiumService.getViewer().dataSources.removeAll();\n      this.drawAllLayers();\n    }\n  }\n\n  removeDataSources(dataSources: any[]) {\n    dataSources.forEach(ds => {\n      const index = this.layersDataSources.indexOf(ds);\n      if (index !== -1) {\n        this.layersDataSources.splice(index, 1);\n        this.cesiumService.getViewer().dataSources.remove(ds, true);\n      }\n    });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { CesiumService } from '../cesium/cesium.service';\n\n/**\n * Take screenshot of your cesium globe.\n *\n * usage:\n * ```typescript\n * // get base 64 data url\n * const dataUrl = screenshotService.getMapScreenshotDataUrl();\n *\n * // or download as png\n * screenshotService.downloadMapScreenshot('my-map.png');\n *\n * ```\n *\n */\n@Injectable()\nexport class ScreenshotService {\n  constructor(private cesiumService: CesiumService) {\n  }\n\n  getMapScreenshotDataUrlBase64() {\n    const canvas = this.cesiumService.getCanvas();\n    return canvas.toDataURL();\n  }\n\n\n  downloadMapScreenshot(filename = 'map.png') {\n    const dataUrl = this.getMapScreenshotDataUrlBase64();\n    this.downloadURI(dataUrl, filename);\n  }\n\n  private downloadURI(uri: string, name: string) {\n    const link = document.createElement('a');\n    link.download = name;\n    link.href = uri;\n    document.body.appendChild(link);\n    link.click();\n    document.body.removeChild(link);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Ellipsoid, SceneMode, Cartographic } from 'cesium';\nimport { AcMapComponent } from '../../components/ac-map/ac-map.component';\n\n/**\n *  The service manages `ac-map` instances. `ac-map` register itself to this service.\n *  This allows retrieval of maps provided services outside of `ac-map` scope.\n */\n@Injectable()\nexport class MapsManagerService {\n  private defaultIdCounter = 0;\n  private _Maps = new Map<string, AcMapComponent>();\n  private firstMap: any;\n  private eventRemoveCallbacks: Function[] = [];\n\n  constructor() {\n  }\n\n  getMap(id?: string): AcMapComponent | undefined {\n    if (!id) {\n      return this.firstMap;\n    }\n    return this._Maps.get(id);\n  }\n\n  _registerMap(id: string, acMap: AcMapComponent): string {\n    if (!this.firstMap) {\n      this.firstMap = acMap;\n    }\n\n    const mapId = id ? id : this.generateDefaultId();\n    if (this._Maps.has(mapId)) {\n      throw new Error(`Map with id: ${mapId} already exist`);\n    }\n    this._Maps.set(mapId, acMap);\n    return mapId;\n  }\n\n  _removeMapById(id: string) {\n    return this._Maps.delete(id);\n  }\n\n  private generateDefaultId(): string {\n    this.defaultIdCounter++;\n    return 'default-map-id-' + this.defaultIdCounter;\n  }\n\n  /**\n   * Binds multiple 2D map's cameras together.\n   * @param mapsConfiguration - binding options.\n   * mapId - the id of the maps to bind.\n   * sensitivity - the amount the camera position should change in order to sync other maps.\n   * bindZoom - should bind zoom level\n   */\n  sync2DMapsCameras(mapsConfiguration: { id: string; sensitivity?: number; bindZoom?: boolean }[]) {\n    const DEFAULT_SENSITIVITY = 0.01;\n    this.unsyncMapsCameras();\n    const maps: { map: AcMapComponent; options?: { sensitivity?: number; bindZoom?: boolean } }[] = mapsConfiguration.map(config => {\n      const map = this.getMap(config.id);\n      if (!map) {\n        throw new Error(`Couldn't find map with id: ${config.id}`);\n      }\n\n      return {map, options: {sensitivity: config.sensitivity, bindZoom: config.bindZoom}};\n    });\n\n    maps.forEach(masterMapConfig => {\n      const masterMap = masterMapConfig.map;\n      const options = masterMapConfig.options;\n      const masterCamera = masterMap.getCameraService().getCamera();\n      const masterCameraCartographic = masterCamera.positionCartographic;\n      masterCamera.percentageChanged = options.sensitivity || DEFAULT_SENSITIVITY;\n      const removeCallback = masterCamera.changed.addEventListener(() => {\n        maps.forEach(slaveMapConfig => {\n          const slaveMap = slaveMapConfig.map;\n          const slaveMapOptions = slaveMapConfig.options;\n          if (slaveMap === masterMap) {\n            return;\n          }\n\n          const slaveCamera = slaveMap.getCameraService().getCamera();\n          const slaveCameraCartographic = slaveCamera.positionCartographic;\n          const position = Ellipsoid.WGS84.cartographicToCartesian(\n            new Cartographic(\n                masterCameraCartographic.longitude,\n                masterCameraCartographic.latitude,\n                slaveMapOptions.bindZoom ? masterCameraCartographic.height : slaveCameraCartographic.height)\n          );\n\n          if (slaveMap.getCesiumViewer().scene.mode !== SceneMode.MORPHING) {\n            slaveCamera.setView({\n              destination: position,\n              orientation: {\n                heading: slaveCamera.heading,\n                pitch: slaveCamera.pitch,\n              },\n            });\n          }\n        });\n      });\n      this.eventRemoveCallbacks.push(removeCallback);\n    });\n  }\n\n  /**\n   * Unsyncs maps cameras\n   */\n  unsyncMapsCameras() {\n    this.eventRemoveCallbacks.forEach(removeCallback => removeCallback());\n    this.eventRemoveCallbacks = [];\n  }\n}\n","import { Component, DoCheck, ElementRef, Input, OnDestroy, OnInit, Renderer2 } from '@angular/core';\nimport { SceneTransforms } from 'cesium';\nimport { CesiumService } from '../../services/cesium/cesium.service';\n\n/**\n *  This is an html implementation.\n *  The ac-html element must be a child of ac-map element.\n *  __Usage:__\n *  ```\n *  <ac-html [props]=\"{position: position, show: true}\">;\n *    <p>html element</p>\n *  </ac-html>\n *  ```\n */\n\n@Component({\n    selector: 'ac-html',\n    template: `<ng-content></ng-content>`,\n    styles: [`:host {\n                position: absolute;\n                z-index: 100;\n\t\t\t\t}`],\n    standalone: false\n})\nexport class AcHtmlComponent implements DoCheck, OnDestroy, OnInit {\n\n\n  @Input() props: any;\n  private isDraw = false;\n  preRenderEventListener: () => void;\n\n  constructor(private cesiumService: CesiumService, private elementRef: ElementRef, private renderer: Renderer2) {\n  }\n\n  setScreenPosition(screenPosition: any) {\n    if (screenPosition) {\n      this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${screenPosition.y}px`);\n      this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${screenPosition.x}px`);\n    }\n  }\n\n  ngOnInit(): void {\n    this.cesiumService.getMapContainer().appendChild(this.elementRef.nativeElement);\n    if (this.props.show === false) {\n      this.hideElement();\n    }\n  }\n\n  remove() {\n    if (this.isDraw) {\n      this.isDraw = false;\n      this.cesiumService.getScene().preRender.removeEventListener(this.preRenderEventListener);\n      this.hideElement();\n    }\n  }\n\n  hideElement() {\n    this.renderer.setStyle(this.elementRef.nativeElement, 'display', `none`);\n  }\n\n  add() {\n    if (!this.isDraw) {\n      this.isDraw = true;\n      this.preRenderEventListener = () => {\n        const screenPosition = SceneTransforms.worldToWindowCoordinates(this.cesiumService.getScene(),\n          this.props.position);\n        this.setScreenPosition(screenPosition);\n      };\n      this.renderer.setStyle(this.elementRef.nativeElement, 'display', `block`);\n      this.cesiumService.getScene().preRender.addEventListener(this.preRenderEventListener);\n    }\n  }\n\n  ngDoCheck() {\n    if (this.props.show === undefined || this.props.show) {\n      this.add();\n    } else {\n      this.remove();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.remove();\n  }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { PlonterService } from '../../services/plonter/plonter.service';\nimport { CoordinateConverter } from '../../services/coordinate-converter/coordinate-converter.service';\n\n@Component(\n  {\n    selector: 'ac-default-plonter',\n    template: `\n      <ac-html *ngIf=\"plonterService.plonterShown\" [props]=\"{\n        position: plonterPosition\n      }\">\n        <div class=\"plonter-context-menu\">\n          <div *ngFor=\"let entity of plonterService.entitesToPlonter\">\n            <div class=\"plonter-item\" (click)=\"chooseEntity(entity)\">{{ entity?.name || entity?.id }}\n            </div>\n          </div>\n        </div>\n      </ac-html>\n    `,\n    styles: [`\n        .plonter-context-menu {\n            background-color: rgba(250, 250, 250, 0.8);\n            box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.15);\n        }\n\n        .plonter-item {\n            cursor: pointer;\n            padding: 2px 15px;\n            text-align: start;\n        }\n\n        .plonter-item:hover {\n            background-color: rgba(0, 0, 0, 0.15);\n        }\n\n    `],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [CoordinateConverter],\n    standalone: false\n}\n)\nexport class AcDefaultPlonterComponent implements OnInit {\n\n  constructor(public plonterService: PlonterService,\n              private cd: ChangeDetectorRef,\n              private geoConverter: CoordinateConverter) {\n  }\n\n  ngOnInit() {\n    this.plonterService.plonterChangeNotifier.subscribe(() => this.cd.detectChanges());\n  }\n\n  get plonterPosition() {\n    if (this.plonterService.plonterShown) {\n      const screenPos = this.plonterService.plonterClickPosition.endPosition;\n      return this.geoConverter.screenToCartesian3(screenPos);\n    }\n  }\n\n  chooseEntity(entity: any) {\n    this.plonterService.resolvePlonter(entity);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ComponentFactoryResolver,\n  OnDestroy,\n  OnInit,\n  ViewChild,\n  ViewContainerRef\n} from '@angular/core';\nimport { ContextMenuService } from '../../services/context-menu/context-menu.service';\nimport { Subscription } from 'rxjs';\nimport { BasicContextMenu } from '../../models/basic-context-menu';\n\n/**\n * This component is used to inject the component that is passed to the ContextMenuService when opening a context menu.\n * It shouldn't be used directly.\n *\n * usage:\n * ```typescript\n * // We want to open the context menu on mouse right click.\n * // Register to mouse right click with the MapEventsManager\n * this.mapEventsManager.register({ event: CesiumEvent.RIGHT_CLICK, pick: PickOptions.NO_PICK })\n *    .subscribe(event => {\n *       const position = this.coordinateConverter.screenToCartesian3(event.movement.endPosition, true);\n *       if (!position) {\n *         return;\n *       }\n *       // Open the context menu on the position that was clicked and pass some data to MyCustomContextMenuComponent.\n *       this.contextMenuService.open(\n *         MyCustomContextMenuComponent,\n *         position,\n *         { data: { items: ['New Track', 'Change Map', 'Context Menu', 'Do Something'] } }\n *       )\n *    });\n *\n * ```\n */\n\n@Component({\n    selector: 'ac-context-menu-wrapper',\n    template: `\n    <ac-html *ngIf=\"contextMenuService.showContextMenu\" [props]=\"{position: contextMenuService.position}\">\n      <ng-template #contextMenuContainer></ng-template>\n    </ac-html>\n  `,\n    styles: [],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class AcContextMenuWrapperComponent implements OnInit, OnDestroy {\n\n  private contextMenuChangeSubscription: Subscription;\n  private contextMenuOpenSubscription: Subscription;\n\n  @ViewChild('contextMenuContainer', { read: ViewContainerRef }) viewContainerRef: ViewContainerRef;\n\n  constructor(public contextMenuService: ContextMenuService,\n              private cd: ChangeDetectorRef,\n              private componentFactoryResolver: ComponentFactoryResolver) {\n  }\n\n  ngOnInit() {\n    this.contextMenuChangeSubscription =\n      this.contextMenuService.contextMenuChangeNotifier.subscribe(() => this.cd.detectChanges());\n    this.contextMenuOpenSubscription =\n      this.contextMenuService.onOpen.subscribe(() => {\n        const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.contextMenuService.content as any);\n        this.viewContainerRef.clear();\n        const componentRef = this.viewContainerRef.createComponent(componentFactory);\n        (componentRef.instance as BasicContextMenu).data = this.contextMenuService.options.data;\n        this.cd.detectChanges();\n      });\n  }\n\n  ngOnDestroy(): void {\n    if (this.contextMenuChangeSubscription) {\n      this.contextMenuChangeSubscription.unsubscribe();\n    }\n\n    if (this.contextMenuOpenSubscription) {\n      this.contextMenuOpenSubscription.unsubscribe();\n    }\n  }\n}\n","\nimport { AfterViewInit, Component, ElementRef, Inject, Input, OnChanges, OnDestroy, OnInit, SimpleChanges, DOCUMENT } from '@angular/core';\nimport { CesiumService } from '../../services/cesium/cesium.service';\nimport { SceneMode } from '../../models/scene-mode.enum';\nimport { CameraService } from '../../services/camera/camera.service';\nimport { ContextMenuService } from '../../services/context-menu/context-menu.service';\nimport { CoordinateConverter } from '../../services/coordinate-converter/coordinate-converter.service';\nimport { ArcDrawerService } from '../../services/drawers/arc-drawer/arc-drawer.service';\nimport { BillboardDrawerService } from '../../services/drawers/billboard-drawer/billboard-drawer.service';\nimport { CzmlDrawerService } from '../../services/drawers/czml-drawer/czml-drawer.service';\nimport { EllipseDrawerService } from '../../services/drawers/ellipse-drawer/ellipse-drawer.service';\nimport { LabelDrawerService } from '../../services/drawers/label-drawer/label-drawer.service';\nimport { PointDrawerService } from '../../services/drawers/point-drawer/point-drawer.service';\nimport { PolygonDrawerService } from '../../services/drawers/polygon-drawer/polygon-drawer.service';\nimport { PolylineDrawerService } from '../../services/drawers/polyline-drawer/polyline-drawer.service';\nimport { PolylinePrimitiveDrawerService } from '../../services/drawers/polyline-primitive-drawer/polyline-primitive-drawer.service';\nimport { KeyboardControlService } from '../../services/keyboard-control/keyboard-control.service';\nimport { CesiumEventBuilder } from '../../services/map-events-mananger/cesium-event-builder';\nimport { MapEventsManagerService } from '../../services/map-events-mananger/map-events-manager';\nimport { MapLayersService } from '../../services/map-layers/map-layers.service';\nimport { MapsManagerService } from '../../services/maps-manager/maps-manager.service';\nimport { PlonterService } from '../../services/plonter/plonter.service';\nimport { ScreenshotService } from '../../services/screenshot/screenshot.service';\n\n/**\n * This is a map implementation, creates the cesium map.\n * Every layer should be tag inside ac-map tag\n *\n * Accessing cesium viewer:\n * 1. acMapComponent.getCesiumViewer()\n * 2. Use MapManagerService.getMap().getCesiumViewer() or if more then one map: MapManagerService.getMap(mapId).getCesiumViewer()\n *\n *\n * @example\n * <ac-map>\n *     <ac-map-layer-provider></ac-map-layer-provider>\n *     <dynamic-ellipse-layer #layer></dynamic-ellipse-layer>\n * </ac-map>\n */\n@Component({\n    selector: 'ac-map',\n    template: `\n    <ac-default-plonter *ngIf=\"!disableDefaultPlonter\"></ac-default-plonter>\n    <ac-context-menu-wrapper></ac-context-menu-wrapper>\n    <ng-content></ng-content>\n  `,\n    providers: [\n        CesiumService,\n        BillboardDrawerService,\n        CesiumEventBuilder,\n        KeyboardControlService,\n        MapEventsManagerService,\n        PlonterService,\n        LabelDrawerService,\n        PolylineDrawerService,\n        PolylinePrimitiveDrawerService,\n        EllipseDrawerService,\n        PointDrawerService,\n        ArcDrawerService,\n        CzmlDrawerService,\n        PolygonDrawerService,\n        MapLayersService,\n        CameraService,\n        ScreenshotService,\n        ContextMenuService,\n        CoordinateConverter,\n    ],\n    standalone: false\n})\nexport class AcMapComponent implements OnChanges, OnInit, AfterViewInit, OnDestroy {\n  /**\n   * Disable default plonter context menu\n   */\n  @Input()\n  disableDefaultPlonter = false;\n\n  /**\n   * Set the id name of the map\n   * default: 'default-map-id-[index]'\n   */\n  @Input()\n  mapId: string;\n\n  /**\n   * flyTo options according to https://cesiumjs.org/Cesium/Build/Documentation/Camera.html?classFilter=cam#flyTo\n   */\n  @Input()\n  flyTo: any;\n\n  /**\n   * Sets the map's SceneMode\n   */\n  @Input()\n  sceneMode: SceneMode;\n\n  /**\n   * Optional - the container element's id in which the map's canvas will be appended to.\n   * If not supplied - the container element will be the parent element of ac-map;\n   */\n  @Input()\n  containerId: string;\n\n  private mapContainer: HTMLElement;\n\n  constructor(\n    private _cesiumService: CesiumService,\n    private _cameraService: CameraService,\n    private _elemRef: ElementRef,\n    @Inject(DOCUMENT) private document,\n    private mapsManagerService: MapsManagerService,\n    private billboardDrawerService: BillboardDrawerService,\n    private labelDrawerService: LabelDrawerService,\n    private ellipseDrawerService: EllipseDrawerService,\n    private polylineDrawerService: PolylineDrawerService,\n    private polygonDrawerService: PolygonDrawerService,\n    private arcDrawerService: ArcDrawerService,\n    private pointDrawerService: PointDrawerService,\n    private czmlDrawerService: CzmlDrawerService,\n    private mapEventsManager: MapEventsManagerService,\n    private keyboardControlService: KeyboardControlService,\n    private mapLayersService: MapLayersService,\n    private screenshotService: ScreenshotService,\n    public contextMenuService: ContextMenuService,\n    private coordinateConverter: CoordinateConverter,\n  ) {\n    this.mapContainer = this.document.createElement('div');\n    this.mapContainer.style.width = '100%';\n    this.mapContainer.style.height = '100%';\n    this.mapContainer.className = 'map-container';\n    this._cesiumService.init(this.mapContainer);\n    this._cameraService.init(this._cesiumService);\n    this.mapEventsManager.init();\n    this.billboardDrawerService.init();\n    this.labelDrawerService.init();\n    this.ellipseDrawerService.init();\n    this.polylineDrawerService.init();\n    this.polygonDrawerService.init();\n    this.arcDrawerService.init();\n    this.pointDrawerService.init();\n    this.czmlDrawerService.init();\n    this.keyboardControlService.init();\n    this.contextMenuService.init(this.mapEventsManager);\n  }\n\n  ngOnInit() {\n    this.mapId = this.mapsManagerService._registerMap(this.mapId, this);\n    if (!this.containerId) {\n      this._elemRef.nativeElement.appendChild(this.mapContainer);\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['sceneMode']) {\n      this._cameraService.setSceneMode(changes['sceneMode'].currentValue);\n    }\n    if (changes['flyTo']) {\n      this._cameraService.cameraFlyTo(changes['flyTo'].currentValue);\n    }\n    if (changes['containerId'] && !changes['containerId'].firstChange) {\n      const element = this.document.getElementById(changes['containerId'].currentValue);\n      if (element) {\n        element.appendChild(this.mapContainer);\n      } else {\n        throw new Error(`No element found with id: ${changes['containerId'].currentValue}`);\n      }\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.mapLayersService.drawAllLayers();\n    if (this.containerId) {\n      setTimeout(() => {\n        const element = this.document.getElementById(this.containerId);\n        if (element) {\n          element.appendChild(this.mapContainer);\n        } else {\n          throw new Error(`No element found with id: ${this.containerId}`);\n        }\n      }, 0);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.mapContainer.remove();\n    this.mapsManagerService._removeMapById(this.mapId);\n  }\n\n  /**\n   * @returns ac-map's cesium service\n   */\n  getCesiumService() {\n    return this._cesiumService;\n  }\n\n  /**\n   * @returns map's cesium viewer\n   */\n  getCesiumViewer() {\n    return this._cesiumService.getViewer();\n  }\n\n\n  getCameraService(): CameraService {\n    return this._cameraService;\n  }\n\n  getId() {\n    return this.mapId;\n  }\n\n\n  getMapContainer() {\n    return this.mapContainer;\n  }\n\n\n  getMapEventsManager(): MapEventsManagerService {\n    return this.mapEventsManager;\n  }\n\n  getContextMenuService(): ContextMenuService {\n    return this.contextMenuService;\n  }\n\n  getScreenshotService() {\n    return this.screenshotService;\n  }\n\n  getKeyboardControlService() {\n    return this.keyboardControlService;\n  }\n\n  getCoordinateConverter() {\n    return this.coordinateConverter;\n  }\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { IDescription } from '../../models/description';\nimport { LayerOptions } from '../../models/layer-options';\n\n@Injectable()\nexport class LayerService {\n  private _context: any;\n  private _options: LayerOptions;\n  private _show: boolean;\n  private _zIndex: number;\n  private _entityName: string;\n  private _cache = true;\n  private descriptions: IDescription[] = [];\n  private layerUpdate = new EventEmitter();\n\n  get cache(): boolean {\n    return this._cache;\n  }\n\n  set cache(value: boolean) {\n    this._cache = value;\n  }\n\n  get zIndex(): number {\n    return this._zIndex;\n  }\n\n  set zIndex(value: number) {\n    if (value !== this._zIndex) {\n      this.layerUpdate.emit();\n    }\n    this._zIndex = value;\n  }\n\n  get show(): boolean {\n    return this._show;\n  }\n\n  set show(value: boolean) {\n    if (value !== this._show) {\n      this.layerUpdate.emit();\n    }\n    this._show = value;\n  }\n\n  get options(): LayerOptions {\n    return this._options;\n  }\n\n  set options(value: LayerOptions) {\n    this._options = value;\n    this.layerUpdate.emit();\n  }\n\n  get context(): any {\n    return this._context;\n  }\n\n  set context(context) {\n    this._context = context;\n    this.layerUpdate.emit();\n  }\n\n  setEntityName(name: string) {\n    this._entityName = name;\n  }\n\n  getEntityName(): string {\n    return this._entityName;\n  }\n\n  registerDescription(descriptionComponent: IDescription) {\n    if (this.descriptions.indexOf(descriptionComponent) < 0) {\n      this.descriptions.push(descriptionComponent);\n    }\n  }\n\n  unregisterDescription(descriptionComponent: IDescription) {\n    const index = this.descriptions.indexOf(descriptionComponent);\n    if (index > -1) {\n      this.descriptions.splice(index, 1);\n    }\n  }\n\n  getDescriptions(): IDescription[] {\n    return this.descriptions;\n  }\n\n  layerUpdates(): EventEmitter<any> {\n    return this.layerUpdate;\n  }\n}\n","/**\n * Action to do on entity\n */\nexport enum ActionType {\n  ADD_UPDATE,\n  DELETE\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class ComputationCache {\n  private _cache = new Map<string, any>();\n\n  get(expression: string, insertFn: (() => any)): any {\n    if (this._cache.has(expression)) {\n      return this._cache.get(expression);\n    }\n\n    const value = insertFn();\n    this._cache.set(expression, value);\n    return value;\n  }\n\n  clear() {\n    this._cache.clear();\n  }\n}\n","export class Checker {\n  static throwIfAnyNotPresent(values: Object, propertyNames: string[]) {\n    propertyNames.forEach(propertyName => Checker.throwIfNotPresent(values, propertyName));\n  }\n\n  static throwIfNotPresent(value: any, name: string) {\n    if (!Checker.present(value[name])) {\n      throw new Error(`Error: ${name} was not given.`);\n    }\n  }\n\n  static present(value: any) {\n    return value !== undefined && value !== null;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { PrimitiveCollection } from 'cesium';\nimport { CesiumService } from '../../../cesium/cesium.service';\nimport { Checker } from '../../../../utils/checker';\nimport { EllipsePrimitive } from 'primitive-primitives';\nimport { PrimitivesDrawerService } from '../../primitives-drawer/primitives-drawer.service';\n\n\n/**\n *  This drawer is responsible for creating the dynamic version of the ellipse component.\n *  We are using the primitive-primitives implementation of an ellipse. see: https://github.com/gotenxds/Primitive-primitives\n *  This allows us to change the position of the ellipses without creating a new primitive object\n *  as Cesium does not allow updating an ellipse.\n */\n@Injectable()\nexport class DynamicEllipseDrawerService extends PrimitivesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(PrimitiveCollection, cesiumService);\n  }\n\n  add(cesiumProps: any): any {\n    Checker.throwIfAnyNotPresent(cesiumProps, ['center', 'semiMajorAxis', 'semiMinorAxis']);\n\n    return super.add(new EllipsePrimitive(cesiumProps));\n  }\n\n  update(ellipse: any, cesiumProps: any): any {\n    ellipse.updateLocationData(cesiumProps);\n\n    return ellipse;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { PolylineCollection } from 'cesium';\nimport { CesiumService } from '../../../cesium/cesium.service';\nimport { PrimitivesDrawerService } from '../../primitives-drawer/primitives-drawer.service';\n\n/**\n *  This drawer is responsible for creating the dynamic version of the polyline component.\n */\n@Injectable()\nexport class DynamicPolylineDrawerService extends PrimitivesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(PolylineCollection, cesiumService);\n  }\n}\n","import { PrimitiveCollection, GeometryInstance, Primitive } from 'cesium';\nimport { PrimitivesDrawerService } from '../../primitives-drawer/primitives-drawer.service';\nimport { CesiumService } from '../../../cesium/cesium.service';\n\n/**\n *\n * This drawer is deprecated.\n * General static primitives drawer responsible of drawing static Cesium primitives with material.\n */\nexport abstract class StaticPrimitiveDrawer extends PrimitivesDrawerService {\n  constructor(private geometryType: any, cesiumService: CesiumService) {\n    super(PrimitiveCollection, cesiumService);\n  }\n\n  add(geometryProps: any, instanceProps: any, primitiveProps: any): any {\n    if (Object.keys(instanceProps).length === 0) {\n      throw(new Error('instanceProps object is empty'));\n    }\n    instanceProps.geometry = new this.geometryType(geometryProps);\n    primitiveProps.geometryInstances = new GeometryInstance(instanceProps);\n    primitiveProps.asynchronous = false;\n    const primitive = new Primitive(primitiveProps);\n    return super.add(primitive);\n  }\n\n  update(primitive: any, geometryProps: any, instanceProps: any, primitiveProps: any) {\n    instanceProps.geometry = new this.geometryType(geometryProps);\n    primitiveProps.geometryInstances = new GeometryInstance(instanceProps);\n    this._cesiumCollection.remove(primitive);\n    return super.add(new Primitive(primitiveProps));\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { CircleGeometry } from 'cesium';\nimport { CesiumService } from '../../../cesium/cesium.service';\nimport { StaticPrimitiveDrawer } from '../static-primitive-drawer/static-primitive-drawer.service';\n\n/**\n *  This drawer is responsible for creating the static version of the circle component.\n */\n@Injectable()\nexport class StaticCircleDrawerService extends StaticPrimitiveDrawer {\n  constructor(cesiumService: CesiumService) {\n    super(CircleGeometry, cesiumService);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { PolylineGeometry } from 'cesium';\nimport { when } from 'when';\nimport { CesiumService } from '../../../cesium/cesium.service';\nimport { StaticPrimitiveDrawer } from '../static-primitive-drawer/static-primitive-drawer.service';\n\n/**\n *  This drawer is responsible for creating the static version of the polyline component.\n *  This also allows us to change the color of the polylines.\n */\n@Injectable()\nexport class StaticPolylineDrawerService extends StaticPrimitiveDrawer {\n  constructor(cesiumService: CesiumService) {\n    super(PolylineGeometry, cesiumService);\n  }\n\n  /**\n   * Update function can only change the primitive color.\n   */\n  update(primitive: any, geometryProps: any, instanceProps: any, primitiveProps: any) {\n    const color = instanceProps.attributes.color.value;\n\n    if (primitive.ready) {\n      primitive.getGeometryInstanceAttributes().color = color;\n    } else {\n      when(primitive.readyPromise).then((readyPrimitive: any) => {\n        readyPrimitive.getGeometryInstanceAttributes().color.value = color;\n      });\n    }\n\n    return primitive;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { PolygonGeometry } from 'cesium';\nimport { StaticPrimitiveDrawer } from '../static-primitive-drawer/static-primitive-drawer.service';\nimport { CesiumService } from '../../../cesium/cesium.service';\n\n/**\n + This drawer is responsible for drawing a polygon over the Cesium map.\n + This implementation uses simple PolygonGeometry and Primitive parameters.\n + This doesn't allow us to change the position, color, etc.. of the polygons. For that you may use the dynamic polygon component.\n */\n@Injectable()\nexport class StaticPolygonDrawerService extends StaticPrimitiveDrawer {\n  constructor(cesiumService: CesiumService) {\n    super(PolygonGeometry, cesiumService);\n  }\n}\n","import { CesiumService } from '../../../cesium/cesium.service';\nimport { EllipseGeometry } from 'cesium';\nimport { Injectable } from '@angular/core';\nimport { StaticPrimitiveDrawer } from '../static-primitive-drawer/static-primitive-drawer.service';\n\n\n/**\n + *  This drawer is responsible for drawing an ellipse over the Cesium map.\n + *  This implementation uses simple EllipseGeometry and Primitive parameters.\n + *  This doesn't allow us to change the position, color, etc.. of the ellipses. For that you may use the dynamic ellipse component.\n + */\n@Injectable()\nexport class StaticEllipseDrawerService extends StaticPrimitiveDrawer {\n  constructor(cesiumService: CesiumService) {\n    super(EllipseGeometry, cesiumService);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { EntitiesDrawerService } from '../entities-drawer/entities-drawer.service';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { GraphicsType } from '../entities-drawer/enums/graphics-type.enum';\n\n/**\n *  This drawer is responsible for drawing models.\n */\n@Injectable()\nexport class ModelDrawerService extends EntitiesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(cesiumService, GraphicsType.model);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { EntitiesDrawerService } from '../entities-drawer/entities-drawer.service';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { GraphicsType } from '../entities-drawer/enums/graphics-type.enum';\n\n/**\n *  This drawer is responsible for drawing box.\n */\n@Injectable()\nexport class BoxDrawerService extends EntitiesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(cesiumService, GraphicsType.box);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { EntitiesDrawerService } from '../entities-drawer/entities-drawer.service';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { GraphicsType } from '../entities-drawer/enums/graphics-type.enum';\n\n/**\n *  This drawer is responsible for drawing corridors .\n */\n@Injectable()\nexport class CorridorDrawerService extends EntitiesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(cesiumService, GraphicsType.corridor);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { EntitiesDrawerService } from '../entities-drawer/entities-drawer.service';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { GraphicsType } from '../entities-drawer/enums/graphics-type.enum';\n\n/**\n *  This drawer is responsible for drawing cylinders.\n */\n@Injectable()\nexport class CylinderDrawerService extends EntitiesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(cesiumService, GraphicsType.cylinder);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { EntitiesDrawerService } from '../entities-drawer/entities-drawer.service';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { GraphicsType } from '../entities-drawer/enums/graphics-type.enum';\n\n/**\n *  This drawer is responsible for drawing ellipsoid.\n */\n@Injectable()\nexport class EllipsoidDrawerService extends EntitiesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(cesiumService, GraphicsType.ellipsoid);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { EntitiesDrawerService } from '../entities-drawer/entities-drawer.service';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { GraphicsType } from '../entities-drawer/enums/graphics-type.enum';\n\n/**\n *  This drawer is responsible for drawing polylines.\n */\n@Injectable()\nexport class PolylineVolumeDrawerService extends EntitiesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(cesiumService, GraphicsType.polylineVolume);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { EntitiesDrawerService } from '../entities-drawer/entities-drawer.service';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { GraphicsType } from '../entities-drawer/enums/graphics-type.enum';\n\n/**\n *  This drawer is responsible for drawing polygons.\n */\n@Injectable()\nexport class WallDrawerService extends EntitiesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(cesiumService, GraphicsType.wall);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { EntitiesDrawerService } from '../entities-drawer/entities-drawer.service';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { GraphicsType } from '../entities-drawer/enums/graphics-type.enum';\n\n/**\n *  This drawer is responsible for drawing rectangles.\n */\n@Injectable()\nexport class RectangleDrawerService extends EntitiesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(cesiumService, GraphicsType.rectangle);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { LabelCollection } from 'cesium';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { PrimitivesDrawerService } from '../primitives-drawer/primitives-drawer.service';\n\n/**\n *  This drawer is responsible for drawing labels as primitives.\n *  This drawer is more efficient than LabelDrawerService when drawing dynamic labels.\n */\n@Injectable()\nexport class LabelPrimitiveDrawerService extends PrimitivesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(LabelCollection, cesiumService);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BillboardCollection} from 'cesium';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { PrimitivesDrawerService } from '../primitives-drawer/primitives-drawer.service';\n\n/**\n *  This drawer is responsible for drawing billboards as primitives.\n *  This drawer is more efficient than BillboardDrawerService when drawing dynamic billboards.\n */\n@Injectable()\nexport class BillboardPrimitiveDrawerService extends PrimitivesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(BillboardCollection, cesiumService);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { PointPrimitiveCollection } from 'cesium';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { PrimitivesDrawerService } from '../primitives-drawer/primitives-drawer.service';\n\n/**\n *  This drawer is responsible of drawing points as primitives.\n *  This drawer is more efficient than PointDrawerService when drawing dynamic points.\n */\n@Injectable()\nexport class PointPrimitiveDrawerService extends PrimitivesDrawerService {\n  constructor(cesiumService: CesiumService) {\n    super(PointPrimitiveCollection, cesiumService);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { CesiumService } from '../../cesium/cesium.service';\nimport { PrimitivesDrawerService } from '../primitives-drawer/primitives-drawer.service';\ndeclare var Cesium: any;\n\n@Injectable()\nexport class HtmlDrawerService extends PrimitivesDrawerService {\n  constructor(private _cesiumService: CesiumService) {\n    super(Cesium.HtmlCollection, _cesiumService);\n  }\n\n  add(cesiumProps: any): any {\n    cesiumProps.scene = this._cesiumService.getScene();\n    cesiumProps.mapContainer = this._cesiumService.getMapContainer();\n    return super.add(cesiumProps);\n  }\n}\n","import { from as observableFrom, merge as observableMerge, Observable, Subject } from 'rxjs';\n\nimport { takeUntil } from 'rxjs/operators';\n// tslint:disable\nimport { BillboardDrawerService } from '../../services/drawers/billboard-drawer/billboard-drawer.service';\nimport { AfterContentInit, ChangeDetectionStrategy, Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { AcNotification } from '../../models/ac-notification';\nimport { ActionType } from '../../models/action-type.enum';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { LabelDrawerService } from '../../services/drawers/label-drawer/label-drawer.service';\nimport { EllipseDrawerService } from '../../services/drawers/ellipse-drawer/ellipse-drawer.service';\nimport { PolylineDrawerService } from '../../services/drawers/polyline-drawer/polyline-drawer.service';\nimport { ArcDrawerService } from '../../services/drawers/arc-drawer/arc-drawer.service';\nimport { PointDrawerService } from '../../services/drawers/point-drawer/point-drawer.service';\nimport { AcEntity } from '../../models/ac-entity';\nimport { BasicDrawerService } from '../../services/drawers/basic-drawer/basic-drawer.service';\nimport { PolygonDrawerService } from '../../services/drawers/polygon-drawer/polygon-drawer.service';\nimport { LayerOptions } from '../../models/layer-options';\nimport { DynamicEllipseDrawerService } from '../../services/drawers/static-dynamic/ellipse-drawer/dynamic-ellipse-drawer.service';\nimport { DynamicPolylineDrawerService } from '../../services/drawers/static-dynamic/dynamic-polyline-drawer/dynamic-polyline-drawer.service';\nimport { StaticCircleDrawerService } from '../../services/drawers/static-dynamic/static-circle-drawer/static-circle-drawer.service';\nimport { StaticPolylineDrawerService } from '../../services/drawers/static-dynamic/static-polyline-drawer/static-polyline-drawer.service';\nimport { StaticPolygonDrawerService } from '../../services/drawers/static-dynamic/static-polygon-drawer/polygon-drawer.service';\nimport { StaticEllipseDrawerService } from '../../services/drawers/static-dynamic/ellipse-drawer/ellipse-drawer.service';\nimport { ModelDrawerService } from '../../services/drawers/model-drawer/model-drawer.service';\nimport { BoxDrawerService } from '../../services/drawers/box-dawer/box-drawer.service';\nimport { CorridorDrawerService } from '../../services/drawers/corridor-dawer/corridor-drawer.service';\nimport { CylinderDrawerService } from '../../services/drawers/cylinder-dawer/cylinder-drawer.service';\nimport { EllipsoidDrawerService } from '../../services/drawers/ellipoid-drawer/ellipsoid-drawer.service';\nimport { PolylineVolumeDrawerService } from '../../services/drawers/polyline-volume-dawer/polyline-volume-drawer.service';\nimport { WallDrawerService } from '../../services/drawers/wall-dawer/wall-drawer.service';\nimport { RectangleDrawerService } from '../../services/drawers/rectangle-dawer/rectangle-drawer.service';\nimport { PolylinePrimitiveDrawerService } from '../../services/drawers/polyline-primitive-drawer/polyline-primitive-drawer.service';\nimport { LabelPrimitiveDrawerService } from '../../services/drawers/label-primitive-drawer/label-primitive-drawer.service';\nimport { BillboardPrimitiveDrawerService } from '../../services/drawers/billboard-primitive-drawer/billboard-primitive-drawer.service';\nimport { MapLayersService } from '../../services/map-layers/map-layers.service';\nimport { PointPrimitiveDrawerService } from '../../services/drawers/point-primitive-drawer/point-primitive-drawer.service';\nimport { HtmlDrawerService } from '../../services/drawers/html-drawer/html-drawer.service';\nimport { CzmlDrawerService } from '../../services/drawers/czml-drawer/czml-drawer.service';\n\n// tslint:enable\n/**\n *  This is a ac-layer implementation.\n *  The ac-layer element must be a child of ac-map element.\n *  + acFor `{string}` - get the tracked observable and entityName (see the example).\n *  + show `{boolean}` - show/hide layer's entities.\n *  + context `{any}` - get the context layer that will use the componnet (most of the time equal to \"this\").\n *  + options `{LayerOptions}` - sets the layer options for each drawer.\n *  + zIndex `{number}` - controls the zIndex (order) of the layer, layers with greater zIndex will be in front of layers with lower zIndex\n *    (Exception For `Billboard` and `Label`, should use `[eyeOffset]` prop instead)</br>\n *    zIndex won't work for pritimitve descs (like ac-primitive-polyline...)\n *  + debug `{boolean}` - prints every acNotification\n *\n *\n *  __Usage :__\n *  ```\n *  <ac-map>\n *    <ac-layer acFor=\"let track of tracks$\" [show]=\"show\" [context]=\"this\" [options]=\"options\" [zIndex]=\"1\">\n *      <ac-billboard-desc props=\"{\n *        image: track.image,\n *        position: track.position,\n *        scale: track.scale,\n *        color: track.color,\n *        name: track.name\n *      }\">\n *      </ac-billboard-desc>\n *        <ac-label-desc props=\"{\n *          position: track.position,\n *          pixelOffset : [-15,20] | pixelOffset,\n *          text: track.name,\n *          font: '15px sans-serif'\n *        }\">\n *      </ac-label-desc>\n *    </ac-layer>\n *  </ac-map>\n *  ```\n */\n@Component({\n    selector: 'ac-layer',\n    template: '<ng-content></ng-content>',\n    providers: [\n        LayerService,\n        ComputationCache,\n        BillboardDrawerService,\n        LabelDrawerService,\n        EllipseDrawerService,\n        PolylineDrawerService,\n        ArcDrawerService,\n        PointDrawerService,\n        PolygonDrawerService,\n        ModelDrawerService,\n        BoxDrawerService,\n        CorridorDrawerService,\n        CylinderDrawerService,\n        EllipsoidDrawerService,\n        PolylineVolumeDrawerService,\n        WallDrawerService,\n        RectangleDrawerService,\n        PolylinePrimitiveDrawerService,\n        LabelPrimitiveDrawerService,\n        BillboardPrimitiveDrawerService,\n        PointPrimitiveDrawerService,\n        HtmlDrawerService,\n        CzmlDrawerService,\n        DynamicEllipseDrawerService,\n        DynamicPolylineDrawerService,\n        StaticCircleDrawerService,\n        StaticPolylineDrawerService,\n        StaticPolygonDrawerService,\n        StaticEllipseDrawerService,\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class AcLayerComponent implements OnInit, OnChanges, AfterContentInit, OnDestroy {\n  @Input()\n  show = true;\n  @Input()\n  acFor: string;\n  @Input()\n  context: any;\n  @Input()\n  store = false;\n  @Input()\n  options: LayerOptions;\n  @Input()\n  zIndex = 0;\n  @Input()\n  debug = false;\n\n  private readonly acForRgx = /^let\\s+.+\\s+of\\s+.+$/;\n  private entityName: string;\n  private stopObservable = new Subject<any>();\n  private observable: Observable<AcNotification>;\n  private _drawerList: Map<string, BasicDrawerService>;\n  private _updateStream: Subject<AcNotification> = new Subject<AcNotification>();\n  private entitiesStore = new Map<string, any>();\n  private layerDrawerDataSources: any[] = [];\n\n  constructor(private layerService: LayerService,\n              private _computationCache: ComputationCache,\n              private mapLayersService: MapLayersService,\n              billboardDrawerService: BillboardDrawerService,\n              labelDrawerService: LabelDrawerService,\n              ellipseDrawerService: EllipseDrawerService,\n              polylineDrawerService: PolylineDrawerService,\n              polygonDrawerService: PolygonDrawerService,\n              arcDrawerService: ArcDrawerService,\n              pointDrawerService: PointDrawerService,\n              modelDrawerService: ModelDrawerService,\n              boxDrawerService: BoxDrawerService,\n              corridorDrawerService: CorridorDrawerService,\n              cylinderDrawerService: CylinderDrawerService,\n              ellipsoidDrawerSerice: EllipsoidDrawerService,\n              polylineVolumeDrawerService: PolylineVolumeDrawerService,\n              wallDrawerService: WallDrawerService,\n              rectangleDrawerService: RectangleDrawerService,\n              dynamicEllipseDrawerService: DynamicEllipseDrawerService,\n              dynamicPolylineDrawerService: DynamicPolylineDrawerService,\n              staticCircleDrawerService: StaticCircleDrawerService,\n              staticPolylineDrawerService: StaticPolylineDrawerService,\n              staticPolygonDrawerService: StaticPolygonDrawerService,\n              staticEllipseDrawerService: StaticEllipseDrawerService,\n              polylinePrimitiveDrawerService: PolylinePrimitiveDrawerService,\n              labelPrimitiveDrawerService: LabelPrimitiveDrawerService,\n              billboardPrimitiveDrawerService: BillboardPrimitiveDrawerService,\n              pointPrimitiveDrawerService: PointPrimitiveDrawerService,\n              htmlDrawerService: HtmlDrawerService,\n              czmlDrawerService: CzmlDrawerService\n  ) {\n    this._drawerList = new Map([\n      ['billboard', billboardDrawerService],\n      ['label', labelDrawerService],\n      ['ellipse', ellipseDrawerService],\n      ['polyline', polylineDrawerService],\n      ['polygon', polygonDrawerService as BasicDrawerService],\n      ['arc', arcDrawerService],\n      ['point', pointDrawerService],\n      ['model', modelDrawerService],\n      ['box', boxDrawerService],\n      ['corridor', corridorDrawerService],\n      ['cylinder', cylinderDrawerService],\n      ['ellipsoid', ellipsoidDrawerSerice],\n      ['polylineVolume', polylineVolumeDrawerService],\n      ['rectangle', rectangleDrawerService],\n      ['wall', wallDrawerService],\n      ['polylinePrimitive', polylinePrimitiveDrawerService],\n      ['labelPrimitive', labelPrimitiveDrawerService],\n      ['billboardPrimitive', billboardPrimitiveDrawerService],\n      ['pointPrimitive', pointPrimitiveDrawerService],\n      ['html', htmlDrawerService],\n      ['czml', czmlDrawerService],\n\n      ['dynamicEllipse', dynamicEllipseDrawerService],\n      ['dynamicPolyline', dynamicPolylineDrawerService],\n      ['staticCircle', staticCircleDrawerService],\n      ['staticPolyline', staticPolylineDrawerService],\n      ['staticPolygon', staticPolygonDrawerService],\n      ['staticEllipse', staticEllipseDrawerService],\n    ]);\n  }\n\n  init() {\n    this.initValidParams();\n\n    observableMerge(this._updateStream, this.observable).pipe<AcNotification>(takeUntil(this.stopObservable)).subscribe((notification) => {\n      this._computationCache.clear();\n\n      if (this.debug) {\n        console.log('AcLayer received notification:', notification);\n      }\n\n      let contextEntity = notification.entity;\n      if (this.store) {\n        contextEntity = this.updateStore(notification);\n      }\n\n      this.context[this.entityName] = contextEntity;\n      this.layerService.getDescriptions().forEach((descriptionComponent) => {\n        switch (notification.actionType) {\n          case ActionType.ADD_UPDATE:\n            descriptionComponent.draw(this.context, notification.id, contextEntity);\n            break;\n          case ActionType.DELETE:\n            descriptionComponent.remove(notification.id);\n            break;\n          default:\n            console.error('[ac-layer] unknown AcNotification.actionType for notification: ' + notification);\n        }\n      });\n    });\n  }\n\n  private updateStore(notification: AcNotification): any {\n    if (notification.actionType === ActionType.DELETE) {\n      this.entitiesStore.delete(notification.id);\n      return undefined;\n    } else {\n      if (this.entitiesStore.has(notification.id)) {\n        const entity = this.entitiesStore.get(notification.id);\n        Object.assign(entity, notification.entity);\n        return entity;\n      } else {\n        this.entitiesStore.set(notification.id, notification.entity);\n        return notification.entity;\n      }\n    }\n  }\n\n  private initValidParams() {\n    if (!this.context) {\n      throw new Error('ac-layer: must initialize [context] ');\n    }\n\n    if (!this.acForRgx.test(this.acFor)) {\n      throw new Error(`ac-layer: Invalid [acFor] syntax. Expected: [acFor]=\"let item of observable\" .Instead received: ${this.acFor}`);\n    }\n    const acForArr = this.acFor.split(' ');\n    this.observable = this.context[acForArr[3]];\n    this.entityName = acForArr[1];\n    if (!this.isObservable(this.observable)) {\n      throw new Error('ac-layer: must initailize [acFor] with rx observable, instead received: ' + this.observable);\n    }\n\n    this.layerService.context = this.context;\n    this.layerService.setEntityName(this.entityName);\n  }\n\n  /** Test for a rxjs Observable */\n  private isObservable(obj: any): boolean {\n    /* check via duck-typing rather than instance of\n     * to allow passing between window contexts */\n    return obj && typeof obj.subscribe === 'function';\n  }\n\n  ngAfterContentInit(): void {\n    this.init();\n  }\n\n  ngOnInit(): void {\n    this.layerService.context = this.context;\n    this.layerService.options = this.options;\n    this.layerService.show = this.show;\n    this.layerService.zIndex = this.zIndex;\n    this._drawerList.forEach((drawer, drawerName) => {\n      const initOptions = this.options ? this.options[drawerName] : undefined;\n      const drawerDataSources = drawer.init(initOptions);\n      // only entities drawers create data sources\n      if (drawerDataSources) {\n        // this.mapLayersService.registerLayerDataSources(drawerDataSources, this.zIndex);\n        // TODO: Check if the following line causes Bad Performance\n        this.layerDrawerDataSources.push(...drawerDataSources);\n      }\n      drawer.setShow(this.show);\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.show && !changes.show.firstChange) {\n      const showValue = changes['show'].currentValue;\n      this.layerService.show = showValue;\n      this._drawerList.forEach((drawer) => drawer.setShow(showValue));\n    }\n\n    if (changes.zIndex && !changes.zIndex.firstChange) {\n      const zIndexValue = changes['zIndex'].currentValue;\n      this.layerService.zIndex = zIndexValue;\n      this.mapLayersService.updateAndRefresh(this.layerDrawerDataSources, zIndexValue);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.mapLayersService.removeDataSources(this.layerDrawerDataSources);\n    this.stopObservable.next(true);\n    this.removeAll();\n  }\n\n  getLayerService(): LayerService {\n    return this.layerService;\n  }\n\n  /**\n   * Returns an array of DataSources registered by a drawer of this layer\n   * @return Array of Cesium.DataSources\n   */\n  getLayerDrawerDataSources(): any[] {\n    return this.layerDrawerDataSources;\n  }\n\n  /**\n   * Returns an Array of DataSources of the drawer with the provided DataSource.name\n   * Example: getDataSourceOfDrawer('polyline') returns the dataSource of polyline drawer\n   * @return Array of Cesium.DataSources\n   */\n  getDrawerDataSourcesByName(name: string): any[] {\n    return this.layerDrawerDataSources.filter(d => d.name === name);\n  }\n\n  /**\n   * Returns the store.\n   */\n  getStore(): Map<string, any> {\n    return this.entitiesStore;\n  }\n\n  /**\n   * Remove all the entities from the layer.\n   */\n  removeAll(): void {\n    this.layerService.getDescriptions().forEach((description) => description.removeAll());\n    this.entitiesStore.clear();\n  }\n\n  /**\n   * remove entity from the layer\n   */\n  remove(entityId: string) {\n    this._updateStream.next({id: entityId, actionType: ActionType.DELETE});\n    this.entitiesStore.delete(entityId);\n  }\n\n  /**\n   * add/update entity to/from the layer\n   */\n  updateNotification(notification: AcNotification): void {\n    this._updateStream.next(notification);\n  }\n\n  /**\n   * add/update entity to/from the layer\n   */\n  update(entity: AcEntity, id: string): void {\n    this._updateStream.next({entity, id, actionType: ActionType.ADD_UPDATE});\n  }\n\n  refreshAll(collection: AcNotification[]): void {\n    // TODO make entity interface: collection of type entity not notification\n    observableFrom(collection).subscribe((entity) => this._updateStream.next(entity));\n  }\n}\n","import { Input, OnChanges, OnDestroy, OnInit, SimpleChanges, Directive } from '@angular/core';\nimport { BasicDrawerService } from '../drawers/basic-drawer/basic-drawer.service';\nimport { MapLayersService } from '../map-layers/map-layers.service';\n\n/**\n *  Extend this class to create drawing on map components.\n */\n@Directive()\nexport class EntityOnMapComponent implements OnInit, OnChanges, OnDestroy {\n  @Input()\n  props: any;\n\n  protected selfPrimitive: any;\n  protected selfPrimitiveIsDraw: boolean;\n  protected dataSources: any;\n\n  constructor(protected _drawer: BasicDrawerService, private mapLayers: MapLayersService) {\n  }\n\n  ngOnInit(): void {\n    this.selfPrimitiveIsDraw = false;\n    const dataSources = this._drawer.init();\n    if (dataSources) {\n      this.dataSources = dataSources;\n      // this.mapLayers.registerLayerDataSources(dataSources, 0);\n    }\n    this.drawOnMap();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const props = changes['props'];\n    if (props.currentValue !== props.previousValue) {\n      this.updateOnMap();\n    }\n  }\n\n  drawOnMap() {\n    this.selfPrimitiveIsDraw = true;\n    return this.selfPrimitive = this._drawer.add(this.props);\n  }\n\n  removeFromMap() {\n    this.selfPrimitiveIsDraw = false;\n    return this._drawer.remove(this.selfPrimitive);\n  }\n\n  updateOnMap() {\n    if (this.selfPrimitiveIsDraw) {\n      return this._drawer.update(this.selfPrimitive, this.props);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.mapLayers.removeDataSources(this.dataSources);\n    this.removeFromMap();\n  }\n}\n","import { Component } from '@angular/core';\nimport { EntityOnMapComponent } from '../../services/entity-on-map/entity-on-map.component';\nimport { BillboardDrawerService } from '../../services/drawers/billboard-drawer/billboard-drawer.service';\nimport { MapLayersService } from '../../services/map-layers/map-layers.service';\n\n/**\n *  This is a billboard implementation.\n *  The element must be a child of ac-map element.\n *  The properties of props are the same as the properties of Entity and BillboardGraphics:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/BillboardGraphics.html\n *\n *  __Usage :__\n *  ```\n *    <ac-billboard [props]=\"{\n *      image: image,\n *      position: position,\n *      scale: scale,\n *      color: color,\n *      name: name\n *    }\">;\n *    </ac-billboard>\n *  ```\n */\n\n@Component({\n    selector: 'ac-billboard',\n    template: '',\n    standalone: false\n})\nexport class AcBillboardComponent extends EntityOnMapComponent {\n\n  constructor(billboardDrawer: BillboardDrawerService, mapLayers: MapLayersService) {\n    super(billboardDrawer, mapLayers);\n  }\n}\n","/**\n * Service for effective assignment.\n */\nexport class SmartAssigner {\n\n  static create(props: string[] = [], allowUndefined: boolean = true): (obj1: Object, obj2: Object) => Object {\n    let fnBody = ``;\n\n    props.forEach(prop => {\n      if (!allowUndefined) {\n        // tslint:disable-next-line:max-line-length\n        fnBody += `if (!(obj1['${prop}'] instanceof Cesium.CallbackProperty) && obj2['${prop}'] !== undefined) { obj1['${prop}'] = obj2['${prop}']; } `;\n      } else {\n        fnBody += `if(!(obj1['${prop}'] instanceof Cesium.CallbackProperty))obj1['${prop}'] = obj2['${prop}']; `;\n      }\n    });\n\n    fnBody += `return obj1`;\n    const assignFn = new Function('obj1', 'obj2', fnBody);\n\n    return function smartAssigner(obj1: Object, obj2: Object) {\n      return assignFn(obj1, obj2);\n    };\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { JsonStringMapper } from 'json-string-mapper';\n\n@Injectable()\nexport class JsonMapper {\n  private _mapper: JsonStringMapper;\n\n  constructor() {\n    this._mapper = new JsonStringMapper();\n  }\n\n  map(expression: string): Map<string, string> {\n    return this._mapper.map(expression);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { JsonMapper } from '../json-mapper/json-mapper.service';\nimport { Parse } from '@auscope/angular2parse';\nimport { SmartAssigner } from '../smart-assigner/smart-assigner.service';\nimport { ComputationCache } from '../computation-cache/computation-cache.service';\n\n@Injectable()\nexport class CesiumProperties {\n  private _assignersCache = new Map<string, (oldVal: Object, newVal: Object) => Object>();\n  private _evaluatorsCache = new Map<string, (cache: ComputationCache, context: Object) => Object>();\n\n  constructor(private _parser: Parse,\n              private _jsonMapper: JsonMapper) {\n  }\n\n  _compile(expression: string, withCache = true): (cache: ComputationCache, context: Object) => Object {\n    const cesiumDesc = {};\n    const propsMap = new Map<string, { expression: string, get: Function }>();\n\n    const resultMap = this._jsonMapper.map(expression);\n\n    resultMap.forEach((resultExpression, prop) => propsMap.set(prop, {\n      expression: resultExpression,\n      get: this._parser.eval(resultExpression)\n    }));\n\n    propsMap.forEach((value, prop) => {\n      if (withCache) {\n        cesiumDesc[prop || 'undefined'] = `cache.get(\\`${value.expression}\\`, () => propsMap.get('${prop}').get(context))`;\n      } else {\n        cesiumDesc[prop || 'undefined'] = `propsMap.get('${prop}').get(context)`;\n      }\n    });\n\n    const fnBody = `return ${JSON.stringify(cesiumDesc).replace(/\"/g, '')};`;\n    const getFn = new Function('propsMap', 'cache', 'context', fnBody);\n\n    return function evaluateCesiumProps(cache: ComputationCache, context: Object): Object {\n      return getFn(propsMap, cache, context);\n    };\n  }\n\n  _build(expression: string): (oldVal: Object, newVal: Object) => Object {\n    const props = Array.from(this._jsonMapper.map(expression).keys());\n    const smartAssigner = SmartAssigner.create(props);\n\n    return function assignCesiumProps(oldVal: Object, newVal: Object) {\n      return smartAssigner(oldVal, newVal);\n    };\n  }\n\n  createEvaluator(expression: string, withCache = true, newEvaluator = false): (cache: ComputationCache, context: Object) => Object {\n    if (!newEvaluator && this._evaluatorsCache.has(expression)) {\n      return this._evaluatorsCache.get(expression);\n    }\n\n    const evaluatorFn = this._compile(expression, withCache);\n    this._evaluatorsCache.set(expression, evaluatorFn);\n\n    return evaluatorFn;\n  }\n\n  createAssigner(expression: string): (oldVal: Object, newVal: Object) => Object {\n    if (this._assignersCache.has(expression)) {\n      return this._assignersCache.get(expression);\n    }\n\n    const assignFn = this._build(expression);\n    this._assignersCache.set(expression, assignFn);\n\n    return assignFn;\n  }\n}\n","import { EventEmitter, Input, OnDestroy, OnInit, Output, Directive } from '@angular/core';\nimport { LayerService } from '../layer-service/layer-service.service';\nimport { ComputationCache } from '../computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../cesium-properties/cesium-properties.service';\nimport { AcEntity } from '../../models/ac-entity';\nimport { BasicDrawerService } from '../drawers/basic-drawer/basic-drawer.service';\nimport { IDescription } from '../../models/description';\n\nexport interface OnDrawParams {\n  acEntity: AcEntity;\n  entityId: string;\n  cesiumEntity: any;\n}\n\n/**\n *  the ancestor class for creating components.\n *  extend this class to create desc component.\n */\n@Directive()\nexport class BasicDesc implements OnInit, OnDestroy, IDescription {\n  @Input()\n  props: any;\n\n  @Output()\n  onDraw: EventEmitter<OnDrawParams> = new EventEmitter<OnDrawParams>();\n\n  @Output()\n  onRemove: EventEmitter<OnDrawParams> = new EventEmitter<OnDrawParams>();\n\n  protected _cesiumObjectsMap: Map<string, any> = new Map<string, any>();\n  private _propsEvaluateFn: Function;\n  private _propsAssignerFn: Function;\n\n  constructor(protected _drawer: BasicDrawerService,\n              protected _layerService: LayerService,\n              protected _computationCache: ComputationCache,\n              protected _cesiumProperties: CesiumProperties) {\n  }\n\n  protected _propsEvaluator(context: Object): any {\n    return this._propsEvaluateFn(this._computationCache, context);\n  }\n\n  protected _getPropsAssigner(): (cesiumObject: Object, desc: Object) => Object {\n    return (cesiumObject: Object, desc: Object) => this._propsAssignerFn(cesiumObject, desc);\n  }\n\n  getLayerService(): LayerService {\n    return this._layerService;\n  }\n\n  setLayerService(layerService: LayerService) {\n    this._layerService.unregisterDescription(this);\n    this._layerService = layerService;\n    this._layerService.registerDescription(this);\n    this._propsEvaluateFn = this._cesiumProperties.createEvaluator(this.props, this._layerService.cache, true);\n    this._propsAssignerFn = this._cesiumProperties.createAssigner(this.props);\n  }\n\n  ngOnInit(): void {\n    if (!this.props) {\n      console.error('ac-desc components error: [props] input is mandatory');\n    }\n\n    this._layerService.registerDescription(this);\n    this._propsEvaluateFn = this._cesiumProperties.createEvaluator(this.props, this._layerService.cache);\n    this._propsAssignerFn = this._cesiumProperties.createAssigner(this.props);\n  }\n\n  public getCesiumObjectsMap(): Map<string, any> {\n    return this._cesiumObjectsMap;\n  }\n\n  draw(context: any, id: string, entity: AcEntity): void {\n    const cesiumProps = this._propsEvaluator(context);\n\n    if (!this._cesiumObjectsMap.has(id)) {\n      const cesiumObject = this._drawer.add(cesiumProps);\n      this.onDraw.emit({\n        acEntity: entity,\n        cesiumEntity: cesiumObject,\n        entityId: id,\n      });\n      cesiumObject.acEntity = entity; // set the entity on the cesiumObject for later usage\n      this._cesiumObjectsMap.set(id, cesiumObject);\n    } else {\n      const cesiumObject = this._cesiumObjectsMap.get(id);\n      this.onDraw.emit({\n        acEntity: entity,\n        cesiumEntity: cesiumObject,\n        entityId: id,\n      });\n      cesiumObject.acEntity = entity; // set the entity on the cesiumObject for later usage\n      this._drawer.setPropsAssigner(this._getPropsAssigner());\n      this._drawer.update(cesiumObject, cesiumProps);\n    }\n  }\n\n  remove(id: string) {\n    const cesiumObject = this._cesiumObjectsMap.get(id);\n    if (cesiumObject) {\n      this.onRemove.emit({\n        acEntity: cesiumObject.acEntity,\n        cesiumEntity: cesiumObject,\n        entityId: id,\n      });\n      this._drawer.remove(cesiumObject);\n      this._cesiumObjectsMap.delete(id);\n    }\n  }\n\n  removeAll() {\n    this._cesiumObjectsMap.clear();\n    this._drawer.removeAll();\n  }\n\n  ngOnDestroy() {\n    this._layerService.unregisterDescription(this);\n    this.removeAll();\n  }\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { BillboardDrawerService } from '../../services/drawers/billboard-drawer/billboard-drawer.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\n\n/**\n *  This is a billboard implementation.\n *  The element must be a child of ac-layer element.\n *  The properties of props are the same as the properties of Entity and BillboardGraphics:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/BillboardGraphics.html\n *\n *  __Usage :__\n *  ```\n *    <ac-billboard-desc props=\"{\n *      image: track.image,\n *      position: track.position,\n *      scale: track.scale,\n *      color: track.color,\n *      name: track.name\n *    }\">\n *    </ac-billboard-desc>\n *  ```\n */\n\n@Component({\n    selector: 'ac-billboard-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcBillboardDescComponent) }],\n    standalone: false\n})\nexport class AcBillboardDescComponent extends BasicDesc {\n\n  constructor(billboardDrawer: BillboardDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(billboardDrawer, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { EllipseDrawerService } from '../../services/drawers/ellipse-drawer/ellipse-drawer.service';\n\n/**\n *  This is an ellipse implementation.\n *  The element must be a child of ac-layer element.\n *  _Set `height` prop for performance enhancement_\n *  The properties of props are the same as the properties of Entity and EllipseGraphics:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/EllipseGraphics.html\n *\n *  __Usage :__\n *  ```\n *    <ac-ellipse-desc props=\"{\n *      position: data.position,\n *      semiMajorAxis:250000.0,\n *      semiMinorAxis:400000.0,\n *      height: 0\n *    }\">\n *    </ac-ellipse-desc>\n *  ```\n */\n@Component({\n    selector: 'ac-ellipse-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcEllipseDescComponent) }],\n    standalone: false\n})\nexport class AcEllipseDescComponent extends BasicDesc {\n  constructor(ellipseDrawer: EllipseDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(ellipseDrawer, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { PolylineDrawerService } from '../../services/drawers/polyline-drawer/polyline-drawer.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\n\n/**\n *  This is a polyline implementation.\n *  The ac-label element must be a child of ac-map element.\n *  The properties of props are the same as the properties of Entity and PolylineGraphics:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/PolylineGraphics.html\n *\n *  __Usage:__\n *  ```\n *    <ac-polyline-desc props=\"{\n *      width : polyline.width,\n *      positions: polyline.positions,\n *      material: polyline.material\n *    }\">\n *    </ac-polyline-desc>\n * ```\n */\n@Component({\n    selector: 'ac-polyline-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcPolylineDescComponent) }],\n    standalone: false\n})\nexport class AcPolylineDescComponent extends BasicDesc {\n\n  constructor(dynamicPolylineDrawerService: PolylineDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(dynamicPolylineDrawerService, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Cartesian2 } from 'cesium';\n\n/**\n * @example\n * <ac-label-desc props=\"{\n *            position: track.position,\n *            pixelOffset : [-15,20] | pixelOffset,\n *            text: track.name,\n *            font: '15px sans-serif'\n *    }\">\n * </ac-label-desc>\n */\n@Pipe({\n    name: 'pixelOffset',\n    standalone: false\n})\nexport class PixelOffsetPipe implements PipeTransform {\n\n  transform(value: any, args?: any): any {\n    return new Cartesian2(value[0], value[1]);\n  }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'radiansToDegrees',\n    standalone: false\n})\nexport class RadiansToDegreesPipe implements PipeTransform {\n\n  transform(value: any, args?: any): number {\n    return (360 - Math.round(180 * value / Math.PI)) % 360;\n  }\n\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { LabelDrawerService } from '../../services/drawers/label-drawer/label-drawer.service';\n\n/**\n *  This is a label implementation.\n *  The ac-label element must be a child of ac-layer element.\n *  The properties of props are the same as the properties of Entity and LabelGraphics:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/LabelGraphics.html\n *\n *  __Usage :__\n *  ```\n *    <ac-label-desc props=\"{\n *      position: track.position,\n *      pixelOffset : [-15,20] | pixelOffset,\n *      text: track.name,\n *      font: '15px sans-serif'\n *    }\">\n *    </ac-label-desc>\n *  ```\n */\n\n@Component({\n    selector: 'ac-label-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcLabelDescComponent) }],\n    standalone: false\n})\nexport class AcLabelDescComponent extends BasicDesc {\n\n  constructor(labelDrawer: LabelDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(labelDrawer, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n  imports: [CommonModule],\n  providers: []\n})\nexport class UtilsModule {\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { EllipseDrawerService } from '../../services/drawers/ellipse-drawer/ellipse-drawer.service';\n\n/**\n *  This is a circle implementation.\n *  The element must be a child of ac-layer element.\n *  semiMajorAxis ans semiMinorAxis are replaced with radius property.\n *  All other properties of props are the same as the properties of Entity and EllipseGraphics:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/EllipseGraphics.html\n *\n *__Usage :__\n *  ```\n *    <ac-circle-desc props=\"{\n *      position: data.position,\n *      radius: 5\n *      granularity:0.08 // Optional\n *    }\">\n *    </ac-circle-desc>\n *  ```\n */\n@Component({\n    selector: 'ac-circle-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcCircleDescComponent) }],\n    standalone: false\n})\nexport class AcCircleDescComponent extends BasicDesc {\n  constructor(ellipseDrawer: EllipseDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(ellipseDrawer, layerService, computationCache, cesiumProperties);\n  }\n\n  protected _propsEvaluator(context: Object): any {\n    const cesiumProps = super._propsEvaluator(context);\n\n    cesiumProps.semiMajorAxis = cesiumProps.radius;\n    cesiumProps.semiMinorAxis = cesiumProps.radius;\n    delete cesiumProps.radius;\n\n    return cesiumProps;\n  }\n\n  protected _getPropsAssigner(): (cesiumObject: Object, desc: Object) => Object {\n    return (cesiumObject: Object, desc: Object) => Object.assign(cesiumObject, desc);\n  }\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { ArcDrawerService } from '../../services/drawers/arc-drawer/arc-drawer.service';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\n\n/**\n *  This is an implementation of an arc.\n *  The element must be a child of ac-layer element.\n *  An arc is not cesium natively implemented and therefore it's API doesn't appear anywhere\n *\n *  __Usage :__\n *  ```\n *    <ac-arc-desc props=\"{\n *          center: arc.center,\n *          angle: arc.angle,\n *          delta: arc.delta,\n *          radius: arc.radius,\n *          color : arc.color - The color should be Cesium.Color type\n *    }\">\n *    </ac-arc-desc>\n *    ```\n *\n *    description of the props :\n *    center - The arc is a section of an outline of a circle, This is the center of the circle\n *    angle - the initial angle of the arc in radians\n *    delta - the spreading of the arc,\n *    radius - the distance from the center to the arc\n *\n *    for example :\n *    angle - 0\n *    delta - π\n *\n *    will draw an half circle\n */\n\n@Component({\n    selector: 'ac-arc-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcArcDescComponent) }],\n    standalone: false\n})\nexport class AcArcDescComponent extends BasicDesc {\n\n  constructor(arcDrawer: ArcDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(arcDrawer, layerService, computationCache, cesiumProperties);\n  }\n\n}\n","/**\n * Angular Cesium parent entity, all entities should inherit from it.\n * ```typescript\n * entity= new AcEntity({\n *  \tid: 0,\n *  \tname: 'click me',\n *  \tposition: Cartesian3.fromRadians(0.5, 0.5),\n * });\n * ```\n */\nexport class AcEntity {\n\n  /**\n   * Creates entity from a json\n   * @param json entity object\n   * @returns entity as AcEntity\n   */\n  static create(json?: any) {\n    if (json) {\n      return Object.assign(new AcEntity(), json);\n    }\n    return new AcEntity();\n  }\n\n  /**\n   * Creates entity from a json\n   * @param json (Optional) entity object\n   */\n  constructor(json?: any) {\n    Object.assign(this, json);\n  }\n}\n","import { ActionType } from './action-type.enum';\nimport { AcEntity } from './ac-entity';\n\n/**\n * Interface of  Angular2Cesium notification.\n * ac-layer receives an observer of AcNotifications\n */\nexport interface AcNotification {\n  id: string;\n  entity?: AcEntity;\n  actionType: ActionType;\n}\n\nexport class AcNotification {\n  id: string;\n  entity?: AcEntity;\n  actionType: ActionType;\n}\n","import * as Cesium from 'cesium';\n\nexport class MapLayerProviderOptions {\n  static ArcGisMapServer = Cesium.ArcGisMapServerImageryProvider;\n  static WebMapTileService = Cesium.WebMapTileServiceImageryProvider;\n  static MapTileService = Cesium.TileMapServiceImageryProvider;\n  static WebMapService = Cesium.WebMapServiceImageryProvider;\n  static SingleTileImagery = Cesium.SingleTileImageryProvider;\n  static OpenStreetMap = Cesium.OpenStreetMapImageryProvider;\n  static BingMaps = Cesium.BingMapsImageryProvider;\n  static GoogleEarthEnterpriseMaps = Cesium.GoogleEarthEnterpriseMapsProvider;\n  static MapBox = Cesium.MapboxImageryProvider;\n  static MapboxStyleImageryProvider = Cesium.MapboxStyleImageryProvider;\n  static UrlTemplateImagery = Cesium.UrlTemplateImageryProvider;\n  static OFFLINE = null;\n}\n","import * as Cesium from 'cesium';\n\nexport class MapTerrainProviderOptions {\n  static CesiumTerrain = Cesium.CesiumTerrainProvider;\n  static ArcGISTiledElevation = Cesium.ArcGISTiledElevationTerrainProvider;\n  static GoogleEarthEnterprise = Cesium.GoogleEarthEnterpriseTerrainProvider;\n  static VRTheWorld = Cesium.VRTheWorldTerrainProvider;\n  static Ellipsoid = Cesium.EllipsoidTerrainProvider;\n  static WorldTerrain = Cesium.createWorldTerrainAsync;\n}\n","import { Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';\nimport { buildModuleUrl } from 'cesium';\nimport { CesiumService } from '../../services/cesium/cesium.service';\nimport { Checker } from '../../utils/checker';\nimport { MapLayerProviderOptions } from '../../models';\ndeclare var Cesium: any;\n\n/**\n *  This component is used for adding a map provider service to the map (ac-map)\n *  options according to selected map provider MapLayerProviderOptions enum.\n *  additional setting can be done with cesium imageryLayer (exposed as class member)\n *  check out: https://cesiumjs.org/Cesium/Build/Documentation/ImageryLayer.html\n *  and: https://cesiumjs.org/Cesium/Build/Documentation/ImageryLayerCollection.html\n *\n *\n *  __Usage :__\n *  ```\n *    <ac-map-layer-provider [options]=\"optionsObject\" [provider]=\"myProvider\">\n *    </ac-map-layer-provider>\n *  ```\n */\n@Component({\n    selector: 'ac-map-layer-provider',\n    template: '',\n    standalone: false\n})\nexport class AcMapLayerProviderComponent implements OnInit, OnChanges, OnDestroy {\n\n  /**\n   * refer to cesium docs for details https://cesiumjs.org/Cesium/Build/Documentation/ImageryProvider.html\n   */\n  @Input()\n  options: { url?: string } = {};\n\n  /**\n   * the provider\n   */\n  @Input()\n  provider: any = MapLayerProviderOptions.OFFLINE;\n\n  /**\n   * index (optional) - The index to add the layer at. If omitted, the layer will added on top of all existing layers.\n   */\n  @Input()\n  index: Number;\n\n  /**\n   * show (optional) - Determines if the map layer is shown.\n   */\n  @Input()\n  show = true;\n\n  /**\n   * The alpha blending value of this layer: 0.0 to 1.0\n   */\n  @Input()\n  alpha = 1.0;\n\n  /**\n   * The brightness of this layer: 0.0 to 1.0\n   */\n  @Input()\n  brightness = 1.0;\n\n  /**\n   * The contrast of this layer: 0.0 to 1.0\n   */\n  @Input()\n  contrast = 1.0;\n\n  public imageryLayer: any;\n  public imageryLayersCollection: any;\n  public layerProvider: any;\n\n  constructor(private cesiumService: CesiumService) {\n    this.imageryLayersCollection = this.cesiumService.getScene().imageryLayers;\n  }\n\n  private createOfflineMapProvider() {\n    return Cesium.createTileMapServiceImageryProvider({\n      url: buildModuleUrl('Assets/Textures/NaturalEarthII')\n    });\n  }\n\n  ngOnInit() {\n    if (!Checker.present(this.options.url) && this.provider !== MapLayerProviderOptions.OFFLINE) {\n      throw new Error('options must have a url');\n    }\n    switch (this.provider) {\n      case MapLayerProviderOptions.WebMapService:\n      case MapLayerProviderOptions.WebMapTileService:\n      case MapLayerProviderOptions.ArcGisMapServer:\n      case MapLayerProviderOptions.SingleTileImagery:\n      case MapLayerProviderOptions.BingMaps:\n      case MapLayerProviderOptions.GoogleEarthEnterpriseMaps:\n      case MapLayerProviderOptions.MapBox:\n      case MapLayerProviderOptions.MapboxStyleImageryProvider:\n      case MapLayerProviderOptions.UrlTemplateImagery:\n      case MapLayerProviderOptions.MapTileService:\n      case MapLayerProviderOptions.OpenStreetMap:\n        this.layerProvider = new this.provider(this.options);\n        break;\n      case MapLayerProviderOptions.OFFLINE:\n        this.layerProvider = this.createOfflineMapProvider();\n        break;\n      default:\n        console.log('ac-map-layer-provider: [provider] wasn\\'t found. setting OFFLINE provider as default');\n        this.layerProvider = this.createOfflineMapProvider();\n        break;\n    }\n    if (this.show) {\n      this.imageryLayer = this.imageryLayersCollection.addImageryProvider(this.layerProvider, this.index);\n      this.imageryLayer.alpha = this.alpha;\n      this.imageryLayer.contrast = this.contrast;\n      this.imageryLayer.brightness = this.brightness;\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['show'] && !changes['show'].isFirstChange()) {\n      const showValue = changes['show'].currentValue;\n      if (showValue) {\n        if (this.imageryLayer) {\n          this.imageryLayersCollection.add(this.imageryLayer, this.index);\n        } else {\n          this.imageryLayer = this.imageryLayersCollection.addImageryProvider(this.layerProvider, this.index);\n          this.imageryLayer.alpha = this.alpha;\n          this.imageryLayer.contrast = this.contrast;\n          this.imageryLayer.brightness = this.brightness;\n        }\n      } else if (this.imageryLayer) {\n        this.imageryLayersCollection.remove(this.imageryLayer, false);\n      }\n    }\n\n    if (changes['alpha'] && !changes['alpha'].isFirstChange() && this.imageryLayer) {\n      this.imageryLayer.alpha = this.alpha;\n    }\n    if (changes['contrast'] && !changes['contrast'].isFirstChange() && this.imageryLayer) {\n      this.imageryLayer.contrast = this.contrast;\n    }\n    if (changes['brightness'] && !changes['brightness'].isFirstChange() && this.imageryLayer) {\n      this.imageryLayer.brightness = this.brightness;\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.imageryLayer) {\n      this.imageryLayersCollection.remove(this.imageryLayer, true);\n    }\n  }\n}\n","import { Component, OnInit, Input, OnChanges, SimpleChanges, OnDestroy } from '@angular/core';\nimport { CesiumService } from '../../services/cesium/cesium.service';\nimport { Checker } from '../../utils/checker';\nimport { MapTerrainProviderOptions } from '../../models/map-terrain-provider-options.enum';\n\n/**\n *  This component is used for adding a terrain provider service to the map (ac-map)\n *  options according to selected terrain provider MapTerrainProviderOptions enum.\n *\n *\n *  __Usage :__\n *  ```\n *    <ac-map-terrain-provider [options]=\"optionsObject\" [provider]=\"myProvider\">\n *    </ac-map-terrain-provider>\n *  ```\n */\n@Component({\n    selector: 'ac-map-terrain-provider',\n    template: '',\n    standalone: false\n})\nexport class AcMapTerrainProviderComponent implements OnInit, OnChanges, OnDestroy {\n\n  /**\n   * refer to cesium docs for details https://cesiumjs.org/Cesium/Build/Documentation/TerrainProvider.html\n   */\n  @Input()\n  options: { url?: string } = {};\n\n  /**\n   * the provider\n   */\n  @Input()\n  provider: any;\n\n  /**\n   * show (optional) - Determines if the map layer is shown.\n   */\n  @Input()\n  show = true;\n\n  private terrainProvider: any;\n  private defaultTerrainProvider: any;\n\n  constructor(private cesiumService: CesiumService) {\n  }\n\n  ngOnInit(): void {\n    if (!Checker.present(this.options.url)\n      && this.provider !== MapTerrainProviderOptions.Ellipsoid\n      && this.provider !== MapTerrainProviderOptions.WorldTerrain) {\n      throw new Error('options must have a url');\n    }\n    this.defaultTerrainProvider = this.cesiumService.getViewer().terrainProvider;\n    switch (this.provider) {\n      case MapTerrainProviderOptions.CesiumTerrain:\n      case MapTerrainProviderOptions.ArcGISTiledElevation:\n      case MapTerrainProviderOptions.GoogleEarthEnterprise:\n      case MapTerrainProviderOptions.VRTheWorld:\n      case MapTerrainProviderOptions.Ellipsoid:\n        this.terrainProvider = new this.provider(this.options);\n        break;\n      case MapTerrainProviderOptions.WorldTerrain:\n        this.terrainProvider = this.provider(this.options);\n        break;\n      default:\n        console.log('ac-map-terrain-provider: [provider] wasn\\'t found. setting OFFLINE provider as default');\n        this.terrainProvider = this.defaultTerrainProvider;\n        break;\n    }\n    if (this.show) {\n      this.cesiumService.getViewer().terrainProvider = this.terrainProvider;\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['show'] && !changes['show'].isFirstChange()) {\n      const showValue = changes['show'].currentValue;\n      if (showValue) {\n        if (this.terrainProvider) {\n          this.cesiumService.getViewer().terrainProvider = this.terrainProvider;\n        }\n      } else {\n        this.cesiumService.getViewer().terrainProvider = this.defaultTerrainProvider;\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.cesiumService.getViewer().terrainProvider = this.defaultTerrainProvider;\n  }\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { PointDrawerService } from '../../services/drawers/point-drawer/point-drawer.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\n\n/**\n *  This is a point implementation.\n *  The ac-label element must be a child of ac-layer element.\n *  The properties of props are the same as the properties of Entity and PointGraphics:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/PointGraphics.html\n *\n *  __Usage:__\n *  ```\n *   <ac-point-desc props=\"{\n *     pixelSize : point.pixelSize, //optional\n *     position : point.positions,\n *     color : point.color  //optional\n *   }\">\n *   </ac-point-desc>\n *  ```\n */\n@Component({\n    selector: 'ac-point-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcPointDescComponent) }],\n    standalone: false\n})\nexport class AcPointDescComponent extends BasicDesc {\n\n  constructor(pointDrawerService: PointDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(pointDrawerService, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component } from '@angular/core';\nimport { EntityOnMapComponent } from '../../services/entity-on-map/entity-on-map.component';\nimport { LabelDrawerService } from '../../services/drawers/label-drawer/label-drawer.service';\nimport { MapLayersService } from '../../services/map-layers/map-layers.service';\n\n/**\n *  This is a label implementation.\n *  The ac-label element must be a child of ac-map element.\n *  The properties of props are the same as the properties of Entity and LabelGraphics:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/LabelGraphics.html\n *\n *  __Usage:__\n *  ```\n *  <ac-label [props]=\"{\n *    position: position,\n *    text: 'labelText',\n *    font: '30px sans-serif',\n *    fillColor : aquamarine\n *  }\">\n *  </ac-label>;\n *  ```\n */\n\n@Component({\n    selector: 'ac-label',\n    template: '',\n    standalone: false\n})\nexport class AcLabelComponent extends EntityOnMapComponent {\n\n  constructor(labelDrawer: LabelDrawerService, mapLayers: MapLayersService) {\n    super(labelDrawer, mapLayers);\n  }\n}\n","import { Component } from '@angular/core';\nimport { EntityOnMapComponent } from '../../services/entity-on-map/entity-on-map.component';\nimport { MapLayersService } from '../../services/map-layers/map-layers.service';\nimport { PolylineDrawerService } from '../../services/drawers/polyline-drawer/polyline-drawer.service';\n\n/**\n *  This is a polyline implementation.\n *  The ac-label element must be a child of ac-map element.\n *  The properties of props are the same as the properties of Polyline Primitive:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Polyline.html\n *\n *  __Usage:__\n *  ```\n *  <ac-polyline [props]=\"{\n *    position: position,\n *    text: 'labelText',\n *    font: '30px sans-serif'\n *    color: Color.GREEN\n *  }\">;\n *  </ac-polyline>\n *  ```\n */\n\n@Component({\n    selector: 'ac-polyline',\n    template: '',\n    standalone: false\n})\nexport class AcPolylineComponent extends EntityOnMapComponent {\n\n  constructor(polylineDrawer: PolylineDrawerService, mapLayers: MapLayersService) {\n    super(polylineDrawer, mapLayers);\n  }\n}\n","import { Component } from '@angular/core';\nimport { EntityOnMapComponent } from '../../services/entity-on-map/entity-on-map.component';\nimport { EllipseDrawerService } from '../../services/drawers/ellipse-drawer/ellipse-drawer.service';\nimport { MapLayersService } from '../../services/map-layers/map-layers.service';\n\n/**\n *  This is an ellipse implementation.\n *  The element must be a child of ac-map element.\n *  The properties of props are the same as the properties of Entity and EllipseGraphics:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/EllipseGraphics.html\n *\n *  __Usage:__\n *  ```\n *  <ac-ellipse [props]=\"{\n *    position: position,\n *    semiMajorAxis:40000.0,\n *    semiMinorAxis:25000.0,\n *    rotation : 0.785398\n *  }\">\n *  </ac-ellipse>\n *  ```\n */\n\n@Component({\n    selector: 'ac-ellipse',\n    template: '',\n    standalone: false\n})\nexport class AcEllipseComponent extends EntityOnMapComponent {\n\n  constructor(ellipseDrawer: EllipseDrawerService, mapLayers: MapLayersService) {\n    super(ellipseDrawer, mapLayers);\n  }\n}\n","import { Component } from '@angular/core';\nimport { EntityOnMapComponent } from '../../services/entity-on-map/entity-on-map.component';\nimport { PointDrawerService } from '../../services/drawers/point-drawer/point-drawer.service';\nimport { MapLayersService } from '../../services/map-layers/map-layers.service';\n\n/**\n *  This is a point implementation.\n *  The ac-label element must be a child of ac-map element.\n *  The properties of props are the same as the properties of Entity and PointGraphics:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/PointGraphics.html\n *\n *  __Usage:__\n *  ```\n *  <ac-point [props]=\"{\n *    position: position,\n *    width: 3\n *  }\">\n *  </ac-point>\n *  ```\n */\n\n@Component({\n    selector: 'ac-point',\n    template: '',\n    standalone: false\n})\nexport class AcPointComponent extends EntityOnMapComponent {\n\n  constructor(pointDrawer: PointDrawerService, mapLayers: MapLayersService) {\n    super(pointDrawer, mapLayers);\n  }\n}\n","import { Component } from '@angular/core';\nimport { EntityOnMapComponent } from '../../services/entity-on-map/entity-on-map.component';\nimport { EllipseDrawerService } from '../../services/drawers/ellipse-drawer/ellipse-drawer.service';\nimport { MapLayersService } from '../../services/map-layers/map-layers.service';\n\n/**\n *  This is a circle implementation.\n *  The element must be a child of ac-map element.\n *  semiMajorAxis ans semiMinorAxis are replaced with radius property.\n *  All other properties of props are the same as the properties of Entity and EllipseGraphics:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/EllipseGraphics.html\n *\n *  __Usage:__\n *  ```\n *  <ac-circle [props]=\"{\n *    position: position,\n *    radius:40000.0,\n *    granularity:0.03,\n *  }\">\n *  </ac-circle>\n *  ```\n */\n\n@Component({\n    selector: 'ac-circle',\n    template: '',\n    standalone: false\n})\nexport class AcCircleComponent extends EntityOnMapComponent {\n\n  constructor(ellipseDrawerService: EllipseDrawerService, mapLayers: MapLayersService) {\n    super(ellipseDrawerService, mapLayers);\n  }\n\n  private updateEllipseProps() {\n    this.props.semiMajorAxis = this.props.radius;\n    this.props.semiMinorAxis = this.props.radius;\n    this.props.rotation = 0.0;\n  }\n\n  drawOnMap() {\n    this.updateEllipseProps();\n    super.drawOnMap();\n  }\n\n  updateOnMap() {\n    this.updateEllipseProps();\n    super.updateOnMap();\n  }\n}\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { EntityOnMapComponent } from '../../services/entity-on-map/entity-on-map.component';\nimport { ArcDrawerService } from '../../services/drawers/arc-drawer/arc-drawer.service';\nimport { MapLayersService } from '../../services/map-layers/map-layers.service';\n\n/**\n *  This is an implementation of an arc.\n *  The element must be a child of ac-map element.\n *  An arc is not natively implemented in cesium.\n *\n *  __Usage :__\n *  ```\n *    <ac-arc-desc geometryProps=\"{\n *          center: arc.center,\n *          angle: arc.angle,\n *          delta: arc.delta,\n *          radius: arc.radius\n *       }\"\n *       instanceProps=\"{\n *          attributes: arc.attributes\n *       }\"\n *       primitiveProps=\"{\n *          appearance: arc.appearance\n *       }\">\n *    </ac-arc-desc>\n *    ```\n */\n\n@Component({\n    selector: 'ac-arc',\n    template: '',\n    standalone: false\n})\nexport class AcArcComponent extends EntityOnMapComponent implements OnChanges {\n\n  @Input()\n  geometryProps: any;\n  @Input()\n  instanceProps: any;\n  @Input()\n  primitiveProps: any;\n\n  constructor(arcDrawer: ArcDrawerService, mapLayers: MapLayersService) {\n    super(arcDrawer, mapLayers);\n  }\n\n  updateOnMap() {\n    if (this.selfPrimitiveIsDraw) {\n      this.removeFromMap();\n      this.drawOnMap();\n    }\n  }\n\n  drawOnMap() {\n    this.selfPrimitiveIsDraw = true;\n    return this.selfPrimitive = this._drawer.add(this.geometryProps, this.instanceProps, this.primitiveProps);\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const geometryProps = changes['geometryProps'];\n    const instanceProps = changes['instanceProps'];\n    const primitiveProps = changes['primitiveProps'];\n    if (geometryProps.currentValue !== geometryProps.previousValue ||\n      instanceProps.currentValue !== instanceProps.previousValue ||\n      primitiveProps.currentValue !== primitiveProps.previousValue) {\n      this.updateOnMap();\n    }\n  }\n}\n","import { Component, forwardRef, OnInit } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { PolygonDrawerService } from '../../services/drawers/polygon-drawer/polygon-drawer.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\n\n/**\n *  This is a polygon implementation.\n *  The properties of props are the same as the properties of Entity and PolygonGraphics:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/PolygonGraphics.html\n *\n *  __Usage:__\n *  ```\n *    <ac-polygon-desc props=\"{\n *      hierarchy: polygon.hierarchy,\n *      material: polygon.material,\n *      height: polygon.height\n *    }\">\n *    </ac-polygon-desc>\n *  ```\n */\n@Component({\n    selector: 'ac-polygon-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcPolygonDescComponent) }],\n    standalone: false\n})\nexport class AcPolygonDescComponent extends BasicDesc implements OnInit {\n\n  constructor(polygonDrawer: PolygonDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(polygonDrawer, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component } from '@angular/core';\nimport { PolygonDrawerService } from '../../services/drawers/polygon-drawer/polygon-drawer.service';\nimport { EntityOnMapComponent } from '../../services/entity-on-map/entity-on-map.component';\nimport { MapLayersService } from '../../services/map-layers/map-layers.service';\n\n/**\n *  This is a polygon implementation.\n *  The ac-label element must be a child of ac-map element.\n *  _Set `height` prop for performance enhancement_\n *  The properties of props are the same as the properties of Entity and PolygonGraphics:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/PolygonGraphics.html\n *\n *  __Usage:__\n *  ```\n *    <ac-polygon props=\"{\n *      hierarchy: polygon.hierarchy,\n *      material: polygon.material,\n *      height: polygon.height\n *    }\">\n *    </ac-polygon>\n *  ```\n */\n@Component({\n    selector: 'ac-polygon',\n    template: '',\n    standalone: false\n})\nexport class AcPolygonComponent extends EntityOnMapComponent {\n  constructor(polygonDrawer: PolygonDrawerService, mapLayers: MapLayersService) {\n    super(polygonDrawer, mapLayers);\n  }\n}\n","import { Input, OnInit, Directive } from '@angular/core';\nimport { BasicDesc } from '../basic-desc/basic-desc.service';\nimport { LayerService } from '../layer-service/layer-service.service';\nimport { ComputationCache } from '../computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../cesium-properties/cesium-properties.service';\nimport { StaticPrimitiveDrawer } from '../drawers/static-dynamic/static-primitive-drawer/static-primitive-drawer.service';\nimport { AcEntity } from '../../models/ac-entity';\n\n@Directive()\nexport class BasicStaticPrimitiveDesc extends BasicDesc implements OnInit {\n  @Input()\n  geometryProps: any;\n  @Input()\n  instanceProps: any;\n  @Input()\n  primitiveProps: any;\n\n  private _geometryPropsEvaluator: Function;\n  private _instancePropsEvaluator: Function;\n  private _primitivePropsEvaluator: Function;\n\n  constructor(protected _staticPrimitiveDrawer: StaticPrimitiveDrawer, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(_staticPrimitiveDrawer, layerService, computationCache, cesiumProperties);\n  }\n\n  ngOnInit(): void {\n    this._layerService.registerDescription(this);\n\n    this._geometryPropsEvaluator = this._cesiumProperties.createEvaluator(this.geometryProps);\n    this._instancePropsEvaluator = this._cesiumProperties.createEvaluator(this.instanceProps);\n    this._primitivePropsEvaluator = this._cesiumProperties.createEvaluator(this.primitiveProps);\n  }\n\n  draw(context: any, id: string, entity: AcEntity): any {\n    const geometryProps = this._geometryPropsEvaluator(this._computationCache, context);\n    const instanceProps = this._instancePropsEvaluator(this._computationCache, context);\n    const primitiveProps = this._primitivePropsEvaluator(this._computationCache, context);\n\n    if (!this._cesiumObjectsMap.has(id)) {\n      const primitive = this._staticPrimitiveDrawer.add(geometryProps, instanceProps, primitiveProps);\n      primitive.acEntity = entity; // set the entity on the primitive for later usage\n      this._cesiumObjectsMap.set(id, primitive);\n    } else {\n      const primitive = this._cesiumObjectsMap.get(id);\n      this._staticPrimitiveDrawer.update(primitive, geometryProps, instanceProps, primitiveProps);\n    }\n  }\n}\n","import { Component } from '@angular/core';\nimport { LayerService } from '../../../services/layer-service/layer-service.service';\nimport { ComputationCache } from '../../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../../services/cesium-properties/cesium-properties.service';\nimport { BasicStaticPrimitiveDesc } from '../../../services/basic-primitive-desc/basic-static-primitive-desc.service';\nimport { StaticEllipseDrawerService } from '../../../services/drawers/static-dynamic/ellipse-drawer/ellipse-drawer.service';\n\n/**\n *\n * @deprecated use ac-ellipse-desc instead\n *\n *  This is a static (position, color, etc.. are not updated) implementation of an ellipse.\n *  __usage:__\n *  ```\n *  &lt;ac-static-ellipse-desc-desc\n *      geometryProps=\"{\n *          center: ellipse.geometry.center,\n *          semiMajorAxis: ellipse.geometry.semiMajorAxis,\n *          semiMinorAxis: ellipse.geometry.semiMinorAxis,\n *          height: ellipse.geometry.height,\n *          rotation: ellipse.geometry.rotation\n *      }\"\n *      instanceProps=\"{\n *          attributes: ellipse.attributes //Optional\n *      }\"\n *      primitiveProps=\"{\n *          appearance: ellipse.appearance //Optional\n *      }\"&gt;\n *  &lt;/ac-static-ellipse-desc-desc&gt;\n *  ```\n */\n@Component({\n    selector: 'ac-static-ellipse-desc',\n    template: '',\n    standalone: false\n})\nexport class AcStaticEllipseDescComponent extends BasicStaticPrimitiveDesc {\n  constructor(ellipseDrawer: StaticEllipseDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(ellipseDrawer, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component } from '@angular/core';\nimport { CesiumProperties } from '../../../services/cesium-properties/cesium-properties.service';\nimport { ComputationCache } from '../../../services/computation-cache/computation-cache.service';\nimport { LayerService } from '../../../services/layer-service/layer-service.service';\nimport { BasicDesc } from '../../../services/basic-desc/basic-desc.service';\nimport { DynamicEllipseDrawerService } from '../../../services/drawers/static-dynamic/ellipse-drawer/dynamic-ellipse-drawer.service';\n\n/**\n *\n *\n *  This is a dynamic(position is updatable) implementation of an ellipse.\n *\n *  __Usage :__\n *  ```\n *    &lt;ac-dynamic-ellipse-desc props=\"{\n *      center: data.position,\n *      semiMajorAxis:250000.0,\n *      semiMinorAxis:400000.0,\n *      rotation : 0.785398,\n *      width:3, // Optional\n *      granularity:0.08 // Optional\n *      }\"&gt;\n *    \">\n *    &lt;/ac-dynamic-ellipse-desc&gt;\n *  ```\n *  __param:__ {Cartesian3} center\n *  __param:__ {number} semiMajorAxis\n *  __param:__ {number} semiMinorAxis\n *  __param:__ {number} rotation\n *   __param__: {number} [1] width\n *   __param__: {number} [0.003] granularity\n */\n@Component({\n    selector: 'ac-dynamic-ellipse-desc',\n    template: '',\n    standalone: false\n})\nexport class AcDynamicEllipseDescComponent extends BasicDesc {\n  constructor(ellipseDrawer: DynamicEllipseDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(ellipseDrawer, layerService, computationCache, cesiumProperties);\n  }\n}\n","// tslint:disable\nimport { Component } from '@angular/core';\nimport { BasicDesc } from '../../../services/basic-desc/basic-desc.service';\nimport { LayerService } from '../../../services/layer-service/layer-service.service';\nimport { ComputationCache } from '../../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../../services/cesium-properties/cesium-properties.service';\nimport { DynamicPolylineDrawerService } from '../../../services/drawers/static-dynamic/dynamic-polyline-drawer/dynamic-polyline-drawer.service';\n\n// tslint:enable\n/**\n * @deprecated use ac-polylinc-desc instead\n *\n *  This is a dynamic(position is updatable) implementation of an polyline.\n *  The ac-dynamic-polyline-desc element must be a child of ac-layer element.\n *  __Usage:__\n *  ```\n *    &lt;ac-dynamic-polyline-desc props=\"{width : polyline.width, //optional\n *                                      positions: polyline.positions,\n *                                      material: polyline.material //optional\n *                                      }\"\n *    &gt;\n *    &lt;/ac-dynamic-polyline-desc&gt;\n * ```\n */\n@Component({\n    selector: 'ac-dynamic-polyline-desc',\n    template: '',\n    standalone: false\n})\nexport class AcDynamicPolylineDescComponent extends BasicDesc {\n\n  constructor(dynamicPolylineDrawerService: DynamicPolylineDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(dynamicPolylineDrawerService, layerService, computationCache, cesiumProperties);\n  }\n}\n","// tslint:disable\nimport { Component } from '@angular/core';\nimport { LayerService } from '../../../services/layer-service/layer-service.service';\nimport { ComputationCache } from '../../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../../services/cesium-properties/cesium-properties.service';\nimport { BasicStaticPrimitiveDesc } from '../../../services/basic-primitive-desc/basic-static-primitive-desc.service';\nimport { StaticPolygonDrawerService } from '../../../services/drawers/static-dynamic/static-polygon-drawer/polygon-drawer.service';\n\n// tslint:enable\n/**\n * @deprecated use ac-ploygon-desc instead\n *\n *  This is a static (position, color, etc.. are not updated) implementation of a polygon.\n *  __Usage:__\n *  ```\n *    &lt;ac-static-polygon-desc\n *          geometryProps=\"{\n *                     polygonHierarchy: polygon.geometry.polygonHierarchy,\n *                     height: polygon.geometry.height,\n *                     granularity: polygon.geometry.granularity\n *                 }\"\n *          instanceProps=\"{\n *                     attributes: polygon.attributes\n *                 }\"\n *          primitiveProps=\"{\n *                     appearance: polygon.appearance\n *                 }\"\n *    &gt;&lt;/ac-static-polygon-desc&gt;\n *    ```\n */\n@Component({\n    selector: 'ac-static-polygon-desc',\n    template: '',\n    standalone: false\n})\nexport class AcStaticPolygonDescComponent extends BasicStaticPrimitiveDesc {\n  constructor(polygonDrawer: StaticPolygonDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(polygonDrawer, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component } from '@angular/core';\nimport { LayerService } from '../../../services/layer-service/layer-service.service';\nimport { ComputationCache } from '../../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../../services/cesium-properties/cesium-properties.service';\nimport { BasicStaticPrimitiveDesc } from '../../../services/basic-primitive-desc/basic-static-primitive-desc.service';\nimport { StaticCircleDrawerService } from '../../../services/drawers/static-dynamic/static-circle-drawer/static-circle-drawer.service';\n\n/**\n * @deprecated use ac-circle-desc\n *\n *  This is a static (position, color, etc.. are not updated) implementation of an circle.\n *  __usage:__\n *  ```\n *    &lt;ac-static-circle-desc\n *      geometryProps=\"{\n *          center: circle.geometry.center,\n *          radius: circle.geometry.radius,\n *      }\"\n *      instanceProps=\"{\n *          attributes: circle.attributes //Optional\n *      }\"\n *      primitiveProps=\"{\n *          appearance: circle.appearance //Optional\n *      }\"&gt;\n *    &lt;/ac-static-circle-desc&gt;\n *    ```\n */\n@Component({\n    selector: 'ac-static-circle',\n    template: '',\n    standalone: false\n})\nexport class AcStaticCircleDescComponent extends BasicStaticPrimitiveDesc {\n  constructor(staticCircleDrawer: StaticCircleDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(staticCircleDrawer, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component } from '@angular/core';\nimport { CesiumProperties } from '../../../services/cesium-properties/cesium-properties.service';\nimport { ComputationCache } from '../../../services/computation-cache/computation-cache.service';\nimport { LayerService } from '../../../services/layer-service/layer-service.service';\nimport { BasicDesc } from '../../../services/basic-desc/basic-desc.service';\nimport { DynamicEllipseDrawerService } from '../../../services/drawers/static-dynamic/ellipse-drawer/dynamic-ellipse-drawer.service';\n\n/**\n * @deprecated use ac-circle-desc instead\n *\n *  This is a dynamic(position is updatable) implementation of an circle.\n __Usage :__\n *  ```\n *    &lt;ac-dynamic-circle-desc props=\"{\n *      center: data.position,\n *      radius: 5\n *      rotation : 0.785398,\n *      width:3, // Optional\n *      granularity:0.08 // Optional\n *      }\"&gt;\n *    &lt;/ac-dynamic-circle-desc&gt;\n *  ```\n *\n *  __param__: {Cartesian3} center\n *   __param__: {number} rotation\n *   __param__: {number} radius in meters\n *   __param__: {number} [1] width\n *   __param__: {number} [0.003] granularity\n */\n@Component({\n    selector: 'ac-dynamic-circle-desc',\n    template: '',\n    standalone: false\n})\nexport class AcDynamicCircleDescComponent extends BasicDesc {\n  constructor(ellipseDrawer: DynamicEllipseDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(ellipseDrawer, layerService, computationCache, cesiumProperties);\n  }\n\n  protected _propsEvaluator(context: Object): any {\n    const cesiumProps = super._propsEvaluator(context);\n\n    cesiumProps.semiMajorAxis = cesiumProps.radius;\n    cesiumProps.semiMinorAxis = cesiumProps.radius;\n\n    return cesiumProps;\n  }\n}\n","// tslint:disable\nimport { Component } from '@angular/core';\nimport { StaticPolylineDrawerService } from '../../../services/drawers/static-dynamic/static-polyline-drawer/static-polyline-drawer.service';\nimport { LayerService } from '../../../services/layer-service/layer-service.service';\nimport { CesiumProperties } from '../../../services/cesium-properties/cesium-properties.service';\nimport { ComputationCache } from '../../../services/computation-cache/computation-cache.service';\nimport { BasicStaticPrimitiveDesc } from '../../../services/basic-primitive-desc/basic-static-primitive-desc.service';\n\n// tslint:enable\n\n/**\n * @deprecated use ac-ployline-desc instead\n *\n *  This is a static implementation of an polyline.\n *  __usage:__\n *  ```\n *    &ltac-static-polyline-desc\n *            geometryProps=\"{\n *            \twidth: poly.geometry.width,\n *            \tpositions: poly.geometry.positions\n *            }\"\n *            instanceProps=\"{\n *              attributes: {\n *                  ColorGeometryInstanceAttribute.fromColor(Color.fromRandom())\n *              }\n *            }\"\n *            primitiveProps=\"{\n *              appearance: new PolylineColorAppearance()\n *    }\"&gt&lt/ac-static-polyline-desc&gt\n *  ```\n */\n@Component({\n    selector: 'ac-static-polyline-desc',\n    template: '',\n    standalone: false\n})\nexport class AcStaticPolylineDescComponent extends BasicStaticPrimitiveDesc {\n  constructor(polylineDrawerService: StaticPolylineDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(polylineDrawerService, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component, forwardRef, OnInit } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { ModelDrawerService } from '../../services/drawers/model-drawer/model-drawer.service';\n\n/**\n *  This is a model implementation.\n *  The ac-model element must be a child of ac-layer element.\n *  The properties of props are the same as the properties of Entity and ModelGraphics:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/ModelGraphics.html\n *\n *  __Usage:__\n *  ```\n *    <ac-model-desc props=\"{\n *       position : Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706),\n *       uri : '../../SampleData/models/CesiumGround/Cesium_Ground.gltf'\n *   }\n *    }\">\n *    </ac-model-desc>\n *  ```\n */\n@Component({\n    selector: 'ac-model-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcModelDescComponent) }],\n    standalone: false\n})\nexport class AcModelDescComponent extends BasicDesc implements OnInit {\n\n  constructor(modelDrawer: ModelDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(modelDrawer, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';\nimport { PrimitiveCollection, Cesium3DTileStyle } from 'cesium';\nimport { CesiumService } from '../../services/cesium/cesium.service';\nimport { Checker } from '../../utils/checker';\ndeclare var Cesium: any;\n\n/**\n *  This component is used for adding a 3d tileset layer to the map (ac-map).\n *  options according to `Cesium3DTileset` definition.\n *  check out: https://cesiumjs.org/Cesium/Build/Documentation/Cesium3DTileset.html\n *\n *\n *  __Usage :__\n *  ```\n *    <ac-3d-tile-layer [options]=\"optionsObject\">\n *    </ac-3d-tile-layer>\n *  ```\n */\n@Component({\n    selector: 'ac-3d-tile-layer',\n    template: '',\n    standalone: false\n})\nexport class AcTileset3dComponent implements OnInit, OnChanges, OnDestroy {\n  /**\n   * refer to cesium docs for details https://cesiumjs.org/Cesium/Build/Documentation/Cesium3DTileset.html\n   */\n  @Input()\n  options: { url: any } = { url: null };\n\n  /**\n   * index (optional) - The index to add the layer at. If omitted, the layer will added on top of all existing layers.\n   */\n  @Input()\n  index: Number;\n\n  /**\n   * show (optional) - Determines if the map layer is shown.\n   */\n  @Input()\n  show = true;\n\n  /**\n   * show (optional) - Sets 3Dtiles style.\n   */\n  @Input()\n  style: any;\n\n  public tilesetInstance: any = null;\n  private _3dtilesCollection: any;\n\n  constructor(private cesiumService: CesiumService) {\n  }\n\n  ngOnInit() {\n    if (!Checker.present(this.options.url)) {\n      throw new Error('Options must have a url');\n    }\n\n    this._3dtilesCollection = new PrimitiveCollection();\n    this.cesiumService.getScene().primitives.add(this._3dtilesCollection);\n\n\n    if (this.show) {\n      this.tilesetInstance = this._3dtilesCollection.add(Cesium.Cesium3DTileset.fromUrl(this.options.url), this.index);\n      if (this.style) {\n        this.tilesetInstance.style = new Cesium3DTileStyle(this.style);\n      }\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['show'] && !changes['show'].isFirstChange()) {\n      const showValue = changes['show'].currentValue;\n\n      if (showValue) {\n        if (this.tilesetInstance) {\n          this._3dtilesCollection.add(this.tilesetInstance, this.index);\n        } else {\n          this.tilesetInstance = this._3dtilesCollection.add(Cesium.Cesium3DTileset.fromUrl(this.options.url), this.index);\n          if (this.style) {\n            this.tilesetInstance.style = new Cesium3DTileStyle(this.style);\n          }\n        }\n      } else if (this.tilesetInstance) {\n        this._3dtilesCollection.remove(this.tilesetInstance, false);\n      }\n    }\n    if (changes['style'] && !changes['style'].isFirstChange()) {\n      const styleValue = changes['style'].currentValue;\n      if (this.tilesetInstance) {\n        this.tilesetInstance.style = new Cesium3DTileStyle(this.style);\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.tilesetInstance) {\n      this._3dtilesCollection.remove(this.tilesetInstance, false);\n    }\n  }\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { BoxDrawerService } from '../../services/drawers/box-dawer/box-drawer.service';\n\n/**\n *  This is a point implementation.\n *  The ac-box-desc element must be a child of ac-layer element.\n *  The properties of props are the same as the properties PointGraphics and the general properties\n *  of Entity (like `position`)\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/BoxGraphics.html\n *\n *  __Usage:__\n *  ```\n *   <ac-box-desc props=\"{\n *     show : point.show, //optional\n *     position : point.positions,\n *     material : point.color  //optional\n *   }\">\n *   </ac-box-desc>\n *  ```\n */\n@Component({\n    selector: 'ac-box-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcBoxDescComponent) }],\n    standalone: false\n})\nexport class AcBoxDescComponent extends BasicDesc {\n\n  constructor(drawerService: BoxDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(drawerService, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { CylinderDrawerService } from '../../services/drawers/cylinder-dawer/cylinder-drawer.service';\n\n/**\n *  This is a point implementation.\n *  The ac-box-desc element must be a child of ac-layer element.\n *  The properties of props are the same as the properties PointGraphics and the general properties\n *  of Entity (like `position`)\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/CylinderGraphics.html\n *\n *  __Usage:__\n *  ```\n *   <ac-cylinder-desc props=\"{\n *     show : cylinder.show, //optional\n *     position : cylinder.position,\n *     material : cylinder.color  //optional\n *   }\">\n *   </ac-cylinder-desc>\n *  ```\n */\n@Component({\n    selector: 'ac-cylinder-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcCylinderDescComponent) }],\n    standalone: false\n})\nexport class AcCylinderDescComponent extends BasicDesc {\n\n  constructor(drawerService: CylinderDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(drawerService, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { CorridorDrawerService } from '../../services/drawers/corridor-dawer/corridor-drawer.service';\n\n/**\n *  This is a point implementation.\n *  The ac-box-desc element must be a child of ac-layer element.\n *  The properties of props are the same as the properties PointGraphics and the general properties\n *  of Entity\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/CorridorGraphics.html\n *\n *  __Usage:__\n *  ```\n *   <ac-corridor-desc props=\"{\n *     show : point.show, //optional\n *     positions : point.positions,\n *     material : point.color  //optional\n *   }\">\n *   </ac-corridor-desc>\n *  ```\n */\n@Component({\n    selector: 'ac-corridor-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcCorridorDescComponent) }],\n    standalone: false\n})\nexport class AcCorridorDescComponent extends BasicDesc {\n\n  constructor(drawerService: CorridorDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(drawerService, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { EllipsoidDrawerService } from '../../services/drawers/ellipoid-drawer/ellipsoid-drawer.service';\n\n/**\n *  This is a point implementation.\n *  The ac-box-desc element must be a child of ac-layer element.\n *  The properties of props are the same as the properties PointGraphics and the general properties\n *  of Entity\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/EllipsoidGraphics.html\n *\n *  __Usage:__\n *  ```\n *   <ac-ellipsoid-desc props=\"{\n *     show : ellipsoid.show, //optional\n *     radii : ellipsoid.radii,\n *     material : ellipsoid.color  //optional\n *   }\">\n *   </ac-ellipsoid-desc>\n *  ```\n */\n@Component({\n    selector: 'ac-ellipsoid-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcEllipsoidDescComponent) }],\n    standalone: false\n})\nexport class AcEllipsoidDescComponent extends BasicDesc {\n\n  constructor(drawerService: EllipsoidDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(drawerService, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { PolylineVolumeDrawerService } from '../../services/drawers/polyline-volume-dawer/polyline-volume-drawer.service';\n\n/**\n *  This is a point implementation.\n *  The element must be a child of ac-layer element.\n *  The properties of props are the same as the properties PointGraphics and the general properties\n *  of Entity\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/PolylineVolumeGraphics.html\n *\n *  __Usage:__\n *  ```\n *   <ac-polyline-volume-desc props=\"{\n *     show : line.show, //optional\n *     positions : line.positions,\n *     material : line.color  //optional\n *   }\">\n *   </ac-polyline-volume-desc>\n *  ```\n */\n@Component({\n    selector: 'ac-polyline-volume-desc',\n    template: '',\n    standalone: false\n})\nexport class AcPolylineVolumeDescComponent extends BasicDesc {\n\n  constructor(drawerService: PolylineVolumeDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(drawerService, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { WallDrawerService } from '../../services/drawers/wall-dawer/wall-drawer.service';\n\n/**\n *  This is a point implementation.\n *  The ac-box-desc element must be a child of ac-layer element.\n *  The properties of props are the same as the properties PointGraphics and the general properties\n *  of Entity\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/WallGraphics.html\n *\n *  __Usage:__\n *  ```\n *   <ac-wall-desc props=\"{\n *     show : wall.show, //optional\n *     positions : wall.positions,\n *     material : wall.color  //optional\n *   }\">\n *   </ac-wall-desc>\n *  ```\n */\n@Component({\n    selector: 'ac-wall-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcWallDescComponent) }],\n    standalone: false\n})\nexport class AcWallDescComponent extends BasicDesc {\n\n  constructor(drawerService: WallDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(drawerService, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { RectangleDrawerService } from '../../services/drawers/rectangle-dawer/rectangle-drawer.service';\n\n/**\n *  This is a point implementation.\n *  The ac-rectangle-desc element must be a child of ac-layer element.\n *  The properties of props are the same as the properties RectangleGraphics and the general properties\n *  of Entity\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/RectangleGraphics.html\n *\n *  __Usage:__\n *  ```\n *   <ac-rectangle-desc props=\"{\n *     show : rectangle.show, //optional\n *     coordinates : rectangle.positions,\n *     material : rectangle.color  //optional\n *   }\">\n *   </ac-rectangle-desc>\n *  ```\n */\n@Component({\n    selector: 'ac-rectangle-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcRectangleDescComponent) }],\n    standalone: false\n})\nexport class AcRectangleDescComponent extends BasicDesc {\n\n  constructor(drawerService: RectangleDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(drawerService, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { BillboardPrimitiveDrawerService } from '../../services/drawers/billboard-primitive-drawer/billboard-primitive-drawer.service';\n\n/**\n *  This is a billboard primitive implementation.\n *  The element must be a child of ac-layer element.\n *  The properties of props are:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Billboard.html\n *\n *  __Usage :__\n *  ```\n *    <ac-billboard-primitive-desc props=\"{\n *      image: track.image,\n *      position: track.position,\n *      scale: track.scale,\n *      color: track.color,\n *      name: track.name\n *    }\">\n *    </ac-billboard-primitive-desc>\n *  ```\n */\n\n@Component({\n    selector: 'ac-billboard-primitive-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcBillboardPrimitiveDescComponent) }],\n    standalone: false\n})\nexport class AcBillboardPrimitiveDescComponent extends BasicDesc {\n\n  constructor(billboardPrimitiveDrawer: BillboardPrimitiveDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(billboardPrimitiveDrawer, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { LabelPrimitiveDrawerService } from '../../services/drawers/label-primitive-drawer/label-primitive-drawer.service';\n\n/**\n *  This is a label primitive implementation.\n *  The ac-label element must be a child of ac-layer element.\n *  The properties of props are:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Label.html\n *\n *  __Usage :__\n *  ```\n *    <ac-label-primitive-desc props=\"{\n *      position: track.position,\n *      pixelOffset : [-15,20] | pixelOffset,\n *      text: track.name,\n *      font: '15px sans-serif'\n *    }\">\n *    </ac-label-primitive-desc>\n *  ```\n */\n\n@Component({\n    selector: 'ac-label-primitive-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcLabelPrimitiveDescComponent) }],\n    standalone: false\n})\nexport class AcLabelPrimitiveDescComponent extends BasicDesc {\n\n  constructor(labelPrimitiveDrawer: LabelPrimitiveDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(labelPrimitiveDrawer, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { PolylinePrimitiveDrawerService } from '../../services/drawers/polyline-primitive-drawer/polyline-primitive-drawer.service';\n\n/**\n *  This is a polyline primitive implementation.\n *  The ac-label element must be a child of ac-map element.\n *  The properties of props are the same as the properties of Polyline Primitive:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Polyline.html\n *\n *  __Usage:__\n *  ```\n *    <ac-polyline-primitive-desc props=\"{\n *      width : polyline.width,\n *      positions: polyline.positions,\n *      material: polyline.material\n *    }\">\n *    </ac-polyline-primitive-desc>\n * ```\n */\n@Component({\n    selector: 'ac-polyline-primitive-desc',\n    template: '',\n    providers: [{ provide: BasicDesc, useExisting: forwardRef(() => AcPolylinePrimitiveDescComponent) }],\n    standalone: false\n})\nexport class AcPolylinePrimitiveDescComponent extends BasicDesc {\n\n  constructor(polylinePrimitiveDrawerService: PolylinePrimitiveDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(polylinePrimitiveDrawerService, layerService, computationCache, cesiumProperties);\n  }\n}\n","/**\n * Fix for the constant entity shadowing.\n * PR in Cesium repo: https://github.com/AnalyticalGraphicsInc/cesium/pull/5736\n */\nimport { Color, AssociativeArray, defined, ColorGeometryInstanceAttribute,  DistanceDisplayCondition,\n  DistanceDisplayConditionGeometryInstanceAttribute, ShowGeometryInstanceAttribute, Primitive,\n  ShadowMode, ColorMaterialProperty\n } from 'cesium';\n declare var Cesium: any;\n\n// tslint:disable\n// const AssociativeArray = AssociativeArray;\n// const Color = Color;\n// const ColorGeometryInstanceAttribute = ColorGeometryInstanceAttribute;\n// const defined = defined;\n// const DistanceDisplayCondition = DistanceDisplayCondition;\n// const DistanceDisplayConditionGeometryInstanceAttribute = DistanceDisplayConditionGeometryInstanceAttribute;\n// const ShowGeometryInstanceAttribute = ShowGeometryInstanceAttribute;\n// const Primitive = Primitive;\n// const ShadowMode = ShadowMode;\n// const BoundingSphereState = BoundingSphereState;\n// const ColorMaterialProperty = ColorMaterialProperty;\n// const MaterialProperty = MaterialProperty;\n//  const Property = Property;\n\nvar colorScratch = new Color();\nvar distanceDisplayConditionScratch = new DistanceDisplayCondition();\nvar defaultDistanceDisplayCondition = new DistanceDisplayCondition();\n\nfunction Batch(primitives, translucent, appearanceType, depthFailAppearanceType, depthFailMaterialProperty, closed, shadows) {\n  this.translucent = translucent;\n  this.appearanceType = appearanceType;\n  this.depthFailAppearanceType = depthFailAppearanceType;\n  this.depthFailMaterialProperty = depthFailMaterialProperty;\n  this.depthFailMaterial = undefined;\n  this.closed = closed;\n  this.shadows = shadows;\n  this.primitives = primitives;\n  this.createPrimitive = false;\n  this.waitingOnCreate = false;\n  this.primitive = undefined;\n  this.oldPrimitive = undefined;\n  this.geometry = new AssociativeArray();\n  this.updaters = new AssociativeArray();\n  this.updatersWithAttributes = new AssociativeArray();\n  this.attributes = new AssociativeArray();\n  this.subscriptions = new AssociativeArray();\n  this.showsUpdated = new AssociativeArray();\n  this.itemsToRemove = [];\n  this.invalidated = false;\n  \n  var removeMaterialSubscription;\n  if (defined(depthFailMaterialProperty)) {\n    removeMaterialSubscription = depthFailMaterialProperty.definitionChanged.addEventListener(Batch.prototype.onMaterialChanged, this);\n  }\n  this.removeMaterialSubscription = removeMaterialSubscription;\n}\n\nBatch.prototype.onMaterialChanged = function () {\n  this.invalidated = true;\n};\n\nBatch.prototype.isMaterial = function (updater) {\n  var material = this.depthFailMaterialProperty;\n  var updaterMaterial = updater.depthFailMaterialProperty;\n  if (updaterMaterial === material) {\n    return true;\n  }\n  if (defined(material)) {\n    return material.equals(updaterMaterial);\n  }\n  return false;\n};\n\nBatch.prototype.add = function (updater, instance) {\n  var id = updater.id;\n  this.createPrimitive = true;\n  this.geometry.set(id, instance);\n  this.updaters.set(id, updater);\n  if (!updater.hasConstantFill || !updater.fillMaterialProperty.isConstant || !Cesium.Property.isConstant(updater.distanceDisplayConditionProperty)) {\n    this.updatersWithAttributes.set(id, updater);\n  } else {\n    var that = this;\n    this.subscriptions.set(id, updater.entity.definitionChanged.addEventListener(function (entity, propertyName, newValue, oldValue) {\n      if (propertyName === 'isShowing') {\n        that.showsUpdated.set(updater.id, updater);\n      }\n    }));\n  }\n};\n\nBatch.prototype.remove = function (updater) {\n  var id = updater.id;\n  this.createPrimitive = this.geometry.remove(id) || this.createPrimitive;\n  if (this.updaters.remove(id)) {\n    this.updatersWithAttributes.remove(id);\n    var unsubscribe = this.subscriptions.get(id);\n    if (defined(unsubscribe)) {\n      unsubscribe();\n      this.subscriptions.remove(id);\n    }\n  }\n};\n\nBatch.prototype.update = function (time) {\n  var isUpdated = true;\n  var removedCount = 0;\n  var primitive = this.primitive;\n  var primitives = this.primitives;\n  var attributes;\n  var i;\n  \n  if (this.createPrimitive) {\n    var geometries = this.geometry.values;\n    var geometriesLength = geometries.length;\n    if (geometriesLength > 0) {\n      if (defined(primitive)) {\n        if (!defined(this.oldPrimitive)) {\n          this.oldPrimitive = primitive;\n        } else {\n          primitives.remove(primitive);\n        }\n      }\n      \n      for (i = 0; i < geometriesLength; i++) {\n        var geometryItem = geometries[i];\n        var originalAttributes = geometryItem.attributes;\n        attributes = this.attributes.get(geometryItem.id.id);\n        \n        if (defined(attributes)) {\n          if (defined(originalAttributes.show)) {\n            originalAttributes.show.value = attributes.show;\n          }\n          if (defined(originalAttributes.color)) {\n            originalAttributes.color.value = attributes.color;\n          }\n          if (defined(originalAttributes.depthFailColor)) {\n            originalAttributes.depthFailColor.value = attributes.depthFailColor;\n          }\n        }\n      }\n      \n      var depthFailAppearance;\n      if (defined(this.depthFailAppearanceType)) {\n        if (defined(this.depthFailMaterialProperty)) {\n          this.depthFailMaterial = Cesium.MaterialProperty.getValue(time, this.depthFailMaterialProperty, this.depthFailMaterial);\n        }\n        depthFailAppearance = new this.depthFailAppearanceType({\n          material: this.depthFailMaterial,\n          translucent: this.translucent,\n          closed: this.closed\n        });\n      }\n      \n      primitive = new Primitive({\n        show: false,\n        asynchronous: true,\n        geometryInstances: geometries,\n        appearance: new this.appearanceType({\n          flat: this.shadows === ShadowMode.DISABLED || this.shadows === ShadowMode.CAST_ONLY,\n          translucent: this.translucent,\n          closed: this.closed\n        }),\n        depthFailAppearance: depthFailAppearance,\n        shadows: this.shadows\n      });\n      primitives.add(primitive);\n      isUpdated = false;\n    } else {\n      if (defined(primitive)) {\n        primitives.remove(primitive);\n        primitive = undefined;\n      }\n      var oldPrimitive = this.oldPrimitive;\n      if (defined(oldPrimitive)) {\n        primitives.remove(oldPrimitive);\n        this.oldPrimitive = undefined;\n      }\n    }\n    \n    this.attributes.removeAll();\n    this.primitive = primitive;\n    this.createPrimitive = false;\n    this.waitingOnCreate = true;\n  } else if (defined(primitive) && primitive.ready) {\n    primitive.show = true;\n    if (defined(this.oldPrimitive)) {\n      primitives.remove(this.oldPrimitive);\n      this.oldPrimitive = undefined;\n    }\n    \n    if (defined(this.depthFailAppearanceType) && !(this.depthFailMaterialProperty instanceof ColorMaterialProperty)) {\n      this.depthFailMaterial = Cesium.MaterialProperty.getValue(time, this.depthFailMaterialProperty, this.depthFailMaterial);\n      this.primitive.depthFailAppearance.material = this.depthFailMaterial;\n    }\n    \n    var updatersWithAttributes = this.updatersWithAttributes.values;\n    var length = updatersWithAttributes.length;\n    var waitingOnCreate = this.waitingOnCreate;\n    for (i = 0; i < length; i++) {\n      var updater = updatersWithAttributes[i];\n      var instance = this.geometry.get(updater.id);\n      \n      attributes = this.attributes.get(instance.id.id);\n      if (!defined(attributes)) {\n        attributes = primitive.getGeometryInstanceAttributes(instance.id);\n        this.attributes.set(instance.id.id, attributes);\n      }\n      \n      if (!updater.fillMaterialProperty.isConstant || waitingOnCreate) {\n        var colorProperty = updater.fillMaterialProperty.color;\n        var resultColor = Cesium.Property.getValueOrDefault(colorProperty, time, Color.WHITE, colorScratch);\n        if (!Color.equals(attributes._lastColor, resultColor)) {\n          attributes._lastColor = Color.clone(resultColor, attributes._lastColor);\n          attributes.color = ColorGeometryInstanceAttribute.toValue(resultColor, attributes.color);\n          if ((this.translucent && attributes.color[3] === 255) || (!this.translucent && attributes.color[3] !== 255)) {\n            this.itemsToRemove[removedCount++] = updater;\n          }\n        }\n      }\n      \n      if (defined(this.depthFailAppearanceType) && updater.depthFailMaterialProperty instanceof ColorMaterialProperty && (!updater.depthFailMaterialProperty.isConstant || waitingOnCreate)) {\n        var depthFailColorProperty = updater.depthFailMaterialProperty.color;\n        var depthColor = Cesium.Property.getValueOrDefault(depthFailColorProperty, time, Color.WHITE, colorScratch);\n        if (!Color.equals(attributes._lastDepthFailColor, depthColor)) {\n          attributes._lastDepthFailColor = Color.clone(depthColor, attributes._lastDepthFailColor);\n          attributes.depthFailColor = ColorGeometryInstanceAttribute.toValue(depthColor, attributes.depthFailColor);\n        }\n      }\n      \n      var show = updater.entity.isShowing && (updater.hasConstantFill || updater.isFilled(time));\n      var currentShow = attributes.show[0] === 1;\n      if (show !== currentShow) {\n        attributes.show = ShowGeometryInstanceAttribute.toValue(show, attributes.show);\n      }\n      \n      var distanceDisplayConditionProperty = updater.distanceDisplayConditionProperty;\n      if (!Cesium.Property.isConstant(distanceDisplayConditionProperty)) {\n        var distanceDisplayCondition = Cesium.Property.getValueOrDefault(distanceDisplayConditionProperty, time, defaultDistanceDisplayCondition, distanceDisplayConditionScratch);\n        if (!DistanceDisplayCondition.equals(distanceDisplayCondition, attributes._lastDistanceDisplayCondition)) {\n          attributes._lastDistanceDisplayCondition = DistanceDisplayCondition.clone(distanceDisplayCondition, attributes._lastDistanceDisplayCondition);\n          attributes.distanceDisplayCondition = DistanceDisplayConditionGeometryInstanceAttribute.toValue(distanceDisplayCondition, attributes.distanceDisplayCondition);\n        }\n      }\n    }\n    \n    this.updateShows(primitive);\n    this.waitingOnCreate = false;\n  } else if (defined(primitive) && !primitive.ready) {\n    isUpdated = false;\n  }\n  this.itemsToRemove.length = removedCount;\n  return isUpdated;\n};\n\nBatch.prototype.updateShows = function (primitive) {\n  var showsUpdated = this.showsUpdated.values;\n  var length = showsUpdated.length;\n  for (var i = 0; i < length; i++) {\n    var updater = showsUpdated[i];\n    var instance = this.geometry.get(updater.id);\n    \n    var attributes = this.attributes.get(instance.id.id);\n    if (!defined(attributes)) {\n      attributes = primitive.getGeometryInstanceAttributes(instance.id);\n      this.attributes.set(instance.id.id, attributes);\n    }\n    \n    var show = updater.entity.isShowing;\n    var currentShow = attributes.show[0] === 1;\n    if (show !== currentShow) {\n      attributes.show = ShowGeometryInstanceAttribute.toValue(show, attributes.show);\n    }\n  }\n  this.showsUpdated.removeAll();\n};\n\nBatch.prototype.contains = function (updater) {\n  return this.updaters.contains(updater.id);\n};\n\nBatch.prototype.getBoundingSphere = function (updater, result) {\n  var primitive = this.primitive;\n  if (!primitive.ready) {\n    return Cesium.BoundingSphereState.PENDING;\n  }\n  var attributes = primitive.getGeometryInstanceAttributes(updater.entity);\n  if (!defined(attributes) || !defined(attributes.boundingSphere) ||//\n    (defined(attributes.show) && attributes.show[0] === 0)) {\n    return Cesium.BoundingSphereState.FAILED;\n  }\n  attributes.boundingSphere.clone(result);\n  return Cesium.BoundingSphereState.DONE;\n};\n\nBatch.prototype.removeAllPrimitives = function () {\n  var primitives = this.primitives;\n  \n  var primitive = this.primitive;\n  if (defined(primitive)) {\n    primitives.remove(primitive);\n    this.primitive = undefined;\n    this.geometry.removeAll();\n    this.updaters.removeAll();\n  }\n  \n  var oldPrimitive = this.oldPrimitive;\n  if (defined(oldPrimitive)) {\n    primitives.remove(oldPrimitive);\n    this.oldPrimitive = undefined;\n  }\n};\n\nBatch.prototype.destroy = function () {\n  var primitive = this.primitive;\n  var primitives = this.primitives;\n  if (defined(primitive)) {\n    primitives.remove(primitive);\n  }\n  var oldPrimitive = this.oldPrimitive;\n  if (defined(oldPrimitive)) {\n    primitives.remove(oldPrimitive);\n  }\n  if (defined(this.removeMaterialSubscription)) {\n    this.removeMaterialSubscription();\n  }\n};\n\n\nlet wasFixed = false;\n\nexport function fixCesiumEntitiesShadows() {\n  if (wasFixed) {\n    return;\n  }\n  Cesium.StaticGeometryColorBatch.prototype.add = function (time: any, updater: any) {\n    var items;\n    var translucent;\n    var instance = updater.createFillGeometryInstance(time);\n    if (instance.attributes.color.value[3] === 255) {\n      items = this._solidItems;\n      translucent = false;\n    } else {\n      items = this._translucentItems;\n      translucent = true;\n    }\n    \n    var length = items.length;\n    for (var i = 0; i < length; i++) {\n      var item = items[i];\n      if (item.isMaterial(updater)) {\n        item.add(updater, instance);\n        return;\n      }\n      \n    }\n    \n    var batch: any = new Batch(this._primitives, translucent, this._appearanceType, this._depthFailAppearanceType, updater.depthFailMaterialProperty, this._closed, this._shadows);\n    batch.add(updater, instance);\n    items.push(batch);\n  };\n  wasFixed = true;\n}\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { fixCesiumEntitiesShadows } from './StaticGeometryColorBatch';\n\nexport const ANGULAR_CESIUM_CONFIG = new InjectionToken('ANGULAR_CESIUM_CONFIG');\n\n@Injectable()\nexport class ConfigurationService {\n  constructor(@Optional() @Inject(ANGULAR_CESIUM_CONFIG) private config: any) {\n    const fixEntitiesShadows = config ? config.fixEntitiesShadows : true;\n    if (fixEntitiesShadows !== false) {\n      fixCesiumEntitiesShadows();\n    }\n  }\n}\n","import { defined, Cartesian2, Cartesian3, SceneTransforms } from 'cesium';\nimport { HtmlCollection } from '../collections';\n//import { Cartesian2 } from '../../angular-cesium/models/cartesian2';\n//import { Cartesian3 } from '../../angular-cesium/models/cartesian3';\n\nexport class HtmlPrimitive {\n\n  private _scene: any;\n  private _show: boolean;\n  private _position: Cartesian3;\n  private _lastPosition: Cartesian2;\n  private _pixelOffset: Cartesian2;\n  private _element: HTMLElement;\n  private _collection: HtmlCollection;\n  private _mapContainer;\n\n  constructor(options: any, collection: HtmlCollection = null) {\n    if (typeof options !== 'object') {\n      throw new Error('HtmlPrimitive ERROR: invalid html options!');\n    }\n\n    this.scene = options.scene;\n    this._mapContainer = options.mapContainer;\n    this.show = options.show || true;\n    this.position = options.position;\n    this.pixelOffset = options.pixelOffset;\n    this.element = options.element;\n    this.collection = collection;\n  }\n\n  set scene(scene: any) {\n    this._scene = scene;\n  }\n\n  set show(show: boolean) {\n    this._show = show;\n\n    if (defined(this.element)) {\n      if (show) {\n        this._element.style.display = 'block';\n      } else {\n        this._element.style.display = 'none';\n      }\n    }\n  }\n\n  get show(): boolean {\n    return this._show;\n  }\n\n  set position(position: Cartesian3) {\n    this._position = position;\n  }\n\n  get position(): Cartesian3 {\n    return this._position;\n  }\n\n  set pixelOffset(pixelOffset: Cartesian2) {\n    this._pixelOffset = pixelOffset;\n  }\n\n  get pixelOffset(): Cartesian2 {\n    return this._pixelOffset;\n  }\n\n  set element(element: HTMLElement) {\n    this._element = element;\n\n    if (defined(element)) {\n      this._mapContainer.appendChild(element);\n      this._element.style.position = 'absolute';\n      this._element.style.zIndex = Number.MAX_VALUE.toString();\n    }\n  }\n\n  get element(): HTMLElement {\n    return this._element;\n  }\n\n  set collection(collection: HtmlCollection) {\n    this._collection = collection;\n  }\n\n  get collection() {\n    return this._collection;\n  }\n\n  update() {\n    if (!defined(this._show) || !defined(this._element)) {\n      return;\n    }\n\n    let screenPosition = SceneTransforms.worldToWindowCoordinates(this._scene, new Cartesian3(this._position.x, this._position.y, this._position.z));\n\n    if (!defined(screenPosition)) {\n      screenPosition = new Cartesian2((-1000), (-1000));\n    } else if (defined(this._pixelOffset) && defined(this._pixelOffset.x) && defined(this._pixelOffset.y)) {\n      screenPosition.y += this._pixelOffset.y;\n      screenPosition.x += this._pixelOffset.x;\n    }\n\n    if (this._lastPosition && this._lastPosition.equals(screenPosition)) {\n      return;\n    }\n\n    this._element.style.top = `${screenPosition.y}px`;\n    this._element.style.left = `${screenPosition.x}px`;\n    this._lastPosition = screenPosition;\n  }\n\n  remove() {\n    if (this._element) {\n      this._element.remove();\n    }\n  }\n}\n","import { defined } from 'cesium';\nimport { HtmlPrimitive } from '../primitives';\n\nexport class HtmlCollection {\n  private _collection: HtmlPrimitive[] = [];\n\n  get length() {\n    return this._collection.length;\n  }\n\n  get(index: number) {\n    return this._collection[index];\n  }\n\n  add(options: any): HtmlPrimitive {\n    const html = new HtmlPrimitive(options, this);\n    this._collection.push(html);\n\n    return html;\n  }\n\n  remove(html: HtmlPrimitive): boolean {\n    const index = this._collection.indexOf(html);\n    if (index === (-1)) {\n      return false;\n    }\n\n    this._collection[index].remove();\n    this._collection.splice(index, 1);\n    return true;\n  }\n\n  update() {\n    for (let i = 0, len = this._collection.length; i < len; i++) {\n      this._collection[i].update();\n    }\n  }\n\n  removeAll() {\n    while (this._collection.length > 0) {\n      const html = this._collection.pop();\n      html.remove();\n    }\n  }\n\n  contains(html: HtmlPrimitive): boolean {\n    return defined(html) && html.collection === this;\n  }\n\n  destroy() {\n    this.removeAll();\n  }\n}\n","declare var Cesium: any;\nimport { HtmlPrimitive } from './primitives';\nimport { HtmlCollection } from './collections';\n\nexport class CesiumExtender {\n  static extend() {\n    Cesium.HtmlPrimitive = HtmlPrimitive;\n    Cesium.HtmlCollection = HtmlCollection;\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class AcHtmlManager {\n  private _entities: Map<any, any>;\n\n  constructor() {\n    this._entities = new Map<any, any>();\n  }\n\n  has(id: string): boolean {\n    return this._entities.has(id);\n  }\n\n  get(id: string): { entity: any, primitive: any } {\n    return this._entities.get(id);\n  }\n\n  addOrUpdate(id: any, info: { entity: any, primitive: any }) {\n    this._entities.set(id, info);\n  }\n\n  remove(id: string) {\n    this._entities.delete(id);\n  }\n\n  forEach(callback: any) {\n    this._entities.forEach(callback);\n  }\n}\n","import { ChangeDetectorRef, Directive, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { AcHtmlManager } from '../../services/ac-html-manager/ac-html-manager.service';\n\nexport class AcHtmlContext {\n  constructor(\n    public id: any,\n    public context: any\n  ) {\n  }\n}\n\n@Directive({\n    selector: '[acHtml]',\n    standalone: false\n})\nexport class AcHtmlDirective implements OnInit {\n\n  private _views = new Map<any, { viewRef: any, context: any }>();\n\n  constructor(\n    private _templateRef: TemplateRef<AcHtmlContext>,\n    private _viewContainerRef: ViewContainerRef,\n    private _changeDetector: ChangeDetectorRef,\n    private _layerService: LayerService,\n    private _acHtmlManager: AcHtmlManager\n  ) {\n  }\n\n  ngOnInit() {\n\n  }\n\n  private _handleView(id: any, primitive: any, entity: any) {\n    if (!this._views.has(id) && primitive.show) {\n      const context = new AcHtmlContext(id, {$implicit: entity});\n      const viewRef = this._viewContainerRef.createEmbeddedView(this._templateRef, context);\n      this._views.set(id, {viewRef, context});\n      this._changeDetector.detectChanges();\n    }  else if (this._views.has(id) && primitive.show) {\n      this._changeDetector.detectChanges();\n    }\n  }\n\n  addOrUpdate(id: any, primitive: any) {\n    const context = this._layerService.context;\n    const entity = context[this._layerService.getEntityName()];\n\n    if (this._views.has(id)) {\n      this._views.get(id).context.context.$implicit = entity;\n    }\n\n    this._acHtmlManager.addOrUpdate(id, {entity, primitive});\n    this._handleView(id, primitive, entity);\n  }\n\n  remove(id: any, primitive: any) {\n    if (!this._views.has(id)) {\n      return;\n    }\n\n    const {viewRef} = this._views.get(id);\n    this._viewContainerRef.remove(this._viewContainerRef.indexOf(viewRef));\n    this._views.delete(id);\n    this._acHtmlManager.remove(id);\n    primitive.element = null;\n  }\n}\n","import { Directive, ElementRef, Input, OnInit } from '@angular/core';\nimport { AcHtmlManager } from '../../services/ac-html-manager/ac-html-manager.service';\n\n@Directive({\n    selector: '[acHtmlContainer]',\n    standalone: false\n})\nexport class AcHtmlContainerDirective implements OnInit {\n\n  private _id: any;\n\n  constructor(\n    private _element: ElementRef,\n    private _acHtmlManager: AcHtmlManager\n  ) {\n  }\n\n  @Input()\n  set acHtmlContainer(id: string) {\n    this._id = id;\n  }\n\n  ngOnInit() {\n    if (this._id === undefined) {\n      throw new Error(`AcHtml container ERROR: entity id not defined`);\n    }\n\n    const entity = this._acHtmlManager.get(this._id);\n    entity.primitive.element = this._element.nativeElement;\n  }\n}\n","import { Component, ContentChild, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { HtmlDrawerService } from '../../services/drawers/html-drawer/html-drawer.service';\nimport { AcHtmlDirective } from '../../directives/ac-html/ac-html.directive';\nimport { AcHtmlManager } from '../../services/ac-html-manager/ac-html-manager.service';\n\n/**\n *  This is an html implementation.\n *  The ac-html element must be a child of ac-layer element.\n *  <br>\n *  [props] accepts position(Cartesian3) and show(boolean).\n *\n *  __Usage:__\n *  ```\n *  <ac-layer acFor=\"let html of htmls$\" [context]=\"this\">\n <ac-html-desc props=\"{position: html.position, show: html.show}\">\n <ng-template let-html>\n <div>\n <h1>This is ac-html {{html.name}}</h1>\n <button (click)=\"changeText(html, 'Test')\">change text</button>\n </div>\n </ng-template>\n </ac-html-desc>\n *  <ac-html [props]=\"{position: position, show: true}\">;\n *    <p>html element</p>\n *  </ac-html>\n *  ```\n */\n@Component({\n    selector: 'ac-html-desc',\n    providers: [AcHtmlManager],\n    template: `\n      <div *acHtml=\"let acHtmlEntityId = id; let acHtmlContext = context\">\n          <div [acHtmlContainer]=\"acHtmlEntityId\">\n              <ng-template [ngTemplateOutlet]=\"acHtmlTemplate\"\n                           [ngTemplateOutletContext]=\"acHtmlContext\"></ng-template>\n          </div>\n      </div>`,\n    standalone: false\n})\nexport class AcHtmlDescComponent extends BasicDesc implements OnInit {\n\n  @ViewChild(AcHtmlDirective, {static: true}) acHtmlCreator: AcHtmlDirective;\n  @ContentChild(TemplateRef, {static: true}) acHtmlTemplate: TemplateRef<any>;\n\n  constructor(htmlDrawer: HtmlDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(htmlDrawer, layerService, computationCache, cesiumProperties);\n  }\n\n  ngOnInit() {\n    super.ngOnInit();\n\n    if (!this.acHtmlCreator) {\n      throw new Error(`AcHtml desc ERROR: ac html directive not found.`);\n    }\n\n    if (!this.acHtmlTemplate) {\n      throw new Error(`AcHtml desc ERROR: html template not found.`);\n    }\n  }\n\n  draw(context: any, id: any): any {\n    const cesiumProps = this._propsEvaluator(context);\n    if (!this._cesiumObjectsMap.has(id)) {\n      const primitive = this._drawer.add(cesiumProps);\n      this._cesiumObjectsMap.set(id, primitive);\n      this.acHtmlCreator.addOrUpdate(id, primitive);\n    } else {\n      const primitive = this._cesiumObjectsMap.get(id);\n      this._drawer.update(primitive, cesiumProps);\n      this.acHtmlCreator.addOrUpdate(id, primitive);\n    }\n  }\n\n  remove(id: string): void {\n    const primitive = this._cesiumObjectsMap.get(id);\n    this._drawer.remove(primitive);\n    this._cesiumObjectsMap.delete(id);\n    this.acHtmlCreator.remove(id, primitive);\n  }\n\n  removeAll(): void {\n    this._cesiumObjectsMap.forEach(((primitive, id) => {\n      this.acHtmlCreator.remove(id, primitive);\n    }));\n    this._cesiumObjectsMap.clear();\n    this._drawer.removeAll();\n  }\n}\n","import {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport { AcNotification } from '../../models/ac-notification';\nimport { Subject, Subscription } from 'rxjs';\nimport { IDescription } from '../../models/description';\nimport { get } from 'lodash';\nimport { AcLayerComponent } from '../ac-layer/ac-layer.component';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\n\n/**\n *  This is component represents an array under `ac-layer`.\n *  The element must be a child of ac-layer element.\n *  + acFor `{string}` - get the tracked array and entityName (see the example).\n *  + idGetter `{Function}` - a function that gets the id for a given element in the array -should be defined for maximum performance.\n *  + show `{boolean}` - show/hide array's entities.\n *\n *  __Usage :__\n *  ```\n *<ac-layer acFor=\"let track of tracks$\" [show]=\"show\" [context]=\"this\" [store]=\"true\">\n *  <ac-array-desc acFor=\"let arrayItem of track.array\" [idGetter]=\"trackArrayIdGetter\">\n *    <ac-array-desc acFor=\"let innerArrayItem of arrayItem.innerArray\" [idGetter]=\"trackArrayIdGetter\">\n *      <ac-point-desc props=\"{\n *        position: innerArrayItem.pos,\n *        pixelSize: 10,\n *        color: getTrackColor(track),\n *        outlineColor: Color.BLUE,\n *        outlineWidth: 1\n *      }\">\n *      </ac-point-desc>\n *    </ac-array-desc>\n *  </ac-array-desc>\n *</ac-layer>\n *  ```\n */\n\n@Component({\n    selector: 'ac-array-desc',\n    template: `\n    <ac-layer #layer [acFor]=\"getAcForString()\"\n              [context]=\"layerService.context\"\n              [options]=\"layerService.options\"\n              [show]=\"layerService.show && show\"\n              [zIndex]=\"layerService.zIndex\">\n      <ng-content #content></ng-content>\n    </ac-layer>\n  `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class AcArrayDescComponent implements OnChanges, OnInit, AfterContentInit, OnDestroy, IDescription {\n\n  @Input() acFor: string;\n\n  @Input() idGetter: (item: any, index: number) => string;\n\n  @Input() show = true;\n  @ViewChild('layer', {static: true}) private layer: AcLayerComponent;\n  @ContentChildren(BasicDesc, {descendants: false}) private basicDescs: any;\n  @ContentChildren(AcArrayDescComponent, {descendants: false}) private arrayDescs: any;\n  private entitiesMap = new Map<string, string[]>();\n  private layerServiceSubscription: Subscription;\n  private id = 0;\n  private readonly acForRgx = /^let\\s+.+\\s+of\\s+.+$/;\n  entityName: string;\n  arrayPath: string;\n  arrayObservable$ = new Subject<AcNotification>();\n\n  constructor(public layerService: LayerService, private cd: ChangeDetectorRef) {\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['acFor'].firstChange) {\n      const acForString = changes['acFor'].currentValue;\n      if (!this.acForRgx.test(acForString)) {\n        throw new Error(`ac-layer: Invalid [acFor] syntax. Expected: [acFor]=\"let item of observable\" .Instead received: ${acForString}`);\n      }\n      const acForArr = changes['acFor'].currentValue.split(' ');\n      this.arrayPath = acForArr[3];\n      this.entityName = acForArr[1];\n    }\n  }\n\n  ngOnInit(): void {\n    if (this.layer) {\n      this.layer.getLayerService().cache = false;\n    }\n\n    this.layerServiceSubscription = this.layerService.layerUpdates().subscribe(() => {\n      this.cd.detectChanges();\n    });\n  }\n\n  ngAfterContentInit(): void {\n    this.layerService.context['arrayObservable$'] = this.arrayObservable$;\n    this.layerService.registerDescription(this);\n    this.basicDescs._results.forEach((component: BasicDesc) => {\n      component.setLayerService(this.layer.getLayerService());\n    });\n    this.arrayDescs._results.splice(0, 1);\n    this.arrayDescs._results.forEach((component: AcArrayDescComponent) => {\n      this.layerService.unregisterDescription(component);\n      this.layer.getLayerService().registerDescription(component);\n      component.layerService = this.layer.getLayerService();\n      component.setLayerService(this.layer.getLayerService());\n    });\n  }\n\n  ngOnDestroy(): void {\n    if (this.layerServiceSubscription) {\n      this.layerServiceSubscription.unsubscribe();\n    }\n  }\n\n  setLayerService(layerService: LayerService) {\n    this.layerService = layerService;\n  }\n\n  draw(context: any, id: string, contextEntity: any) {\n    const entitiesArray: any[] = get(context, this.arrayPath);\n    if (!entitiesArray) {\n      return;\n    }\n    const previousEntitiesIdArray = this.entitiesMap.get(id);\n    const entitiesIdArray: any[] = [];\n    this.entitiesMap.set(id, entitiesIdArray);\n\n    entitiesArray.forEach((item, index) => {\n      this.layerService.context[this.entityName] = item;\n      const arrayItemId = this.generateCombinedId(id, item, index);\n      entitiesIdArray.push(arrayItemId);\n      this.layer.update(contextEntity, arrayItemId);\n    });\n\n    if (previousEntitiesIdArray) {\n      const entitiesToRemove = this.idGetter ?\n        previousEntitiesIdArray.filter((entityId) => entitiesIdArray.indexOf(entityId) < 0) :\n        previousEntitiesIdArray;\n      if (entitiesToRemove) {\n        entitiesToRemove.forEach((entityId) => this.layer.remove(entityId));\n      }\n    }\n  }\n\n  remove(id: string) {\n    const entitiesIdArray = this.entitiesMap.get(id);\n    if (entitiesIdArray) {\n      entitiesIdArray.forEach((entityId) => this.layer.remove(entityId));\n    }\n    this.entitiesMap.delete(id);\n  }\n\n  removeAll() {\n    this.layer.removeAll();\n    this.entitiesMap.clear();\n  }\n\n  getAcForString() {\n    return `let ${this.entityName + '___temp'} of arrayObservable$`;\n  }\n\n  private generateCombinedId(entityId: string, arrayItem: any, index: number): string {\n    let arrayItemId;\n    if (this.idGetter) {\n      arrayItemId = this.idGetter(arrayItem, index);\n    } else {\n      arrayItemId = (this.id++) % Number.MAX_SAFE_INTEGER;\n    }\n    return entityId + arrayItemId;\n  }\n}\n","import { Component } from '@angular/core';\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\nimport { PointPrimitiveDrawerService } from '../../services/drawers/point-primitive-drawer/point-primitive-drawer.service';\n\n/**\n *  This is a label primitive implementation.\n *  The ac-label element must be a child of ac-layer element.\n *  The properties of props are:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Point.html\n *\n *  __Usage :__\n *  ```\n *    <ac-point-primitive-desc props=\"{\n *      position: track.position,\n *      color: Color.RED\n *    }\">\n *    </ac-point-primitive-desc>\n *  ```\n */\n\n@Component({\n    selector: 'ac-point-primitive-desc',\n    template: '',\n    standalone: false\n})\nexport class AcPointPrimitiveDescComponent extends BasicDesc {\n\n  constructor(pointPrimitiveDrawerService: PointPrimitiveDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(pointPrimitiveDrawerService, layerService, computationCache, cesiumProperties);\n  }\n}\n","import { Component } from '@angular/core';\nimport { EntityOnMapComponent } from '../../services/entity-on-map/entity-on-map.component';\nimport { MapLayersService } from '../../services/map-layers/map-layers.service';\nimport { PolylinePrimitiveDrawerService } from '../../services/drawers/polyline-primitive-drawer/polyline-primitive-drawer.service';\n\n/**\n *  This is a polyline implementation.\n *  The ac-label element must be a child of ac-map element.\n *  The properties of props are the same as the properties of Polyline Primitive:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Polyline.html\n *\n *  __Usage:__\n *  ```\n *  <ac-polyline [props]=\"{\n *    position: position,\n *    text: 'labelText',\n *    font: '30px sans-serif'\n *    color: Color.GREEN\n *  }\">;\n *  </ac-polyline>\n *  ```\n */\n\n@Component({\n    selector: 'ac-primitive-polyline',\n    template: '',\n    standalone: false\n})\nexport class AcPrimitivePolylineComponent extends EntityOnMapComponent {\n\n  constructor(polylineDrawer: PolylinePrimitiveDrawerService, mapLayers: MapLayersService) {\n    super(polylineDrawer, mapLayers);\n  }\n}\n","import { PixelOffsetPipe } from './pixel-offset/pixel-offset.pipe';\nimport { RadiansToDegreesPipe } from './radians-to-degrees/radians-to-degrees.pipe';\n\n// For angular parse usage\nexport default [\n  {pipeName: 'pixelOffset', pipeInstance: new PixelOffsetPipe()},\n  {pipeName: 'radiansToDegrees', pipeInstance: new RadiansToDegreesPipe()},\n];\n","import { Component, OnInit } from '@angular/core';\n\nimport { BasicDesc } from '../../services/basic-desc/basic-desc.service';\nimport { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';\nimport { ComputationCache } from '../../services/computation-cache/computation-cache.service';\nimport { CzmlDrawerService } from '../../services/drawers/czml-drawer/czml-drawer.service';\nimport { LayerService } from '../../services/layer-service/layer-service.service';\n\n/**\n *  This is a czml implementation.\n *  The ac-czml-desc element must be a child of ac-layer element.\n *\n *  See CZML Guide for the structure of props.czmlPacket:\n *  + https://github.com/AnalyticalGraphicsInc/czml-writer/wiki/CZML-Structure\n *\n *  Attention: the first czmlPacket in the stream needs to be a document\n *  with an id and a name attribute. See this example\n *  + https://cesiumjs.org/Cesium/Apps/Sandcastle/index.html?src=CZML%20Point%20-%20Time%20Dynamic.html&label=CZML\n *\n *  To see a working example, use the demo app and\n *  + uncomment <czml-layer></czml-layer> in demo-map.component.html\n *  + set the properties 'timeline', 'animation' and 'shouldAnimate' true in viewerOptions of demo-map.component.ts\n *\n *\n *  __Usage:__\n *  ```\n *    <ac-czml-desc props=\"{\n *      czmlPacket: czmlPacket\n *    }\">\n *    </ac-czml-desc>\n *  ```\n */\n@Component({\n    selector: 'ac-czml-desc',\n    template: '',\n    standalone: false\n})\nexport class AcCzmlDescComponent extends BasicDesc implements OnInit {\n  constructor(czmlDrawer: CzmlDrawerService, layerService: LayerService,\n              computationCache: ComputationCache, cesiumProperties: CesiumProperties) {\n    super(czmlDrawer, layerService, computationCache, cesiumProperties);\n  }\n\n\n}\n","import { Component } from '@angular/core';\nimport { RectangleDrawerService } from '../../services/drawers/rectangle-dawer/rectangle-drawer.service';\nimport { EntityOnMapComponent } from '../../services/entity-on-map/entity-on-map.component';\nimport { MapLayersService } from '../../services/map-layers/map-layers.service';\n\n/**\n *  This is a rectangle implementation.\n *  The ac-label element must be a child of ac-map element.\n *  The properties of props are the same as the properties of Entity and RectangleGraphics:\n *  + https://cesiumjs.org/Cesium/Build/Documentation/Entity.html\n *  + https://cesiumjs.org/Cesium/Build/Documentation/RectangleGraphics.html\n *\n *  __Usage:__\n *  ```\n *    <ac-rectangle props=\"{\n *      coordinates: rectangle.coordinates,\n *      material: rectangle.material,\n *      height: rectangle.height\n *    }\">\n *    </ac-rectangle>\n *  ```\n */\n@Component({\n    selector: 'ac-rectangle',\n    template: '',\n    standalone: false\n})\nexport class AcRectangleComponent extends EntityOnMapComponent {\n  constructor(rectangleDrawer: RectangleDrawerService, mapLayers: MapLayersService) {\n    super(rectangleDrawer, mapLayers);\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AcMapComponent } from './components/ac-map/ac-map.component';\nimport { AcLayerComponent } from './components/ac-layer/ac-layer.component';\nimport { AcBillboardComponent } from './components/ac-billboard/ac-billboard.component';\nimport { AcBillboardDescComponent } from './components/ac-billborad-desc/ac-billborad-desc.component';\nimport { AcEllipseDescComponent } from './components/ac-ellipse-desc/ac-ellipse-desc.component';\nimport { AcPolylineDescComponent } from './components/ac-polyline-desc/ac-polyline-desc.component';\nimport { Angular2ParseModule, PIPES_CONFIG } from '@auscope/angular2parse';\nimport { PixelOffsetPipe } from './pipes/pixel-offset/pixel-offset.pipe';\nimport { RadiansToDegreesPipe } from './pipes/radians-to-degrees/radians-to-degrees.pipe';\nimport { JsonMapper } from './services/json-mapper/json-mapper.service';\nimport { CesiumProperties } from './services/cesium-properties/cesium-properties.service';\nimport { AcLabelDescComponent } from './components/ac-label-desc/ac-label-desc.component';\nimport { UtilsModule } from './utils/utils.module';\nimport { ViewerFactory } from './services/viewer-factory/viewer-factory.service';\nimport { GeoUtilsService } from './services/geo-utils/geo-utils.service';\nimport { AcCircleDescComponent } from './components/ac-circle-desc/ac-circle-desc.component';\nimport { AcArcDescComponent } from './components/ac-arc-desc/ac-arc-desc.component';\nimport { AcMapLayerProviderComponent } from './components/ac-map-layer-provider/ac-map-layer-provider.component';\nimport { AcMapTerrainProviderComponent } from './components/ac-map-terrain-provider/ac-map-terrain-provider.component';\nimport { AcPointDescComponent } from './components/ac-point-desc/ac-point-desc.component';\nimport { AcLabelComponent } from './components/ac-label/ac-label.component';\nimport { AcPolylineComponent } from './components/ac-polyline/ac-polyline.component';\nimport { AcEllipseComponent } from './components/ac-ellipse/ac-ellipse.component';\nimport { AcPointComponent } from './components/ac-point/ac-point.component';\nimport { AcHtmlComponent } from './components/ac-html/ac-html.component';\nimport { AcCircleComponent } from './components/ac-circle/ac-circle.component';\nimport { AcArcComponent } from './components/ac-arc/ac-arc.component';\nimport { AcPolygonDescComponent } from './components/ac-polygon-desc/ac-polygon-desc.component';\nimport { AcDefaultPlonterComponent } from './components/ac-default-plonter/ac-default-plonter.component';\nimport { AcPolygonComponent } from './components/ac-polygon/ac-polygon.component';\nimport { MapsManagerService } from './services/maps-manager/maps-manager.service';\nimport { AcStaticEllipseDescComponent } from './components/static-dynamic/ac-static-ellipse-desc/ac-static-ellipse-desc.component';\nimport { AcDynamicEllipseDescComponent } from './components/static-dynamic/ac-dynamic-ellipse-desc/ac-dynamic-ellipse-desc.component';\nimport { AcDynamicPolylineDescComponent } from './components/static-dynamic/ac-dynamic-polyline-desc/ac-dynamic-polyline-desc.component';\nimport { AcStaticPolygonDescComponent } from './components/static-dynamic/ac-static-polygon-desc/ac-static-polygon-desc.component';\nimport { AcStaticCircleDescComponent } from './components/static-dynamic/ac-static-circle-desc/ac-static-circle-desc.component';\nimport { AcDynamicCircleDescComponent } from './components/static-dynamic/ac-dynamic-circle-desc/ac-dynamic-circle-desc.component';\nimport { AcStaticPolylineDescComponent } from './components/static-dynamic/ac-static-polyline-desc/ac-static-polyline-desc.component';\nimport { AcModelDescComponent } from './components/ac-model-desc/ac-model-desc.component';\nimport { AcTileset3dComponent } from './components/ac-3d-tileset/ac-tileset-3d.component';\nimport { AcBoxDescComponent } from './components/ac-box-desc/ac-box-desc.component';\nimport { AcCylinderDescComponent } from './components/ac-cylinder-desc/ac-cylinder-desc.component';\nimport { AcCorridorDescComponent } from './components/ac-corridor-desc/ac-corridor-desc.component';\nimport { AcEllipsoidDescComponent } from './components/ac-ellipsoid-desc/ac-ellipsoid-desc.component';\nimport { AcPolylineVolumeDescComponent } from './components/ac-polyline-volume-desc/ac-polyline-volume-desc.component';\nimport { AcWallDescComponent } from './components/ac-wall-desc/ac-wall-desc.component';\nimport { AcRectangleDescComponent } from './components/ac-rectangle-desc/ac-rectangle-desc.component';\nimport { AcBillboardPrimitiveDescComponent } from './components/ac-billboard-primitive-desc/ac-billboard-primitive-desc.component';\nimport { AcLabelPrimitiveDescComponent } from './components/ac-label-primitive-desc/ac-label-primitive-desc.component';\nimport { AcPolylinePrimitiveDescComponent } from './components/ac-polyline-primitive-desc/ac-polyline-primitive-desc.component';\nimport { ModuleConfiguration } from './models/module-options';\nimport { ANGULAR_CESIUM_CONFIG, ConfigurationService } from './cesium-enhancements/ConfigurationService';\nimport { CesiumExtender } from '../cesium-extender/extender';\nimport { AcHtmlDescComponent } from './components/ac-html-desc/ac-html-desc.component';\nimport { AcHtmlDirective } from './directives/ac-html/ac-html.directive';\nimport { AcHtmlContainerDirective } from './directives/ac-html-container/ac-html-container.directive';\nimport { AcContextMenuWrapperComponent } from './components/ac-context-menu-wrapper/ac-context-menu-wrapper.component';\nimport { AcArrayDescComponent } from './components/ac-array-desc/ac-array-desc.component';\nimport { AcPointPrimitiveDescComponent } from './components/ac-point-primitive-desc/ac-point-primitive-desc.component';\nimport { AcPrimitivePolylineComponent } from './components/ac-primitive-polyline/ac-primitive-polyline.component';\nimport PARSE_PIPES_CONFIG_MAP from './pipes/pipe-config-map';\n\nimport { AcCzmlDescComponent } from './components/ac-czml-desc/ac-czml-desc.component';\nimport { AcRectangleComponent } from './components/ac-rectangle/ac-rectangle.component';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    Angular2ParseModule,\n    UtilsModule,\n  ],\n  declarations: [\n    AcMapComponent,\n    AcLayerComponent,\n    AcBillboardComponent,\n    AcBillboardDescComponent,\n    AcBillboardPrimitiveDescComponent,\n    AcLabelDescComponent,\n    AcLabelPrimitiveDescComponent,\n    AcEllipseDescComponent,\n    AcPolylineDescComponent,\n    AcPolylinePrimitiveDescComponent,\n    PixelOffsetPipe,\n    RadiansToDegreesPipe,\n    AcCircleDescComponent,\n    AcArcDescComponent,\n    AcMapLayerProviderComponent,\n    AcMapTerrainProviderComponent,\n    AcPointDescComponent,\n    AcLabelComponent,\n    AcPolylineComponent,\n    AcPrimitivePolylineComponent,\n    AcEllipseComponent,\n    AcPointComponent,\n    AcBillboardComponent,\n    AcHtmlComponent,\n    AcCircleComponent,\n    AcArcComponent,\n    AcPolygonDescComponent,\n    AcPolygonComponent,\n    AcDefaultPlonterComponent,\n    AcModelDescComponent,\n    AcTileset3dComponent,\n    AcBoxDescComponent,\n    AcCylinderDescComponent,\n    AcCorridorDescComponent,\n    AcEllipsoidDescComponent,\n    AcPolylineVolumeDescComponent,\n    AcWallDescComponent,\n    AcRectangleDescComponent,\n    AcContextMenuWrapperComponent,\n    AcPointPrimitiveDescComponent,\n    AcHtmlDescComponent,\n    AcHtmlDirective,\n    AcHtmlContainerDirective,\n    AcArrayDescComponent,\n    AcCzmlDescComponent,\n\n    AcStaticEllipseDescComponent,\n    AcDynamicEllipseDescComponent,\n    AcDynamicPolylineDescComponent,\n    AcStaticPolylineDescComponent,\n    AcDynamicCircleDescComponent,\n    AcStaticCircleDescComponent,\n    AcStaticPolygonDescComponent,\n    AcRectangleComponent\n  ],\n  exports: [\n    AcMapComponent,\n    AcBillboardComponent,\n    AcBillboardDescComponent,\n    AcBillboardPrimitiveDescComponent,\n    AcLabelDescComponent,\n    AcLabelPrimitiveDescComponent,\n    AcEllipseDescComponent,\n    AcPolylineDescComponent,\n    AcPolylinePrimitiveDescComponent,\n    AcLayerComponent,\n    AcCircleDescComponent,\n    AcArcDescComponent,\n    AcMapLayerProviderComponent,\n    AcMapTerrainProviderComponent,\n    AcPointDescComponent,\n    AcLabelComponent,\n    AcPolylineComponent,\n    AcPrimitivePolylineComponent,\n    AcEllipseComponent,\n    AcPointComponent,\n    AcBillboardComponent,\n    AcHtmlComponent,\n    AcCircleComponent,\n    AcArcComponent,\n    AcPolygonDescComponent,\n    AcPolygonComponent,\n    AcDefaultPlonterComponent,\n    AcModelDescComponent,\n    AcTileset3dComponent,\n    AcBoxDescComponent,\n    AcCylinderDescComponent,\n    AcCorridorDescComponent,\n    AcEllipsoidDescComponent,\n    AcPolylineVolumeDescComponent,\n    AcWallDescComponent,\n    AcRectangleDescComponent,\n    AcPointPrimitiveDescComponent,\n    AcHtmlDescComponent,\n    AcArrayDescComponent,\n    AcCzmlDescComponent,\n    AcRectangleComponent,\n    AcStaticEllipseDescComponent,\n    AcDynamicEllipseDescComponent,\n    AcDynamicPolylineDescComponent,\n    AcStaticPolylineDescComponent,\n    AcDynamicCircleDescComponent,\n    AcStaticCircleDescComponent,\n    AcStaticPolygonDescComponent,\n  ],\n})\nexport class AngularCesiumModule {\n  static forRoot(config?: ModuleConfiguration): ModuleWithProviders<AngularCesiumModule> {\n    return {\n      ngModule: AngularCesiumModule,\n      providers: [\n        JsonMapper, CesiumProperties, GeoUtilsService, ViewerFactory, MapsManagerService, ConfigurationService,\n        {provide: ANGULAR_CESIUM_CONFIG, useValue: config},\n        {provide: PIPES_CONFIG, multi: true, useValue: config && config.customPipes || []},\n        {provide: PIPES_CONFIG, multi: true, useValue: PARSE_PIPES_CONFIG_MAP},\n      ],\n    };\n  }\n\n  constructor() {\n    CesiumExtender.extend();\n  }\n}\n","import { Observable } from 'rxjs';\n\nexport class DisposableObservable<T> extends Observable<T> {\n  dispose: Function;\n}\n","import { KeyboardEventModifier } from 'cesium';\n/**\n * EventModifier options for registration on map-event-manager.\n */\nexport enum CesiumEventModifier {\n  ALT = KeyboardEventModifier.ALT,\n  CTRL = KeyboardEventModifier.CTRL,\n  SHIFT = KeyboardEventModifier.SHIFT,\n}\n","import { filter, map } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { AcEntity } from '../../models/ac-entity';\nimport { CesiumEvent } from '../map-events-mananger/consts/cesium-event.enum';\nimport { MapEventsManagerService } from '../map-events-mananger/map-events-manager';\nimport { PickOptions } from '../map-events-mananger/consts/pickOptions.enum';\nimport { CesiumEventModifier } from '../map-events-mananger/consts/cesium-event-modifier.enum';\nimport { MapsManagerService } from '../maps-manager/maps-manager.service';\n\n\nexport interface SelectionOptions {\n  event?: CesiumEvent;\n  modifier?: CesiumEventModifier;\n  entityType?: any;\n}\n\n/**\n * Manages entity selection service for any given mouse event and modifier\n * the service will manage the list of selected items.\n * check out the example\n * you must provide the service yourself\n *\n *  __Usage :__\n * ```\n * // provide the service in some component\n * @Component({\n * //...\n *  providers: [SelectionManagerService]\n * }\n *\n * // Usage example:\n * // init selection\n * const selectedIndicator = ture; // optional default true, if true a boolean \"selected\" property will be added to the selected entity\n * selectionManagerService.initSelection({ event: CesiumEvent.LEFT_CLICK,\n * \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmodifier: CesiumEventModifier.CTRL\n * \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},selectedIndicator);\n * // Get selected\n * const selected = selectionManagerService.selected();\n *\n * // Or as observer\n * const selected$ = selectionManagerService.selected$();\n *\n * ```\n *\n */\n@Injectable()\nexport class SelectionManagerService {\n  selectedEntitiesItems$: BehaviorSubject<AcEntity[]> = new BehaviorSubject<AcEntity[]>([]);\n  selectedEntitySubject$: Subject<AcEntity> = new Subject<AcEntity>();\n  private mapEventsManagerService: MapEventsManagerService;\n\n  constructor(private mapsManager: MapsManagerService) {\n  }\n\n  selectedEntities$(): Observable<AcEntity[]> {\n    return this.selectedEntitiesItems$.asObservable();\n  }\n\n  selectedEntities(): AcEntity[] {\n    return this.selectedEntitiesItems$.getValue();\n  }\n\n  selectedEntity$() {\n    return this.selectedEntitySubject$;\n  }\n\n  toggleSelection(entity: AcEntity, addSelectedIndicator: boolean) {\n    const current = this.selectedEntities();\n    if (current.indexOf(entity) === -1) {\n      this.addToSelected(entity, addSelectedIndicator);\n    } else {\n      this.removeSelected(entity, addSelectedIndicator);\n    }\n  }\n\n  private addToSelected(entity: AcEntity, addSelectedIndicator: boolean) {\n    if (addSelectedIndicator) {\n      entity['selected'] = true;\n    }\n\n    const current = this.selectedEntities();\n    this.selectedEntitySubject$.next(entity);\n    this.selectedEntitiesItems$.next([...current, entity]);\n  }\n\n  private removeSelected(entity: AcEntity, addSelectedIndicator: boolean) {\n    if (addSelectedIndicator) {\n      entity['selected'] = false;\n    }\n\n    const current = this.selectedEntities();\n    const entityIndex = current.indexOf(entity);\n    if (entityIndex !== -1) {\n      current.splice(entityIndex, 1);\n      this.selectedEntitiesItems$.next(current);\n      this.selectedEntitySubject$.next(entity);\n    }\n  }\n\n  initSelection(selectionOptions?: SelectionOptions, addSelectedIndicator = true, eventPriority?: number, mapId?: string) {\n    const mapComponent = this.mapsManager.getMap(mapId);\n    if (!mapComponent) {\n      return;\n    }\n\n    this.mapEventsManagerService = mapComponent.getMapEventsManager();\n\n    if (!selectionOptions) {\n      Object.assign(selectionOptions, {event: CesiumEvent.LEFT_CLICK});\n    }\n\n    const eventSubscription = this.mapEventsManagerService.register({\n      event: selectionOptions.event,\n      pick: PickOptions.PICK_ONE,\n      modifier: selectionOptions.modifier,\n      entityType: selectionOptions.entityType,\n      priority: eventPriority,\n    });\n\n    eventSubscription.pipe(\n      map(result => result.entities),\n      filter(entities => entities && entities.length > 0))\n      .subscribe(entities => {\n        const entity = entities[0];\n        this.toggleSelection(entity, addSelectedIndicator);\n      });\n  }\n}\n","// import './src/angular-cesium/operators';\n\nexport * from './angular-cesium.module';\nexport * from './services';\nexport * from './models';\nexport * from './components';\nexport * from './pipes';\n","export enum EditModes {\n  CREATE,\n  EDIT,\n  CREATE_OR_EDIT\n}\n","export enum EditActions {\n  INIT,\n  MOUSE_MOVE,\n  ADD_POINT,\n  ADD_LAST_POINT,\n  CHANGE_TO_EDIT,\n  REMOVE_POINT,\n  DRAG_POINT,\n  DRAG_POINT_FINISH,\n  DRAG_SHAPE,\n  DRAG_SHAPE_FINISH,\n  DONE,\n  DISABLE,\n  ENABLE,\n  DISPOSE,\n  SET_EDIT_LABELS_RENDER_CALLBACK,\n  UPDATE_EDIT_LABELS,\n  SET_MANUALLY,\n  TRANSFORM,\n}\n","import { CallbackProperty, Cartesian3 } from 'cesium';\nimport { AcEntity } from '../../angular-cesium/models/ac-entity';\n//import { Cartesian3 } from '../../angular-cesium/models/cartesian3';\nimport { PointProps } from './point-edit-options';\n\nexport class EditPoint extends AcEntity {\n  static counter = 0;\n  private id: string;\n  private editedEntityId: string;\n  private position: Cartesian3;\n  private _virtualEditPoint: boolean;\n  private pointProps: PointProps;\n  private _show = true;\n\n  constructor(entityId: string, position: Cartesian3, pointProps?: PointProps, virtualPoint = false) {\n    super();\n    this.editedEntityId = entityId;\n    this.position = position;\n    this.id = this.generateId();\n    this.pointProps = {...pointProps};\n    this._virtualEditPoint = virtualPoint;\n  }\n\n  get show() {\n    return this._show;\n  }\n\n  set show(value) {\n    this._show = value;\n  }\n\n  get props(): PointProps {\n    return this.pointProps;\n  }\n\n  set props(value: PointProps) {\n    this.pointProps = value;\n  }\n\n  isVirtualEditPoint(): boolean {\n    return this._virtualEditPoint;\n  }\n\n  setVirtualEditPoint(value: boolean) {\n    this._virtualEditPoint = value;\n  }\n\n  getEditedEntityId(): string {\n    return this.editedEntityId;\n  }\n\n  getPosition(): Cartesian3 {\n    return this.position.clone();\n  }\n\n  getPositionCallbackProperty(): CallbackProperty {\n    return new CallbackProperty(this.getPosition.bind(this), false);\n  }\n\n\n  setPosition(position: Cartesian3) {\n    this.position.x = position.x;\n    this.position.y = position.y;\n    this.position.z = position.z;\n  }\n\n  getId(): string {\n    return this.id;\n  }\n\n  private generateId(): string {\n    return 'edit-point-' + EditPoint.counter++;\n  }\n}\n","import { Cartesian3, Cartesian2, Color, HeightReference, HorizontalOrigin, LabelStyle as cLabelStyle, VerticalOrigin } from 'cesium';\n\nexport interface LabelStyle {\n  show?: boolean;\n  font?: string;\n  style?: any;\n  fillColor?: any;\n  outlineColor?: any;\n  backgroundColor?: any;\n  backgroundPadding?: any;\n  showBackground?: boolean;\n  scale?: number;\n  distanceDisplayCondition?: any;\n  heightReference?: any;\n  horizontalOrigin?: any;\n  eyeOffset?: Cartesian3;\n  position?: Cartesian3;\n  pixelOffset?: Cartesian2;\n  pixelOffsetScaleByDistance?: any;\n  outlineWidth?: any;\n  scaleByDistance?: any;\n  translucencyByDistance?: any;\n  verticalOrigin?: any;\n  disableDepthTestDistance?: number;\n}\n\nexport interface LabelProps {\n  text: string;\n  show?: boolean;\n  font?: string;\n  style?: any;\n  fillColor?: any;\n  outlineColor?: any;\n  backgroundColor?: any;\n  backgroundPadding?: any;\n  showBackground?: boolean;\n  scale?: number;\n  distanceDisplayCondition?: any;\n  heightReference?: any;\n  horizontalOrigin?: any;\n  eyeOffset?: Cartesian3;\n  position?: Cartesian3;\n  pixelOffset?: Cartesian2;\n  pixelOffsetScaleByDistance?: any;\n  outlineWidth?: any;\n  scaleByDistance?: any;\n  translucencyByDistance?: any;\n  verticalOrigin?: any;\n  disableDepthTestDistance?: number;\n}\n\nexport const defaultLabelProps: LabelProps = {\n  backgroundColor: new Color(0.165, 0.165, 0.165, 0.7),\n  backgroundPadding: new Cartesian2(25, 20),\n  distanceDisplayCondition: undefined,\n  fillColor: Color.WHITE,\n  font: '30px sans-serif',\n  heightReference: HeightReference.NONE,\n  horizontalOrigin: HorizontalOrigin.LEFT,\n  outlineColor: Color.BLACK,\n  outlineWidth: 1.0,\n  pixelOffset: Cartesian2.ZERO,\n  pixelOffsetScaleByDistance: undefined,\n  scale: 1.0,\n  scaleByDistance: undefined,\n  show: true,\n  showBackground: false,\n  style: cLabelStyle.FILL,\n  text: '',\n  translucencyByDistance: undefined,\n  verticalOrigin: VerticalOrigin.BASELINE,\n  eyeOffset: Cartesian3.ZERO,\n  disableDepthTestDistance: 0,\n};\n","import { Color, CallbackProperty, Cartesian3 } from 'cesium';\nimport { AcLayerComponent } from '../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { AcEntity } from '../../angular-cesium/models/ac-entity';\nimport { CoordinateConverter } from '../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { EditPoint } from './edit-point';\nimport { defaultLabelProps, LabelProps } from './label-props';\nimport { PointEditOptions, PointProps } from './point-edit-options';\n\ninterface PositionWithPointProps {\n  position: Cartesian3;\n  pointProp?: PointProps;\n}\n\nexport class EditablePoint extends AcEntity {\n  private point: EditPoint;\n  private _enableEdit = true;\n  private _props: PointProps;\n  private _labels: LabelProps[] = [];\n\n  constructor(private id: string,\n              private pointLayer: AcLayerComponent,\n              private coordinateConverter: CoordinateConverter,\n              private editOptions: PointEditOptions,\n              position?: Cartesian3) {\n    super();\n    this._props = {...editOptions.pointProps};\n    if (position) {\n      this.createFromExisting(position);\n    }\n  }\n\n  get labels(): LabelProps[] {\n    return this._labels;\n  }\n\n  set labels(labels: LabelProps[]) {\n    if (!labels) {\n      return;\n    }\n    const position = this.point.getPosition();\n    this._labels = labels.map((label, index) => {\n      if (!label.position) {\n        label.position = position;\n      }\n      return Object.assign({}, defaultLabelProps, label);\n    });\n  }\n\n  get props(): PointProps {\n    return this._props;\n  }\n\n  set props(value: PointProps) {\n    this._props = value;\n  }\n\n  get enableEdit() {\n    return this._enableEdit;\n  }\n\n  set enableEdit(value: boolean) {\n    this._enableEdit = value;\n    if (value) {\n      this.point.props.color = Color.WHITE;\n    } else {\n      this.point.props.color = Color.DIMGREY;\n      this.point.props.pixelSize = 10;\n    }\n    this.updatePointLayer();\n  }\n\n  private createFromExisting(position: Cartesian3) {\n    this.point = new EditPoint(this.id, position, this._props);\n    this.updatePointLayer();\n  }\n\n  private hasPosition(point: PositionWithPointProps | Cartesian3): point is PositionWithPointProps {\n    if ((point as PositionWithPointProps).position) {\n      return true;\n    }\n    return false;\n  }\n\n  setManually(point: PositionWithPointProps | Cartesian3, props?: PointProps) {\n    if (!this.enableEdit) {\n      throw new Error('Update manually only in edit mode, after point is created');\n    }\n    let newProps = props;\n    if (this.hasPosition(point)) {\n      newProps = point.pointProp ? point.pointProp : props;\n      this.point.setPosition(point.position);\n    } else {\n      this.point.setPosition(point);\n    }\n    this.point.props = newProps;\n    this.updatePointLayer();\n  }\n\n  addLastPoint(position: Cartesian3) {\n    this.point.setPosition(position);\n    this.updatePointLayer();\n  }\n\n  movePoint(toPosition: Cartesian3) {\n    if (!this.point) {\n      this.point = new EditPoint(this.id, toPosition, this._props);\n    } else {\n      this.point.setPosition(toPosition);\n    }\n    this.updatePointLayer();\n  }\n\n  getCurrentPoint(): EditPoint {\n    return this.point;\n  }\n\n  getPosition(): Cartesian3 {\n    return this.point.getPosition();\n  }\n\n  getPositionCallbackProperty(): CallbackProperty {\n    return new CallbackProperty(this.getPosition.bind(this), false);\n  }\n\n  private updatePointLayer() {\n    this.pointLayer.update(this.point, this.point.getId());\n  }\n\n  update() {\n    this.updatePointLayer();\n  }\n\n  dispose() {\n    this.pointLayer.remove(this.point.getId());\n  }\n\n  getId() {\n    return this.id;\n  }\n}\n","import { Cartesian3 } from 'cesium';\nimport { CoordinateConverter } from '../../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { AcLayerComponent } from '../../../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { Injectable } from '@angular/core';\nimport { PointEditOptions } from '../../../models/point-edit-options';\nimport { EditablePoint } from '../../../models/editable-point';\n\n@Injectable()\nexport class PointsManagerService {\n  points: Map<string, EditablePoint> = new Map<string, EditablePoint>();\n\n  createEditablePoint(id: string,\n                      editPointLayer: AcLayerComponent,\n                      coordinateConverter: CoordinateConverter,\n                      editOptions?: PointEditOptions,\n                      position?: Cartesian3) {\n    const editablePoint = new EditablePoint(\n      id,\n      editPointLayer,\n      coordinateConverter,\n      editOptions,\n      position);\n    this.points.set(id, editablePoint\n    );\n  }\n\n  enableAll() {\n    this.points.forEach(point => point.enableEdit = true);\n  }\n\n  disableAll() {\n    this.points.forEach(point => point.enableEdit = false);\n  }\n\n  dispose(id: string) {\n    const point = this.points.get(id);\n    if (point.getCurrentPoint()) {\n      point.dispose();\n    }\n    this.points.delete(id);\n  }\n\n  get(id: string): EditablePoint {\n    return this.points.get(id);\n  }\n\n  clear() {\n    this.points.forEach(point => point.dispose());\n    this.points.clear();\n  }\n}\n","export function generateKey(length = 12): string {\n  let id = '';\n  const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n  for (let i = 0; i < length; i++) {\n    id += possible.charAt(Math.floor(Math.random() * possible.length));\n  }\n\n  return id;\n}\n\nexport function debounce(func, wait) {\n  let timeout;\n  return function (...args) {\n    const context = this;\n    clearTimeout(timeout);\n    timeout = setTimeout(() => func.apply(context, args), wait);\n  };\n}\n","import { publish, tap } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { Color, Cartesian3 } from 'cesium';\nimport { MapEventsManagerService } from '../../../../angular-cesium/services/map-events-mananger/map-events-manager';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { CesiumEvent } from '../../../../angular-cesium/services/map-events-mananger/consts/cesium-event.enum';\nimport { PickOptions } from '../../../../angular-cesium/services/map-events-mananger/consts/pickOptions.enum';\nimport { EditModes } from '../../../models/edit-mode.enum';\nimport { EditActions } from '../../../models/edit-actions.enum';\nimport { DisposableObservable } from '../../../../angular-cesium/services/map-events-mananger/disposable-observable';\nimport { CoordinateConverter } from '../../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { EditPoint } from '../../../models/edit-point';\nimport { CameraService } from '../../../../angular-cesium/services/camera/camera.service';\nimport { PointsManagerService } from './points-manager.service';\nimport { LabelProps } from '../../../models/label-props';\nimport { generateKey } from '../../utils';\nimport { CesiumService } from '../../../../angular-cesium';\nimport { PointEditOptions, PointProps } from '../../../models/point-edit-options';\nimport { PointEditUpdate } from '../../../models/point-edit-update';\nimport { PointEditorObservable } from '../../../models/point-editor-observable';\n\nexport const DEFAULT_POINT_OPTIONS: PointEditOptions = {\n  addLastPointEvent: CesiumEvent.LEFT_CLICK,\n  removePointEvent: CesiumEvent.RIGHT_CLICK,\n  dragPointEvent: CesiumEvent.LEFT_CLICK_DRAG,\n  allowDrag: true,\n  pointProps: {\n    color: Color.WHITE.withAlpha(0.95),\n    outlineColor: Color.BLACK.withAlpha(0.5),\n    outlineWidth: 1,\n    pixelSize: 10,\n    show: true,\n    disableDepthTestDistance: Number.POSITIVE_INFINITY,\n  },\n};\n\n/**\n * Service for creating editable point\n *\n *  * You must provide `PointsEditorService` yourself.\n * PolygonsEditorService works together with `<points-editor>` component. Therefor you need to create `<points-editor>`\n * for each `PointsEditorService`, And of course somewhere under `<ac-map>`/\n *\n * + `create` for starting a creation of the shape over the map. Returns a extension of `PointEditorObservable`.\n * + `edit` for editing shape over the map starting from a given positions. Returns an extension of `PointEditorObservable`.\n * + To stop editing call `dsipose()` from the `PointEditorObservable` you get back from `create()` \\ `edit()`.\n *\n * **Labels over editted shapes**\n * Angular Cesium allows you to draw labels over a shape that is being edited with one of the editors.\n * To add label drawing logic to your editor use the function `setLabelsRenderFn()` that is defined on the\n * `PointEditorObservable` that is returned from calling `create()` \\ `edit()` of one of the editor services.\n * `setLabelsRenderFn()` - receives a callback that is called every time the shape is redrawn\n * (except when the shape is being dragged). The callback is called with the last shape state and with an array of the current labels.\n * The callback should return type `LabelProps[]`.\n * You can also use `updateLabels()` to pass an array of labels of type `LabelProps[]` to be drawn.\n *\n * usage:\n * ```typescript\n *  // Start creating point\n *  const editing$ = pointEditorService.create();\n *  this.editing$.subscribe(editResult => {\n *\t\t\t\tconsole.log(editResult.positions);\n *\t\t});\n *\n *  // Or edit point from existing point cartesian3 positions\n *  const editing$ = this.pointEditor.edit(initialPos);\n *\n * ```\n */\n@Injectable()\nexport class PointsEditorService {\n  private mapEventsManager: MapEventsManagerService;\n  private updateSubject = new Subject<PointEditUpdate>();\n  private updatePublisher = publish<PointEditUpdate>()(this.updateSubject); // TODO maybe not needed\n  private coordinateConverter: CoordinateConverter;\n  private cameraService: CameraService;\n  private pointManager: PointsManagerService;\n  private observablesMap = new Map<string, DisposableObservable<any>[]>();\n  private cesiumScene;\n\n  init(mapEventsManager: MapEventsManagerService,\n       coordinateConverter: CoordinateConverter,\n       cameraService: CameraService,\n       pointManager: PointsManagerService,\n       cesiumViewer: CesiumService) {\n    this.mapEventsManager = mapEventsManager;\n    this.coordinateConverter = coordinateConverter;\n    this.cameraService = cameraService;\n    this.pointManager = pointManager;\n    this.updatePublisher.connect();\n\n    this.cesiumScene = cesiumViewer.getScene();\n  }\n\n  onUpdate(): Observable<PointEditUpdate> {\n    return this.updatePublisher;\n  }\n\n  private screenToPosition(cartesian2) {\n    const cartesian3 = this.coordinateConverter.screenToCartesian3(cartesian2);\n\n    // If cartesian3 is undefined then the point inst on the globe\n    if (cartesian3) {\n      const ray = this.cameraService.getCamera().getPickRay(cartesian2);\n      return this.cesiumScene.globe.pick(ray, this.cesiumScene);\n    }\n    return cartesian3;\n  }\n\n  create(options = DEFAULT_POINT_OPTIONS, eventPriority = 100): PointEditorObservable {\n    const id = generateKey();\n    const pointOptions = this.setOptions(options);\n\n    const clientEditSubject = new BehaviorSubject<PointEditUpdate>({\n      id,\n      editAction: null,\n      editMode: EditModes.CREATE\n    });\n    let finishedCreate = false;\n\n    this.updateSubject.next({\n      id,\n      editMode: EditModes.CREATE,\n      editAction: EditActions.INIT,\n      pointOptions: pointOptions,\n    });\n\n    const finishCreation = (position: Cartesian3) => {\n      return this.switchToEditMode(\n        id,\n        clientEditSubject,\n        position,\n        eventPriority,\n        pointOptions,\n        editorObservable,\n        true\n      );\n    };\n\n    const mouseMoveRegistration = this.mapEventsManager.register({\n      event: CesiumEvent.MOUSE_MOVE,\n      pick: PickOptions.NO_PICK,\n      priority: eventPriority,\n      pickConfig: options.pickConfiguration,\n    });\n    const addLastPointRegistration = this.mapEventsManager.register({\n      event: pointOptions.addLastPointEvent,\n      modifier: pointOptions.addLastPointModifier,\n      pick: PickOptions.NO_PICK,\n      priority: eventPriority,\n      pickConfig: options.pickConfiguration,\n    });\n\n    this.observablesMap.set(id, [mouseMoveRegistration, addLastPointRegistration]);\n    const editorObservable = this.createEditorObservable(clientEditSubject, id, finishCreation);\n\n    mouseMoveRegistration.subscribe(({ movement: { endPosition } }) => {\n      const position = this.screenToPosition(endPosition);\n      if (position) {\n\n        this.updateSubject.next({\n          id,\n          position,\n          editMode: EditModes.CREATE,\n          updatedPosition: position,\n          editAction: EditActions.MOUSE_MOVE,\n        });\n      }\n    });\n    addLastPointRegistration.subscribe(({ movement: { endPosition } }) => {\n      const position = this.screenToPosition(endPosition);\n      finishedCreate = finishCreation(position);\n    });\n    return editorObservable;\n  }\n\n  private switchToEditMode(id,\n                           clientEditSubject,\n                           position: Cartesian3,\n                           eventPriority,\n                           pointOptions,\n                           editorObservable,\n                           finishedCreate: boolean) {\n    const update = {\n      id,\n      position: position,\n      editMode: EditModes.CREATE_OR_EDIT,\n      updatedPosition: position,\n      editAction: EditActions.ADD_LAST_POINT,\n    };\n    this.updateSubject.next(update);\n    clientEditSubject.next({\n      ...update,\n      position: position,\n      point: this.getPoint(id),\n    });\n\n    const changeMode = {\n      id,\n      editMode: EditModes.CREATE,\n      editAction: EditActions.CHANGE_TO_EDIT,\n    };\n    this.updateSubject.next(changeMode);\n    clientEditSubject.next(changeMode);\n    if (this.observablesMap.has(id)) {\n      this.observablesMap.get(id).forEach(registration => registration.dispose());\n    }\n    this.observablesMap.delete(id);\n    this.editPoint(id, position, eventPriority, clientEditSubject, pointOptions, editorObservable);\n    finishedCreate = true;\n    return finishedCreate;\n  }\n\n  edit(position: Cartesian3, options = DEFAULT_POINT_OPTIONS, priority = 100): PointEditorObservable {\n    const id = generateKey();\n    const pointOptions = this.setOptions(options);\n    const editSubject = new BehaviorSubject<PointEditUpdate>({\n      id,\n      editAction: null,\n      editMode: EditModes.EDIT\n    });\n    const update = {\n      id,\n      position: position,\n      editMode: EditModes.EDIT,\n      editAction: EditActions.INIT,\n      pointOptions: pointOptions,\n    };\n    this.updateSubject.next(update);\n    editSubject.next({\n      ...update,\n      position: position,\n      point: this.getPoint(id),\n    });\n    return this.editPoint(\n      id,\n      position,\n      priority,\n      editSubject,\n      pointOptions\n    );\n  }\n\n  private editPoint(id: string,\n                       position: Cartesian3,\n                       priority: number,\n                       editSubject: Subject<PointEditUpdate>,\n                       options: PointEditOptions,\n                       editObservable?: PointEditorObservable) {\n    const pointDragRegistration = this.mapEventsManager.register({\n      event: options.dragPointEvent,\n      entityType: EditPoint,\n      pick: PickOptions.PICK_FIRST,\n      pickConfig: options.pickConfiguration,\n      priority,\n      pickFilter: entity => id === entity.editedEntityId,\n    });\n\n    const pointRemoveRegistration = this.mapEventsManager.register({\n      event: options.removePointEvent,\n      modifier: options.removePointModifier,\n      entityType: EditPoint,\n      pick: PickOptions.PICK_FIRST,\n      pickConfig: options.pickConfiguration,\n      priority,\n      pickFilter: entity => id === entity.editedEntityId,\n    });\n\n    pointDragRegistration.pipe(\n      tap(({ movement: { drop } }) => this.cameraService.enableInputs(drop)))\n      .subscribe(({ movement: { endPosition, drop }, entities }) => {\n        const updatedPosition = this.screenToPosition(endPosition);\n        if (!updatedPosition) {\n          return;\n        }\n        const update = {\n          id,\n          editMode: EditModes.EDIT,\n          updatedPosition,\n          editAction: drop ? EditActions.DRAG_POINT_FINISH : EditActions.DRAG_POINT,\n        };\n        this.updateSubject.next(update);\n        editSubject.next({\n          ...update,\n          position: updatedPosition,\n          point: this.getPoint(id),\n        });\n\n      });\n\n    const observables = [pointDragRegistration, pointRemoveRegistration];\n    this.observablesMap.set(id, observables);\n    return this.createEditorObservable(editSubject, id);\n  }\n\n  private setOptions(options: PointEditOptions) {\n    const defaultClone = JSON.parse(JSON.stringify(DEFAULT_POINT_OPTIONS));\n    const pointOptions: PointEditOptions = Object.assign(defaultClone, options);\n    pointOptions.pointProps = {...DEFAULT_POINT_OPTIONS.pointProps, ...options.pointProps};\n    pointOptions.pointProps = {...DEFAULT_POINT_OPTIONS.pointProps, ...options.pointProps};\n    return pointOptions;\n  }\n\n\n  private createEditorObservable(observableToExtend: any, id: string, finishCreation?: (position: Cartesian3) => boolean)\n                                                                                                    : PointEditorObservable {\n    observableToExtend.dispose = () => {\n      const observables = this.observablesMap.get(id);\n      if (observables) {\n        observables.forEach(obs => obs.dispose());\n      }\n      this.observablesMap.delete(id);\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.DISPOSE,\n      });\n    };\n\n    observableToExtend.enable = () => {\n      this.updateSubject.next({\n        id,\n        position: this.getPosition(id),\n        editMode: EditModes.EDIT,\n        editAction: EditActions.ENABLE,\n      });\n    };\n\n    observableToExtend.disable = () => {\n      this.updateSubject.next({\n        id,\n        position: this.getPosition(id),\n        editMode: EditModes.EDIT,\n        editAction: EditActions.DISABLE,\n      });\n    };\n\n    observableToExtend.setManually = (point: {\n      position: Cartesian3,\n      pointProp?: PointProps\n    } | Cartesian3, pointProps?: PointProps) => {\n      const newPoint = this.pointManager.get(id);\n      newPoint.setManually(point, pointProps);\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.SET_MANUALLY,\n      });\n    };\n\n    observableToExtend.setLabelsRenderFn = (callback: any) => {\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.SET_EDIT_LABELS_RENDER_CALLBACK,\n        labelsRenderFn: callback,\n      });\n    };\n\n    observableToExtend.updateLabels = (labels: LabelProps[]) => {\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.UPDATE_EDIT_LABELS,\n        updateLabels: labels,\n      });\n    };\n\n    observableToExtend.finishCreation = () => {\n      if (!finishCreation) {\n        throw new Error('Points editor error edit(): cannot call finishCreation() on edit');\n      }\n\n      return finishCreation(null);\n    };\n\n    observableToExtend.getCurrentPoint = () => this.getPoint(id);\n\n    observableToExtend.getEditValue = () => observableToExtend.getValue();\n\n    observableToExtend.getLabels = (): LabelProps[] => this.pointManager.get(id).labels;\n\n    return observableToExtend as PointEditorObservable;\n  }\n\n  private getPosition(id: string) {\n    const point = this.pointManager.get(id);\n    return point.getPosition();\n  }\n\n  private getPoint(id: string) {\n    const point = this.pointManager.get(id);\n    if (point) {\n      return point.getCurrentPoint();\n    }\n  }\n}\n","import { ChangeDetectionStrategy, Component, OnDestroy, ViewChild } from '@angular/core';\nimport * as Cesium from 'cesium';\nimport { CesiumService } from '../../../angular-cesium/services/cesium/cesium.service';\nimport { EditModes } from '../../models/edit-mode.enum';\nimport { AcNotification } from '../../../angular-cesium/models/ac-notification';\nimport { EditActions } from '../../models/edit-actions.enum';\nimport { AcLayerComponent } from '../../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { CoordinateConverter } from '../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { MapEventsManagerService } from '../../../angular-cesium/services/map-events-mananger/map-events-manager';\nimport { Subject } from 'rxjs';\nimport { CameraService } from '../../../angular-cesium/services/camera/camera.service';\nimport { EditPoint } from '../../models/edit-point';\nimport { PointsEditorService } from '../../services/entity-editors/points-editor/points-editor.service';\nimport { PointsManagerService } from '../../services/entity-editors/points-editor/points-manager.service';\nimport { PointEditUpdate } from '../../models/point-edit-update';\nimport { EditablePoint } from '../../models/editable-point';\nimport { LabelProps } from '../../models/label-props';\n\n@Component({\n    selector: 'points-editor',\n    template: /*html*/ `\n    <ac-layer #editPointLayer acFor=\"let point of editPoint$\" [context]=\"this\">\n      <ac-point-desc\n        props=\"{\n        position: point.getPositionCallbackProperty(),\n        pixelSize: getPointSize(point),\n        color: point.props.color,\n        outlineColor: point.props.outlineColor,\n        outlineWidth: point.props.outlineWidth,\n        show: getPointShow(point),\n        disableDepthTestDistance: point.props.disableDepthTestDistance,\n        heightReference: point.props.heightReference,\n    }\"\n      ></ac-point-desc>\n    </ac-layer>\n\n    <ac-layer #pointLabelsLayer acFor=\"let pointLabels of pointLabels$\" [context]=\"this\">\n      <ac-array-desc acFor=\"let label of pointLabels.labels\" [idGetter]=\"getLabelId\">\n        <ac-label-primitive-desc\n          props=\"{\n            position: label.position,\n            backgroundColor: label.backgroundColor,\n            backgroundPadding: label.backgroundPadding,\n            distanceDisplayCondition: label.distanceDisplayCondition,\n            eyeOffset: label.eyeOffset,\n            fillColor: label.fillColor,\n            font: label.font,\n            heightReference: label.heightReference,\n            horizontalOrigin: label.horizontalOrigin,\n            outlineColor: label.outlineColor,\n            outlineWidth: label.outlineWidth,\n            pixelOffset: label.pixelOffset,\n            pixelOffsetScaleByDistance: label.pixelOffsetScaleByDistance,\n            scale: label.scale,\n            scaleByDistance: label.scaleByDistance,\n            show: label.show,\n            showBackground: label.showBackground,\n            style: label.style,\n            text: label.text,\n            translucencyByDistance: label.translucencyByDistance,\n            verticalOrigin: label.verticalOrigin,\n            disableDepthTestDistance: label.disableDepthTestDistance,\n        }\"\n        >\n        </ac-label-primitive-desc>\n      </ac-array-desc>\n    </ac-layer>\n  `,\n    providers: [CoordinateConverter, PointsManagerService],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class PointsEditorComponent implements OnDestroy {\n  private editLabelsRenderFn: (update: PointEditUpdate, labels: LabelProps[]) => LabelProps[];\n  public editPoint$ = new Subject<AcNotification>();\n  public pointLabels$ = new Subject<AcNotification>();\n\n  @ViewChild('editPointLayer') private editPointLayer: AcLayerComponent;\n  @ViewChild('pointLabelsLayer') private pointLabelsLayer: AcLayerComponent;\n\n  constructor(\n    private pointsEditor: PointsEditorService,\n    private coordinateConverter: CoordinateConverter,\n    private mapEventsManager: MapEventsManagerService,\n    private cameraService: CameraService,\n    private pointsManager: PointsManagerService,\n    private cesiumService: CesiumService,\n  ) {\n    this.pointsEditor.init(this.mapEventsManager, this.coordinateConverter, this.cameraService, pointsManager, this.cesiumService);\n    this.startListeningToEditorUpdates();\n  }\n\n  private startListeningToEditorUpdates() {\n    this.pointsEditor.onUpdate().subscribe((update: PointEditUpdate) => {\n      if (update.editMode === EditModes.CREATE || update.editMode === EditModes.CREATE_OR_EDIT) {\n        this.handleCreateUpdates(update);\n      } else if (update.editMode === EditModes.EDIT) {\n        this.handleEditUpdates(update);\n      }\n    });\n  }\n\n  getLabelId(element: any, index: number): string {\n    return index.toString();\n  }\n\n  renderEditLabels(point: EditablePoint, update: PointEditUpdate, labels?: LabelProps[]) {\n    if (labels) {\n      point.labels = labels;\n      this.pointLabelsLayer.update(point, point.getId());\n      return;\n    }\n\n    if (!this.editLabelsRenderFn) {\n      return;\n    }\n\n    update.position = point.getPosition();\n    update.point = point.getCurrentPoint();\n    point.labels = this.editLabelsRenderFn(update, point.labels);\n    this.pointLabelsLayer.update(point, point.getId());\n  }\n\n  removeEditLabels(point: EditablePoint) {\n    point.labels = [];\n    this.pointLabelsLayer.remove(point.getId());\n  }\n\n  handleCreateUpdates(update: PointEditUpdate) {\n    switch (update.editAction) {\n      case EditActions.INIT: {\n        this.pointsManager.createEditablePoint(\n          update.id,\n          this.editPointLayer,\n          this.coordinateConverter,\n          update.pointOptions,\n          update.position\n        );\n        break;\n      }\n      case EditActions.ADD_LAST_POINT: {\n        const point = this.pointsManager.get(update.id);\n        if (update.updatedPosition) {\n          point.addLastPoint(update.updatedPosition);\n          this.renderEditLabels(point, update);\n        }\n        break;\n      }\n      case EditActions.MOUSE_MOVE: {\n        const point = this.pointsManager.get(update.id);\n        if (update.updatedPosition) {\n          point.movePoint(update.updatedPosition);\n          this.renderEditLabels(point, update);\n        }\n        break;\n      }\n      case EditActions.DISPOSE: {\n        const point = this.pointsManager.get(update.id);\n        if (point && point.getCurrentPoint()) {\n          this.removeEditLabels(point);\n        }\n        this.pointsManager.dispose(update.id);\n        this.editLabelsRenderFn = undefined;\n        break;\n      }\n      case EditActions.SET_EDIT_LABELS_RENDER_CALLBACK: {\n        const point = this.pointsManager.get(update.id);\n        this.editLabelsRenderFn = update.labelsRenderFn;\n        this.renderEditLabels(point, update);\n        break;\n      }\n      case EditActions.UPDATE_EDIT_LABELS: {\n        const point = this.pointsManager.get(update.id);\n        this.renderEditLabels(point, update, update.updateLabels);\n        break;\n      }\n      case EditActions.SET_MANUALLY: {\n        const point = this.pointsManager.get(update.id);\n        this.renderEditLabels(point, update, update.updateLabels);\n        break;\n      }\n      default: {\n        return;\n      }\n    }\n  }\n\n  handleEditUpdates(update: PointEditUpdate) {\n    switch (update.editAction) {\n      case EditActions.INIT: {\n        this.pointsManager.createEditablePoint(\n          update.id,\n          this.editPointLayer,\n          this.coordinateConverter,\n          update.pointOptions,\n          update.position,\n        );\n        break;\n      }\n      case EditActions.DRAG_POINT: {\n        const point = this.pointsManager.get(update.id);\n        if (point && point.enableEdit) {\n          point.movePoint(update.updatedPosition);\n          this.renderEditLabels(point, update);\n        }\n        break;\n      }\n      case EditActions.DRAG_POINT_FINISH: {\n        const point = this.pointsManager.get(update.id);\n        if (point && point.enableEdit) {\n          point.movePoint(update.updatedPosition);\n          this.renderEditLabels(point, update);\n        }\n        break;\n      }\n      case EditActions.DISABLE: {\n        const point = this.pointsManager.get(update.id);\n        if (point) {\n          point.enableEdit = false;\n          this.renderEditLabels(point, update);\n        }\n        break;\n      }\n      case EditActions.ENABLE: {\n        const point = this.pointsManager.get(update.id);\n        if (point) {\n          point.enableEdit = true;\n          this.renderEditLabels(point, update);\n        }\n        break;\n      }\n      default: {\n        return;\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.pointsManager.clear();\n  }\n\n  getPointSize(point: EditPoint) {\n    return point.isVirtualEditPoint() ? point.props.virtualPointPixelSize : point.props.pixelSize;\n  }\n\n  getPointShow(point: EditPoint) {\n    return point.show && (point.isVirtualEditPoint() ? point.props.showVirtual : point.props.show);\n  }\n}\n","import { CallbackProperty, Cartesian3 } from 'cesium';\nimport { AcEntity } from '../../angular-cesium/models/ac-entity';\nimport { PolylineProps } from './polyline-edit-options';\n\nexport class EditPolyline extends AcEntity {\n  static counter = 0;\n  private editedEntityId: string;\n  private id: string;\n  private positions: Cartesian3[];\n  private _polylineProps: PolylineProps;\n\n  constructor(entityId: string, startPosition: Cartesian3, endPosition: Cartesian3, polylineProps?: PolylineProps) {\n    super();\n    this.editedEntityId = entityId;\n    this.id = this.generateId();\n    this.positions = [startPosition, endPosition];\n    this._polylineProps = {...polylineProps};\n  }\n\n  get props(): PolylineProps {\n    return this._polylineProps;\n  }\n\n  set props(value: PolylineProps) {\n    this._polylineProps = value;\n  }\n\n  getEditedEntityId(): string {\n    return this.editedEntityId;\n  }\n\n  getPositions(): any[] {\n    return this.positions.map(p => p.clone());\n  }\n\n\n  getPositionsCallbackProperty(): CallbackProperty {\n    return new CallbackProperty(this.getPositions.bind(this), false);\n  }\n\n  validatePositions(): boolean {\n    return this.positions[0] !== undefined && this.positions[1] !== undefined;\n  }\n\n  getStartPosition() {\n    return this.positions[0];\n  }\n\n  getEndPosition() {\n    return this.positions[1];\n  }\n\n  setStartPosition(position: Cartesian3) {\n    this.positions[0] = position;\n  }\n\n  setEndPosition(position: Cartesian3) {\n    this.positions[1] = position;\n  }\n\n  getId(): string {\n    return this.id;\n  }\n\n  private generateId(): string {\n    return 'edit-polyline-' + EditPolyline.counter++;\n  }\n}\n","import { Cartesian3, PolygonHierarchy, CallbackProperty } from 'cesium';\nimport { AcEntity } from '../../angular-cesium/models/ac-entity';\nimport { EditPoint } from './edit-point';\nimport { EditPolyline } from './edit-polyline';\nimport { AcLayerComponent } from '../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { CoordinateConverter } from '../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { GeoUtilsService } from '../../angular-cesium/services/geo-utils/geo-utils.service';\nimport { PolygonEditOptions, PolygonProps } from './polygon-edit-options';\nimport { PointProps } from './point-edit-options';\nimport { PolylineProps } from './polyline-edit-options';\nimport { defaultLabelProps, LabelProps } from './label-props';\n\nexport class EditablePolygon extends AcEntity {\n  private positions: EditPoint[] = [];\n  private polylines: EditPolyline[] = [];\n  private movingPoint: EditPoint;\n  private doneCreation = false;\n  private _enableEdit = true;\n  private _polygonProps: PolygonProps;\n  private _defaultPointProps: PointProps;\n  private _defaultPolylineProps: PolylineProps;\n  private lastDraggedToPosition: Cartesian3;\n  private _labels: LabelProps[] = [];\n\n  constructor(private id: string,\n              private polygonsLayer: AcLayerComponent,\n              private pointsLayer: AcLayerComponent,\n              private polylinesLayer: AcLayerComponent,\n              private coordinateConverter: CoordinateConverter,\n              private polygonOptions: PolygonEditOptions,\n              positions?: Cartesian3[]) {\n    super();\n    this.polygonProps = {...polygonOptions.polygonProps};\n    this.defaultPointProps = {...polygonOptions.pointProps};\n    this.defaultPolylineProps = {...polygonOptions.polylineProps};\n    if (positions && positions.length >= 3) {\n      this.createFromExisting(positions);\n    }\n  }\n\n  get labels(): LabelProps[] {\n    return this._labels;\n  }\n\n  set labels(labels: LabelProps[]) {\n    if (!labels) {\n      return;\n    }\n    const positions = this.getRealPositions();\n    this._labels = labels.map((label, index) => {\n      if (!label.position) {\n        label.position = positions[index];\n      }\n\n      return Object.assign({}, defaultLabelProps, label);\n    });\n  }\n\n  get defaultPolylineProps(): PolylineProps {\n    return this._defaultPolylineProps;\n  }\n\n  set defaultPolylineProps(value: PolylineProps) {\n    this._defaultPolylineProps = value;\n  }\n\n  get defaultPointProps(): PointProps {\n    return this._defaultPointProps;\n  }\n\n  get polygonProps(): PolygonProps {\n    return this._polygonProps;\n  }\n\n  set polygonProps(value: PolygonProps) {\n    this._polygonProps = value;\n  }\n\n  set defaultPointProps(value: PointProps) {\n    this._defaultPointProps = value;\n  }\n\n  get enableEdit() {\n    return this._enableEdit;\n  }\n\n  set enableEdit(value: boolean) {\n    this._enableEdit = value;\n    this.positions.forEach(point => {\n      point.show = value;\n      this.updatePointsLayer(false, point);\n    });\n  }\n\n  private createFromExisting(positions: Cartesian3[]) {\n    positions.forEach((position) => {\n      this.addPointFromExisting(position);\n    });\n    this.addAllVirtualEditPoints();\n    this.updatePolygonsLayer();\n    this.doneCreation = true;\n  }\n\n  setPointsManually(points: { position: Cartesian3, pointProps: PointProps }[] | Cartesian3[], polygonProps?: PolygonProps) {\n    if (!this.doneCreation) {\n      throw new Error('Update manually only in edit mode, after polygon is created');\n    }\n\n    this.positions.forEach(p => this.pointsLayer.remove(p.getId()));\n    const newPoints: EditPoint[] = [];\n    for (let i = 0; i < points.length; i++) {\n      const pointOrCartesian: any = points[i];\n      let newPoint = null;\n      if (pointOrCartesian.pointProps) {\n        newPoint = new EditPoint(this.id, pointOrCartesian.position, pointOrCartesian.pointProps);\n      } else {\n        newPoint = new EditPoint(this.id, pointOrCartesian, this.defaultPointProps);\n      }\n      newPoints.push(newPoint);\n    }\n    this.positions = newPoints;\n    this.polygonProps = polygonProps ? polygonProps : this.polygonProps;\n    this.updatePointsLayer(true, ...this.positions);\n    this.addAllVirtualEditPoints();\n    this.updatePolygonsLayer();\n  }\n\n  private addAllVirtualEditPoints() {\n    const currentPoints = [...this.positions];\n    currentPoints.forEach((pos, index) => {\n      const currentPoint = pos;\n      const nextIndex = (index + 1) % (currentPoints.length);\n      const nextPoint = currentPoints[nextIndex];\n      const midPoint = this.setMiddleVirtualPoint(currentPoint, nextPoint);\n      this.updatePointsLayer(false, midPoint);\n    });\n  }\n\n  private setMiddleVirtualPoint(firstP: EditPoint, secondP: EditPoint): EditPoint {\n    const midPointCartesian3 = Cartesian3.lerp(firstP.getPosition(), secondP.getPosition(), 0.5, new Cartesian3());\n    const midPoint = new EditPoint(this.id, midPointCartesian3, this.defaultPointProps);\n    midPoint.setVirtualEditPoint(true);\n\n    const firstIndex = this.positions.indexOf(firstP);\n    this.positions.splice(firstIndex + 1, 0, midPoint);\n    return midPoint;\n  }\n\n  private updateMiddleVirtualPoint(virtualEditPoint: EditPoint, prevPoint: EditPoint, nextPoint: EditPoint) {\n    const midPointCartesian3 = Cartesian3.lerp(prevPoint.getPosition(), nextPoint.getPosition(), 0.5, new Cartesian3());\n    virtualEditPoint.setPosition(midPointCartesian3);\n  }\n\n  changeVirtualPointToRealPoint(point: EditPoint) {\n    point.setVirtualEditPoint(false); // virtual point becomes a real point\n    const pointsCount = this.positions.length;\n    const pointIndex = this.positions.indexOf(point);\n    const nextIndex = (pointIndex + 1) % (pointsCount);\n    const preIndex = ((pointIndex - 1) + pointsCount) % pointsCount;\n\n    const nextPoint = this.positions[nextIndex];\n    const prePoint = this.positions[preIndex];\n\n    const firstMidPoint = this.setMiddleVirtualPoint(prePoint, point);\n    const secMidPoint = this.setMiddleVirtualPoint(point, nextPoint);\n    this.updatePointsLayer(true, firstMidPoint, secMidPoint, point);\n    this.updatePolygonsLayer();\n\n  }\n\n  private renderPolylines() {\n    this.polylines.forEach(polyline => this.polylinesLayer.remove(polyline.getId()));\n    this.polylines = [];\n    const realPoints = this.positions.filter(pos => !pos.isVirtualEditPoint());\n    realPoints.forEach((point, index) => {\n      const nextIndex = (index + 1) % (realPoints.length);\n      const nextPoint = realPoints[nextIndex];\n      const polyline = new EditPolyline(this.id, point.getPosition(), nextPoint.getPosition(), this.defaultPolylineProps);\n      this.polylines.push(polyline);\n      this.polylinesLayer.update(polyline, polyline.getId());\n    });\n  }\n\n  addPointFromExisting(position: Cartesian3) {\n    const newPoint = new EditPoint(this.id, position, this.defaultPointProps);\n    this.positions.push(newPoint);\n    this.updatePointsLayer(true, newPoint);\n  }\n\n\n  addPoint(position: Cartesian3) {\n    if (this.doneCreation) {\n      return;\n    }\n    const isFirstPoint = !this.positions.length;\n    if (isFirstPoint) {\n      const firstPoint = new EditPoint(this.id, position, this.defaultPointProps);\n      this.positions.push(firstPoint);\n      this.updatePointsLayer(true, firstPoint);\n    }\n\n    this.movingPoint = new EditPoint(this.id, position.clone(), this.defaultPointProps);\n    this.positions.push(this.movingPoint);\n\n    this.updatePointsLayer(true, this.movingPoint);\n    this.updatePolygonsLayer();\n  }\n\n  movePointFinish(editPoint: EditPoint) {\n    if (this.polygonOptions.clampHeightTo3D) {\n      editPoint.props.disableDepthTestDistance = Number.POSITIVE_INFINITY;\n      this.updatePointsLayer(false, editPoint);\n    }\n  }\n\n  movePoint(toPosition: Cartesian3, editPoint: EditPoint) {\n    editPoint.setPosition(toPosition);\n    if (this.doneCreation) {\n      if (editPoint.props.disableDepthTestDistance && this.polygonOptions.clampHeightTo3D) {\n        // To avoid bug with pickPosition() on point with disableDepthTestDistance\n        editPoint.props.disableDepthTestDistance = undefined;\n        return; // ignore first move because the pickPosition() could be wrong\n      }\n\n      if (editPoint.isVirtualEditPoint()) {\n        this.changeVirtualPointToRealPoint(editPoint);\n      }\n      const pointsCount = this.positions.length;\n      const pointIndex = this.positions.indexOf(editPoint);\n      const nextVirtualPoint = this.positions[(pointIndex + 1) % (pointsCount)];\n      const nextRealPoint = this.positions[(pointIndex + 2) % (pointsCount)];\n      const prevVirtualPoint = this.positions[((pointIndex - 1) + pointsCount) % pointsCount];\n      const prevRealPoint = this.positions[((pointIndex - 2) + pointsCount) % pointsCount];\n      this.updateMiddleVirtualPoint(nextVirtualPoint, editPoint, nextRealPoint);\n      this.updateMiddleVirtualPoint(prevVirtualPoint, editPoint, prevRealPoint);\n    }\n    this.updatePolygonsLayer();\n    this.updatePointsLayer(true, editPoint);\n  }\n\n  moveTempMovingPoint(toPosition: Cartesian3) {\n    if (this.movingPoint) {\n      this.movePoint(toPosition, this.movingPoint);\n    }\n  }\n\n  movePolygon(startMovingPosition: Cartesian3, draggedToPosition: Cartesian3) {\n    if (!this.doneCreation) {\n      return;\n    }\n    if (!this.lastDraggedToPosition) {\n      this.lastDraggedToPosition = startMovingPosition;\n    }\n\n    const delta = GeoUtilsService.getPositionsDelta(this.lastDraggedToPosition, draggedToPosition);\n    this.positions.forEach(point => {\n      const newPos = GeoUtilsService.addDeltaToPosition(point.getPosition(), delta, true);\n      point.setPosition(newPos);\n    });\n    this.updatePointsLayer();\n    this.lastDraggedToPosition = draggedToPosition;\n    this.positions.forEach(point => this.updatePointsLayer(true, point));\n  }\n\n  endMovePolygon() {\n    this.lastDraggedToPosition = undefined;\n  }\n\n  removePoint(pointToRemove: EditPoint) {\n    this.removePosition(pointToRemove);\n    this.positions\n      .filter(p => p.isVirtualEditPoint())\n      .forEach(p => this.removePosition(p));\n    this.addAllVirtualEditPoints();\n\n    this.renderPolylines();\n    if (this.getPointsCount() >= 3) {\n      this.polygonsLayer.update(this, this.id);\n    }\n  }\n\n  addLastPoint(position: Cartesian3) {\n    this.doneCreation = true;\n    this.removePosition(this.movingPoint); // remove movingPoint\n    this.movingPoint = null;\n    this.updatePolygonsLayer();\n\n    this.addAllVirtualEditPoints();\n  }\n\n  getRealPositions(): Cartesian3[] {\n    return this.getRealPoints().map(position => position.getPosition());\n  }\n\n  getRealPoints(): EditPoint[] {\n    return this.positions.filter(position => !position.isVirtualEditPoint() && position !== this.movingPoint);\n  }\n\n  getPoints(): EditPoint[] {\n    return this.positions.filter(position => position !== this.movingPoint);\n  }\n\n  getPositionsHierarchy(): PolygonHierarchy {\n    const positions = this.positions.filter(position => !position.isVirtualEditPoint()).map(position => position.getPosition().clone());\n    return new PolygonHierarchy(positions);\n  }\n\n  getPositionsHierarchyCallbackProperty(): CallbackProperty {\n    return new CallbackProperty(this.getPositionsHierarchy.bind(this), false);\n  }\n\n  private removePosition(point: EditPoint) {\n    const index = this.positions.findIndex((p) => p === point);\n    if (index < 0) {\n      return;\n    }\n    this.positions.splice(index, 1);\n    this.pointsLayer.remove(point.getId());\n  }\n\n  private updatePolygonsLayer() {\n    if (this.getPointsCount() >= 3) {\n      this.polygonsLayer.update(this, this.id);\n    }\n  }\n\n  private updatePointsLayer(renderPolylines = true, ...points: EditPoint[]) {\n    if (renderPolylines) {\n      this.renderPolylines();\n    }\n    points.forEach(p => this.pointsLayer.update(p, p.getId()));\n  }\n\n  dispose() {\n    this.polygonsLayer.remove(this.id);\n\n    this.positions.forEach(editPoint => {\n      this.pointsLayer.remove(editPoint.getId());\n    });\n    this.polylines.forEach(line => this.polylinesLayer.remove(line.getId()));\n    if (this.movingPoint) {\n      this.pointsLayer.remove(this.movingPoint.getId());\n      this.movingPoint = undefined;\n    }\n    this.positions.length = 0;\n  }\n\n  getPointsCount(): number {\n    return this.positions.length;\n  }\n\n  getId() {\n    return this.id;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Cartesian3 } from 'cesium';\nimport { EditablePolygon } from '../../../models/editable-polygon';\nimport { PolygonEditOptions } from '../../../models/polygon-edit-options';\nimport { AcLayerComponent } from '../../../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { CoordinateConverter } from '../../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\n\n@Injectable()\nexport class PolygonsManagerService {\n  polygons: Map<string, EditablePolygon> = new Map<string, EditablePolygon>();\n\n  createEditablePolygon(id: string, editPolygonsLayer: AcLayerComponent, editPointsLayer: AcLayerComponent,\n                        editPolylinesLayer: AcLayerComponent, coordinateConverter: CoordinateConverter,\n                        polygonOptions?: PolygonEditOptions, positions?: Cartesian3[]) {\n    const editablePolygon = new EditablePolygon(\n      id,\n      editPolygonsLayer,\n      editPointsLayer,\n      editPolylinesLayer,\n      coordinateConverter,\n      polygonOptions,\n      positions);\n    this.polygons.set(id, editablePolygon\n    );\n  }\n\n  dispose(id: string) {\n    this.polygons.get(id).dispose();\n    this.polygons.delete(id);\n  }\n\n  get(id: string): EditablePolygon {\n    return this.polygons.get(id);\n  }\n\n  clear() {\n    this.polygons.forEach(polygon => polygon.dispose());\n    this.polygons.clear();\n  }\n}\n","import { publish, tap } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { Color, ClassificationType, sampleTerrain, Cartographic, HeightReference, Cartesian3 } from 'cesium';\nimport { CesiumService } from '../../../../angular-cesium/services/cesium/cesium.service';\nimport { MapEventsManagerService } from '../../../../angular-cesium/services/map-events-mananger/map-events-manager';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { CesiumEvent } from '../../../../angular-cesium/services/map-events-mananger/consts/cesium-event.enum';\nimport { PickOptions } from '../../../../angular-cesium/services/map-events-mananger/consts/pickOptions.enum';\nimport { PolygonEditUpdate } from '../../../models/polygon-edit-update';\nimport { EditModes } from '../../../models/edit-mode.enum';\nimport { EditActions } from '../../../models/edit-actions.enum';\nimport { DisposableObservable } from '../../../../angular-cesium/services/map-events-mananger/disposable-observable';\nimport { CoordinateConverter } from '../../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { EditPoint } from '../../../models/edit-point';\nimport { CameraService } from '../../../../angular-cesium/services/camera/camera.service';\nimport { PolygonsManagerService } from './polygons-manager.service';\nimport { PolygonEditorObservable } from '../../../models/polygon-editor-observable';\nimport { EditablePolygon } from '../../../models/editable-polygon';\nimport { PolygonEditOptions, PolygonProps } from '../../../models/polygon-edit-options';\nimport { ClampTo3DOptions } from '../../../models/polyline-edit-options';\nimport { PointProps } from '../../../models/point-edit-options';\nimport { LabelProps } from '../../../models/label-props';\nimport { debounce, generateKey } from '../../utils';\nimport { when } from 'when';\n\nexport const DEFAULT_POLYGON_OPTIONS: PolygonEditOptions = {\n  addPointEvent: CesiumEvent.LEFT_CLICK,\n  addLastPointEvent: CesiumEvent.LEFT_DOUBLE_CLICK,\n  removePointEvent: CesiumEvent.RIGHT_CLICK,\n  dragPointEvent: CesiumEvent.LEFT_CLICK_DRAG,\n  dragShapeEvent: CesiumEvent.LEFT_CLICK_DRAG,\n  allowDrag: true,\n  pointProps: {\n    color: Color.WHITE.withAlpha(0.95),\n    outlineColor: Color.BLACK.withAlpha(0.2),\n    outlineWidth: 1,\n    pixelSize: 13,\n    virtualPointPixelSize: 8,\n    show: true,\n    showVirtual: true,\n    disableDepthTestDistance: Number.POSITIVE_INFINITY,\n  },\n  polygonProps: {\n    material: Color.CORNFLOWERBLUE.withAlpha(0.4),\n    fill: true,\n    classificationType: ClassificationType.BOTH,\n    zIndex: 0,\n  },\n  polylineProps: {\n    material: () => Color.WHITE,\n    width: 3,\n    clampToGround: false,\n    zIndex: 0,\n    classificationType: ClassificationType.BOTH,\n  },\n  clampHeightTo3D: false,\n  clampHeightTo3DOptions: {\n    clampToTerrain: false,\n    clampMostDetailed: true,\n    clampToHeightPickWidth: 2,\n  },\n};\n\n/**\n * Service for creating editable polygons\n *\n * You must provide `PolygonsEditorService` yourself.\n * PolygonsEditorService works together with `<polygons-editor>` component. Therefor you need to create `<polygons-editor>`\n * for each `PolygonsEditorService`, And of course somewhere under `<ac-map>`/\n *\n * + `create` for starting a creation of the shape over the map. Returns a extension of `PolygonEditorObservable`.\n * + `edit` for editing shape over the map starting from a given positions. Returns an extension of `PolygonEditorObservable`.\n * + To stop editing call `dsipose()` from the `PolygonEditorObservable` you get back from `create()` \\ `edit()`.\n *\n * **Labels over edited shapes**\n * Angular Cesium allows you to draw labels over a shape that is being edited with one of the editors.\n * To add label drawing logic to your editor use the function `setLabelsRenderFn()` that is defined on the\n * `PolygonEditorObservable` that is returned from calling `create()` \\ `edit()` of one of the editor services.\n * `setLabelsRenderFn()` - receives a callback that is called every time the shape is redrawn\n * (except when the shape is being dragged). The callback is called with the last shape state and with an array of the current labels.\n * The callback should return type `LabelProps[]`.\n * You can also use `updateLabels()` to pass an array of labels of type `LabelProps[]` to be drawn.\n *\n * usage:\n * ```typescript\n *  // Start creating polygon\n *  const editing$ = polygonsEditorService.create();\n *  this.editing$.subscribe(editResult => {\n *\t\t\t\tconsole.log(editResult.positions);\n *\t\t});\n *\n *  // Or edit polygon from existing polygon positions\n *  const editing$ = this.polygonsEditorService.edit(initialPos);\n *\n * ```\n */\n@Injectable()\nexport class PolygonsEditorService {\n  private mapEventsManager: MapEventsManagerService;\n  private updateSubject = new Subject<PolygonEditUpdate>();\n  private updatePublisher = publish<PolygonEditUpdate>()(this.updateSubject); // TODO maybe not needed\n  private coordinateConverter: CoordinateConverter;\n  private cameraService: CameraService;\n  private polygonsManager: PolygonsManagerService;\n  private observablesMap = new Map<string, DisposableObservable<any>[]>();\n  private cesiumScene: any;\n\n  private clampPointsDebounced = debounce((id, clampHeightTo3D: boolean, clampHeightTo3DOptions) => {\n    this.clampPoints(id, clampHeightTo3D, clampHeightTo3DOptions);\n  }, 300);\n\n  init(mapEventsManager: MapEventsManagerService,\n       coordinateConverter: CoordinateConverter,\n       cameraService: CameraService,\n       polygonsManager: PolygonsManagerService,\n       cesiumViewer: CesiumService,\n  ) {\n    this.mapEventsManager = mapEventsManager;\n    this.coordinateConverter = coordinateConverter;\n    this.cameraService = cameraService;\n    this.polygonsManager = polygonsManager;\n    this.updatePublisher.connect();\n\n    this.cesiumScene = cesiumViewer.getScene();\n  }\n\n  onUpdate(): Observable<PolygonEditUpdate> {\n    return this.updatePublisher;\n  }\n\n  private clampPoints(id, clampHeightTo3D: boolean, { clampToTerrain, clampMostDetailed, clampToHeightPickWidth }: ClampTo3DOptions) {\n    if (clampHeightTo3D && clampMostDetailed) {\n      const polygon = this.polygonsManager.get(id);\n      const points = polygon.getPoints();\n\n      if (!clampToTerrain) {\n        // 3dTiles\n        points.forEach(point => {\n          point.setPosition(this.cesiumScene.clampToHeight(point.getPosition(), undefined, clampToHeightPickWidth));\n        });\n        // const cartesians = points.map(point => point.getPosition());\n        // const promise = this.cesiumScene.clampToHeightMostDetailed(cartesians, undefined, clampToHeightPickWidth);\n        // promise.then((updatedCartesians) => {\n        //   points.forEach((point, index) => {\n        //     point.setPosition(updatedCartesians[index]);\n        //   });\n        // });\n      } else {\n        const cartographics = points.map(point => this.coordinateConverter.cartesian3ToCartographic(point.getPosition()));\n        const promise = sampleTerrain(this.cesiumScene.terrainProvider, 11, cartographics);\n        when(promise, (updatedPositions) => {\n          points.forEach((point, index) => {\n            point.setPosition(Cartographic.toCartesian(updatedPositions[index]));\n          });\n        });\n      }\n    }\n  }\n\n  private screenToPosition(cartesian2, clampHeightTo3D: boolean, { clampToHeightPickWidth, clampToTerrain }: ClampTo3DOptions) {\n    const cartesian3 = this.coordinateConverter.screenToCartesian3(cartesian2);\n\n    // If cartesian3 is undefined then the point inst on the globe\n    if (clampHeightTo3D && cartesian3) {\n      const globePositionPick = () => {\n        const ray = this.cameraService.getCamera().getPickRay(cartesian2);\n        return this.cesiumScene.globe.pick(ray, this.cesiumScene);\n      };\n\n      // is terrain?\n      if (clampToTerrain) {\n        return globePositionPick();\n      } else {\n        const cartesian3PickPosition = this.cesiumScene.pickPosition(cartesian2);\n        const latLon = CoordinateConverter.cartesian3ToLatLon(cartesian3PickPosition);\n        if (latLon.height < 0) {// means nothing picked -> Validate it\n          return globePositionPick();\n        }\n        return this.cesiumScene.clampToHeight(cartesian3PickPosition, undefined, clampToHeightPickWidth);\n      }\n    }\n\n    return cartesian3;\n  }\n\n  create(options = DEFAULT_POLYGON_OPTIONS, priority = 100): PolygonEditorObservable {\n    const positions: Cartesian3[] = [];\n    const id = generateKey();\n    const polygonOptions = this.setOptions(options);\n\n    const clientEditSubject = new BehaviorSubject<PolygonEditUpdate>({\n      id,\n      editAction: null,\n      editMode: EditModes.CREATE\n    });\n    let finishedCreate = false;\n\n    this.updateSubject.next({\n      id,\n      positions,\n      editMode: EditModes.CREATE,\n      editAction: EditActions.INIT,\n      polygonOptions: polygonOptions,\n    });\n\n    const finishCreation = (position: Cartesian3) => {\n      return this.switchToEditMode(\n        id,\n        position,\n        clientEditSubject,\n        positions,\n        priority,\n        polygonOptions,\n        editorObservable,\n        finishedCreate);\n    };\n\n    const mouseMoveRegistration = this.mapEventsManager.register({\n      event: CesiumEvent.MOUSE_MOVE,\n      pick: PickOptions.NO_PICK,\n      pickConfig: options.pickConfiguration,\n      priority,\n    });\n    const addPointRegistration = this.mapEventsManager.register({\n      event: polygonOptions.addPointEvent,\n      modifier: polygonOptions.addPointModifier,\n      pick: PickOptions.NO_PICK,\n      pickConfig: options.pickConfiguration,\n      priority,\n    });\n    const addLastPointRegistration = this.mapEventsManager.register({\n      event: polygonOptions.addLastPointEvent,\n      modifier: polygonOptions.addLastPointModifier,\n      pick: PickOptions.NO_PICK,\n      pickConfig: options.pickConfiguration,\n      priority,\n    });\n\n    this.observablesMap.set(id, [mouseMoveRegistration, addPointRegistration, addLastPointRegistration]);\n    const editorObservable = this.createEditorObservable(clientEditSubject, id, finishCreation);\n\n    mouseMoveRegistration.subscribe(({ movement: { endPosition } }) => {\n      const position = this.screenToPosition(endPosition, polygonOptions.clampHeightTo3D, polygonOptions.clampHeightTo3DOptions);\n\n      if (position) {\n        this.updateSubject.next({\n          id,\n          positions: this.getPositions(id),\n          editMode: EditModes.CREATE,\n          updatedPosition: position,\n          editAction: EditActions.MOUSE_MOVE,\n        });\n      }\n    });\n\n    addPointRegistration.subscribe(({ movement: { endPosition } }) => {\n      if (finishedCreate) {\n        return;\n      }\n      const position = this.screenToPosition(endPosition, polygonOptions.clampHeightTo3D, polygonOptions.clampHeightTo3DOptions);\n      if (!position) {\n        return;\n      }\n      const allPositions = this.getPositions(id);\n      if (allPositions.find((cartesian) => cartesian.equals(position))) {\n        return;\n      }\n\n      const updateValue = {\n        id,\n        positions: allPositions,\n        editMode: EditModes.CREATE,\n        updatedPosition: position,\n        editAction: EditActions.ADD_POINT,\n      };\n      this.updateSubject.next(updateValue);\n      clientEditSubject.next({\n        ...updateValue,\n        positions: this.getPositions(id),\n        points: this.getPoints(id),\n      });\n\n      if (polygonOptions.maximumNumberOfPoints && allPositions.length + 1 === polygonOptions.maximumNumberOfPoints) {\n        finishedCreate = finishCreation(position);\n      }\n    });\n\n\n    addLastPointRegistration.subscribe(({ movement: { endPosition } }) => {\n      const position = this.screenToPosition(endPosition, polygonOptions.clampHeightTo3D, polygonOptions.clampHeightTo3DOptions);\n      if (!position) {\n        return;\n      }\n\n      // Add last point to positions if not already added\n      const allPositions = this.getPositions(id);\n      if (!allPositions.find((cartesian) => cartesian.equals(position))) {\n        const updateValue = {\n          id,\n          positions: allPositions,\n          editMode: EditModes.CREATE,\n          updatedPosition: position,\n          editAction: EditActions.ADD_POINT,\n        };\n        this.updateSubject.next(updateValue);\n        clientEditSubject.next({\n          ...updateValue,\n          positions: this.getPositions(id),\n          points: this.getPoints(id),\n        });\n      }\n\n      finishedCreate = finishCreation(position);\n    });\n\n    return editorObservable;\n  }\n\n  private switchToEditMode(id,\n                           position,\n                           clientEditSubject,\n                           positions: Cartesian3[],\n                           priority,\n                           polygonOptions,\n                           editorObservable,\n                           finishedCreate: boolean) {\n    const updateValue = {\n      id,\n      positions: this.getPositions(id),\n      editMode: EditModes.CREATE,\n      updatedPosition: position,\n      editAction: EditActions.ADD_LAST_POINT,\n    };\n    this.updateSubject.next(updateValue);\n    clientEditSubject.next({\n      ...updateValue,\n      positions: this.getPositions(id),\n      points: this.getPoints(id),\n    });\n\n    const changeMode = {\n      id,\n      editMode: EditModes.CREATE,\n      editAction: EditActions.CHANGE_TO_EDIT,\n    };\n    this.updateSubject.next(changeMode);\n    clientEditSubject.next(changeMode);\n    if (this.observablesMap.has(id)) {\n      this.observablesMap.get(id).forEach(registration => registration.dispose());\n    }\n    this.observablesMap.delete(id);\n    this.editPolygon(id, positions, priority, clientEditSubject, polygonOptions, editorObservable);\n    finishedCreate = true;\n    return finishedCreate;\n  }\n\n  edit(positions: Cartesian3[], options = DEFAULT_POLYGON_OPTIONS, priority = 100): PolygonEditorObservable {\n    if (positions.length < 3) {\n      throw new Error('Polygons editor error edit(): polygon should have at least 3 positions');\n    }\n    const id = generateKey();\n    const polygonOptions = this.setOptions(options);\n    const editSubject = new BehaviorSubject<PolygonEditUpdate>({\n      id,\n      editAction: null,\n      editMode: EditModes.EDIT\n    });\n    const update = {\n      id,\n      positions: positions,\n      editMode: EditModes.EDIT,\n      editAction: EditActions.INIT,\n      polygonOptions: polygonOptions,\n    };\n    this.updateSubject.next(update);\n    editSubject.next({\n      ...update,\n      positions: this.getPositions(id),\n      points: this.getPoints(id),\n    });\n    return this.editPolygon(\n      id,\n      positions,\n      priority,\n      editSubject,\n      polygonOptions\n    );\n  }\n\n  private editPolygon(id: string,\n                      positions: Cartesian3[],\n                      priority: number,\n                      editSubject: Subject<PolygonEditUpdate>,\n                      options: PolygonEditOptions,\n                      editObservable?: PolygonEditorObservable): PolygonEditorObservable {\n    this.clampPoints(id, options.clampHeightTo3D, options.clampHeightTo3DOptions);\n\n    const pointDragRegistration = this.mapEventsManager.register({\n      event: options.dragPointEvent,\n      entityType: EditPoint,\n      pick: PickOptions.PICK_FIRST,\n      pickConfig: options.pickConfiguration,\n      priority,\n      pickFilter: entity => id === entity.editedEntityId,\n    });\n\n    let shapeDragRegistration;\n    if (options.allowDrag) {\n      shapeDragRegistration = this.mapEventsManager.register({\n        event: options.dragShapeEvent,\n        entityType: EditablePolygon,\n        pick: PickOptions.PICK_FIRST,\n        pickConfig: options.pickConfiguration,\n        priority,\n        pickFilter: entity => id === entity.id,\n      });\n    }\n    const pointRemoveRegistration = this.mapEventsManager.register({\n      event: options.removePointEvent,\n      entityType: EditPoint,\n      modifier: options.removePointModifier,\n      pick: PickOptions.PICK_FIRST,\n      pickConfig: options.pickConfiguration,\n      priority,\n      pickFilter: entity => id === entity.editedEntityId,\n    });\n\n    pointDragRegistration.pipe(\n      tap(({ movement: { drop } }) => this.polygonsManager.get(id).enableEdit && this.cameraService.enableInputs(drop)))\n      .subscribe(({ movement: { endPosition, drop }, entities }) => {\n        const position = this.screenToPosition(endPosition, options.clampHeightTo3D, options.clampHeightTo3DOptions);\n        if (!position) {\n          return;\n        }\n        const point: EditPoint = entities[0];\n\n        const update = {\n          id,\n          positions: this.getPositions(id),\n          editMode: EditModes.EDIT,\n          updatedPosition: position,\n          updatedPoint: point,\n          editAction: drop ? EditActions.DRAG_POINT_FINISH : EditActions.DRAG_POINT,\n        };\n        this.updateSubject.next(update);\n        editSubject.next({\n          ...update,\n          positions: this.getPositions(id),\n          points: this.getPoints(id),\n        });\n\n        this.clampPointsDebounced(id, options.clampHeightTo3D, options.clampHeightTo3DOptions);\n      });\n\n    if (shapeDragRegistration) {\n      shapeDragRegistration\n        .pipe(tap(({ movement: { drop } }) => this.polygonsManager.get(id).enableEdit && this.cameraService.enableInputs(drop)))\n        .subscribe(({ movement: { startPosition, endPosition, drop }, entities }) => {\n          const endDragPosition = this.screenToPosition(endPosition, false, options.clampHeightTo3DOptions);\n          const startDragPosition = this.screenToPosition(startPosition, false, options.clampHeightTo3DOptions);\n          if (!endDragPosition) {\n            return;\n          }\n\n          const update = {\n            id,\n            positions: this.getPositions(id),\n            editMode: EditModes.EDIT,\n            updatedPosition: endDragPosition,\n            draggedPosition: startDragPosition,\n            editAction: drop ? EditActions.DRAG_SHAPE_FINISH : EditActions.DRAG_SHAPE,\n          };\n          this.updateSubject.next(update);\n          editSubject.next({\n            ...update,\n            positions: this.getPositions(id),\n            points: this.getPoints(id),\n          });\n        });\n    }\n\n    pointRemoveRegistration.subscribe(({ entities }) => {\n      const point: EditPoint = entities[0];\n      const allPositions = [...this.getPositions(id)];\n      if (allPositions.length < 4) {\n        return;\n      }\n      const index = allPositions.findIndex(position => point.getPosition().equals(position as Cartesian3));\n      if (index < 0) {\n        return;\n      }\n\n      const update = {\n        id,\n        positions: allPositions,\n        editMode: EditModes.EDIT,\n        updatedPoint: point,\n        editAction: EditActions.REMOVE_POINT,\n      };\n      this.updateSubject.next(update);\n      editSubject.next({\n        ...update,\n        positions: this.getPositions(id),\n        points: this.getPoints(id),\n      });\n\n      this.clampPoints(id, options.clampHeightTo3D, options.clampHeightTo3DOptions);\n    });\n\n    const observables = [pointDragRegistration, pointRemoveRegistration];\n    if (shapeDragRegistration) {\n      observables.push(shapeDragRegistration);\n    }\n\n    this.observablesMap.set(id, observables);\n    return editObservable || this.createEditorObservable(editSubject, id);\n  }\n\n  private setOptions(options: PolygonEditOptions) {\n    if (options.maximumNumberOfPoints && options.maximumNumberOfPoints < 3) {\n      console.warn('Warn: PolygonEditor invalid option.' +\n        ' maximumNumberOfPoints smaller then 3, maximumNumberOfPoints changed to 3');\n      options.maximumNumberOfPoints = 3;\n    }\n\n    const defaultClone = JSON.parse(JSON.stringify(DEFAULT_POLYGON_OPTIONS));\n    const polygonOptions: PolygonEditOptions = Object.assign(defaultClone, options);\n    polygonOptions.pointProps = { ...DEFAULT_POLYGON_OPTIONS.pointProps, ...options.pointProps};\n    polygonOptions.polygonProps = {...DEFAULT_POLYGON_OPTIONS.polygonProps, ...options.polygonProps};\n    polygonOptions.polylineProps = {...DEFAULT_POLYGON_OPTIONS.polylineProps, ...options.polylineProps};\n    polygonOptions.clampHeightTo3DOptions = { ...DEFAULT_POLYGON_OPTIONS.clampHeightTo3DOptions, ...options.clampHeightTo3DOptions};\n\n    if (options.clampHeightTo3D) {\n      if (!this.cesiumScene.pickPositionSupported || !this.cesiumScene.clampToHeightSupported) {\n        throw new Error(`Cesium pickPosition and clampToHeight must be supported to use clampHeightTo3D`);\n      }\n\n      if (this.cesiumScene.pickTranslucentDepth) {\n        console.warn(`Cesium scene.pickTranslucentDepth must be false in order to make the editors work properly on 3D`);\n      }\n\n      if (polygonOptions.pointProps.color.alpha === 1 || polygonOptions.pointProps.outlineColor.alpha === 1) {\n        console.warn('Point color and outline color must have alpha in order to make the editor work properly on 3D');\n      }\n\n      polygonOptions.allowDrag = false;\n      polygonOptions.polylineProps.clampToGround = true;\n      polygonOptions.pointProps.heightReference = polygonOptions.clampHeightTo3DOptions.clampToTerrain ?\n        HeightReference.CLAMP_TO_GROUND : HeightReference.RELATIVE_TO_GROUND;\n      polygonOptions.pointProps.disableDepthTestDistance = Number.POSITIVE_INFINITY;\n    }\n    return polygonOptions;\n  }\n\n\n  private createEditorObservable(observableToExtend: any, id: string, finishCreation?: (position: Cartesian3) => boolean)\n                                                                                                        : PolygonEditorObservable {\n    observableToExtend.dispose = () => {\n      const observables = this.observablesMap.get(id);\n      if (observables) {\n        observables.forEach(obs => obs.dispose());\n      }\n      this.observablesMap.delete(id);\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.DISPOSE,\n      });\n    };\n    observableToExtend.enable = () => {\n      this.updateSubject.next({\n        id,\n        positions: this.getPositions(id),\n        editMode: EditModes.EDIT,\n        editAction: EditActions.ENABLE,\n      });\n    };\n    observableToExtend.disable = () => {\n      this.updateSubject.next({\n        id,\n        positions: this.getPositions(id),\n        editMode: EditModes.EDIT,\n        editAction: EditActions.DISABLE,\n      });\n    };\n    observableToExtend.setManually = (points: {\n      position: Cartesian3, pointProps: PointProps\n    }[] | Cartesian3[], polygonProps?: PolygonProps) => {\n      const polygon = this.polygonsManager.get(id);\n      polygon.setPointsManually(points, polygonProps);\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.SET_MANUALLY,\n      });\n    };\n\n    observableToExtend.setLabelsRenderFn = (callback: any) => {\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.SET_EDIT_LABELS_RENDER_CALLBACK,\n        labelsRenderFn: callback,\n      });\n    };\n\n    observableToExtend.updateLabels = (labels: LabelProps[]) => {\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.UPDATE_EDIT_LABELS,\n        updateLabels: labels,\n      });\n    };\n\n    observableToExtend.finishCreation = () => {\n      if (!finishCreation) {\n        throw new Error('Polygons editor error edit(): cannot call finishCreation() on edit');\n      }\n\n      return finishCreation(null);\n    };\n\n    observableToExtend.getCurrentPoints = () => this.getPoints(id);\n\n    observableToExtend.getEditValue = () => observableToExtend.getValue();\n\n    observableToExtend.getLabels = (): LabelProps[] => this.polygonsManager.get(id).labels;\n\n    return observableToExtend as PolygonEditorObservable;\n  }\n\n  private getPositions(id: string) {\n    const polygon = this.polygonsManager.get(id);\n    return polygon.getRealPositions();\n  }\n\n  private getPoints(id: string) {\n    const polygon = this.polygonsManager.get(id);\n    return polygon.getRealPoints();\n  }\n}\n","import { ChangeDetectionStrategy, Component, OnDestroy, ViewChild } from '@angular/core';\nimport { CesiumService } from '../../../angular-cesium/services/cesium/cesium.service';\nimport { EditModes } from '../../models/edit-mode.enum';\nimport { PolygonEditUpdate } from '../../models/polygon-edit-update';\nimport { AcNotification } from '../../../angular-cesium/models/ac-notification';\nimport { EditActions } from '../../models/edit-actions.enum';\nimport { AcLayerComponent } from '../../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { CoordinateConverter } from '../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { MapEventsManagerService } from '../../../angular-cesium/services/map-events-mananger/map-events-manager';\nimport { Subject } from 'rxjs';\nimport { CameraService } from '../../../angular-cesium/services/camera/camera.service';\nimport { EditPoint } from '../../models/edit-point';\nimport { PolygonsManagerService } from '../../services/entity-editors/polygons-editor/polygons-manager.service';\nimport { PolygonsEditorService } from '../../services/entity-editors/polygons-editor/polygons-editor.service';\nimport { LabelProps } from '../../models/label-props';\nimport { EditablePolygon } from '../../models/editable-polygon';\n\n@Component({\n    selector: 'polygons-editor',\n    template: /*html*/ `\n    <ac-layer #editPolylinesLayer acFor=\"let polyline of editPolylines$\" [context]=\"this\">\n      <ac-polyline-desc\n        props=\"{\n        positions: polyline.getPositionsCallbackProperty(),\n        width: polyline.props.width,\n        material: polyline.props.material(),\n        clampToGround: polyline.props.clampToGround,\n        zIndex: polyline.props.zIndex,\n        classificationType: polyline.props.classificationType,\n      }\"\n      >\n      </ac-polyline-desc>\n    </ac-layer>\n\n    <ac-layer #editPointsLayer acFor=\"let point of editPoints$\" [context]=\"this\">\n      <ac-point-desc\n        props=\"{\n        position: point.getPositionCallbackProperty(),\n        pixelSize: getPointSize(point),\n        color: point.props.color,\n        outlineColor: point.props.outlineColor,\n        outlineWidth: point.props.outlineWidth,\n        show: getPointShow(point),\n        disableDepthTestDistance: point.props.disableDepthTestDistance,\n        heightReference: point.props.heightReference,\n    }\"\n      >\n      </ac-point-desc>\n    </ac-layer>\n\n    <ac-layer #editPolygonsLayer acFor=\"let polygon of editPolygons$\" [context]=\"this\">\n      <ac-polygon-desc\n        props=\"{\n          hierarchy: polygon.getPositionsHierarchyCallbackProperty(),\n          material: polygon.polygonProps.material,\n          fill: polygon.polygonProps.fill,\n          classificationType: polygon.polygonProps.classificationType,\n          zIndex: polygon.polygonProps.zIndex,\n        }\"\n      >\n      </ac-polygon-desc>\n      <ac-array-desc acFor=\"let label of polygon.labels\" [idGetter]=\"getLabelId\">\n        <ac-label-primitive-desc\n          props=\"{\n            position: label.position,\n            backgroundColor: label.backgroundColor,\n            backgroundPadding: label.backgroundPadding,\n            distanceDisplayCondition: label.distanceDisplayCondition,\n            eyeOffset: label.eyeOffset,\n            fillColor: label.fillColor,\n            font: label.font,\n            heightReference: label.heightReference,\n            horizontalOrigin: label.horizontalOrigin,\n            outlineColor: label.outlineColor,\n            outlineWidth: label.outlineWidth,\n            pixelOffset: label.pixelOffset,\n            pixelOffsetScaleByDistance: label.pixelOffsetScaleByDistance,\n            scale: label.scale,\n            scaleByDistance: label.scaleByDistance,\n            show: label.show,\n            showBackground: label.showBackground,\n            style: label.style,\n            text: label.text,\n            translucencyByDistance: label.translucencyByDistance,\n            verticalOrigin: label.verticalOrigin,\n            disableDepthTestDistance: label.disableDepthTestDistance,\n        }\"\n        >\n        </ac-label-primitive-desc>\n      </ac-array-desc>\n    </ac-layer>\n  `,\n    providers: [CoordinateConverter, PolygonsManagerService],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class PolygonsEditorComponent implements OnDestroy {\n  private editLabelsRenderFn: (update: PolygonEditUpdate, labels: LabelProps[]) => LabelProps[];\n  public editPoints$ = new Subject<AcNotification>();\n  public editPolylines$ = new Subject<AcNotification>();\n  public editPolygons$ = new Subject<AcNotification>();\n\n  @ViewChild('editPolygonsLayer') private editPolygonsLayer: AcLayerComponent;\n  @ViewChild('editPointsLayer') private editPointsLayer: AcLayerComponent;\n  @ViewChild('editPolylinesLayer') private editPolylinesLayer: AcLayerComponent;\n\n  constructor(\n    private polygonsEditor: PolygonsEditorService,\n    private coordinateConverter: CoordinateConverter,\n    private mapEventsManager: MapEventsManagerService,\n    private cameraService: CameraService,\n    private polygonsManager: PolygonsManagerService,\n    private cesiumService: CesiumService\n  ) {\n    this.polygonsEditor.init(this.mapEventsManager, this.coordinateConverter, this.cameraService, this.polygonsManager, this.cesiumService);\n    this.startListeningToEditorUpdates();\n  }\n\n  private startListeningToEditorUpdates() {\n    this.polygonsEditor.onUpdate().subscribe((update: PolygonEditUpdate) => {\n      if (update.editMode === EditModes.CREATE || update.editMode === EditModes.CREATE_OR_EDIT) {\n        this.handleCreateUpdates(update);\n      } else if (update.editMode === EditModes.EDIT) {\n        this.handleEditUpdates(update);\n      }\n    });\n  }\n\n  getLabelId(element: any, index: number): string {\n    return index.toString();\n  }\n\n  renderEditLabels(polygon: EditablePolygon, update: PolygonEditUpdate, labels?: LabelProps[]) {\n    update.positions = polygon.getRealPositions();\n    update.points = polygon.getRealPoints();\n\n    if (labels) {\n      polygon.labels = labels;\n      this.editPolygonsLayer.update(polygon, polygon.getId());\n      return;\n    }\n\n    if (!this.editLabelsRenderFn) {\n      return;\n    }\n\n    polygon.labels = this.editLabelsRenderFn(update, polygon.labels);\n    this.editPolygonsLayer.update(polygon, polygon.getId());\n  }\n\n  removeEditLabels(polygon: EditablePolygon) {\n    polygon.labels = [];\n    this.editPolygonsLayer.update(polygon, polygon.getId());\n  }\n\n  handleCreateUpdates(update: PolygonEditUpdate) {\n    switch (update.editAction) {\n      case EditActions.INIT: {\n        this.polygonsManager.createEditablePolygon(\n          update.id,\n          this.editPolygonsLayer,\n          this.editPointsLayer,\n          this.editPolylinesLayer,\n          this.coordinateConverter,\n          update.polygonOptions,\n        );\n        break;\n      }\n      case EditActions.MOUSE_MOVE: {\n        const polygon = this.polygonsManager.get(update.id);\n        if (update.updatedPosition) {\n          polygon.moveTempMovingPoint(update.updatedPosition);\n          this.renderEditLabels(polygon, update);\n        }\n        break;\n      }\n      case EditActions.ADD_POINT: {\n        const polygon = this.polygonsManager.get(update.id);\n        if (update.updatedPosition) {\n          polygon.moveTempMovingPoint(update.updatedPosition);\n          polygon.addPoint(update.updatedPosition);\n          this.renderEditLabels(polygon, update);\n        }\n        break;\n      }\n      case EditActions.ADD_LAST_POINT: {\n        const polygon = this.polygonsManager.get(update.id);\n        if (update.updatedPosition) {\n          polygon.addLastPoint(update.updatedPosition);\n          this.renderEditLabels(polygon, update);\n        }\n        break;\n      }\n      case EditActions.DISPOSE: {\n        const polygon = this.polygonsManager.get(update.id);\n        if (polygon) {\n          this.removeEditLabels(polygon);\n          polygon.dispose();\n          this.editLabelsRenderFn = undefined;\n        }\n        break;\n      }\n      case EditActions.SET_EDIT_LABELS_RENDER_CALLBACK: {\n        const polygon = this.polygonsManager.get(update.id);\n        this.editLabelsRenderFn = update.labelsRenderFn;\n        this.renderEditLabels(polygon, update);\n        break;\n      }\n      case EditActions.UPDATE_EDIT_LABELS: {\n        const polygon = this.polygonsManager.get(update.id);\n        this.renderEditLabels(polygon, update, update.updateLabels);\n        break;\n      }\n      case EditActions.SET_MANUALLY: {\n        const polygon = this.polygonsManager.get(update.id);\n        this.renderEditLabels(polygon, update, update.updateLabels);\n        break;\n      }\n      default: {\n        return;\n      }\n    }\n  }\n\n  handleEditUpdates(update: PolygonEditUpdate) {\n    switch (update.editAction) {\n      case EditActions.INIT: {\n        this.polygonsManager.createEditablePolygon(\n          update.id,\n          this.editPolygonsLayer,\n          this.editPointsLayer,\n          this.editPolylinesLayer,\n          this.coordinateConverter,\n          update.polygonOptions,\n          update.positions,\n        );\n        break;\n      }\n      case EditActions.DRAG_POINT: {\n        const polygon = this.polygonsManager.get(update.id);\n        if (polygon && polygon.enableEdit) {\n          polygon.movePoint(update.updatedPosition, update.updatedPoint);\n          this.renderEditLabels(polygon, update);\n        }\n        break;\n      }\n      case EditActions.DRAG_POINT_FINISH: {\n        const polygon = this.polygonsManager.get(update.id);\n        if (polygon && polygon.enableEdit) {\n          polygon.movePointFinish(update.updatedPoint);\n\n          if (update.updatedPoint.isVirtualEditPoint()) {\n            polygon.changeVirtualPointToRealPoint(update.updatedPoint);\n            this.renderEditLabels(polygon, update);\n          }\n        }\n        break;\n      }\n      case EditActions.REMOVE_POINT: {\n        const polygon = this.polygonsManager.get(update.id);\n        if (polygon && polygon.enableEdit) {\n          polygon.removePoint(update.updatedPoint);\n          this.renderEditLabels(polygon, update);\n        }\n        break;\n      }\n      case EditActions.DISABLE: {\n        const polygon = this.polygonsManager.get(update.id);\n        if (polygon) {\n          polygon.enableEdit = false;\n          this.renderEditLabels(polygon, update);\n        }\n        break;\n      }\n      case EditActions.DRAG_SHAPE: {\n        const polygon = this.polygonsManager.get(update.id);\n        if (polygon && polygon.enableEdit) {\n          polygon.movePolygon(update.draggedPosition, update.updatedPosition);\n          this.renderEditLabels(polygon, update);\n        }\n        break;\n      }\n\n      case EditActions.DRAG_SHAPE_FINISH: {\n        const polygon = this.polygonsManager.get(update.id);\n        if (polygon && polygon.enableEdit) {\n          polygon.endMovePolygon();\n          this.renderEditLabels(polygon, update);\n        }\n        break;\n      }\n      case EditActions.ENABLE: {\n        const polygon = this.polygonsManager.get(update.id);\n        if (polygon) {\n          polygon.enableEdit = true;\n          this.renderEditLabels(polygon, update);\n        }\n        break;\n      }\n      default: {\n        return;\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.polygonsManager.clear();\n  }\n\n  getPointSize(point: EditPoint) {\n    return point.isVirtualEditPoint() ? point.props.virtualPointPixelSize : point.props.pixelSize;\n  }\n\n  getPointShow(point: EditPoint) {\n    return point.show && (point.isVirtualEditPoint() ? point.props.showVirtual : point.props.show);\n  }\n}\n","import { Cartesian3 } from 'cesium';\nimport { AcEntity } from '../../angular-cesium/models/ac-entity';\nimport { PolylineProps } from './polyline-edit-options';\n\nexport class EditArc extends AcEntity {\n  static counter = 0;\n  private id: string;\n  private editedEntityId: string;\n  private _center: Cartesian3;\n  private _radius: number;\n  private _delta: number;\n  private _angle: number;\n\n  constructor(entityId: string, center: Cartesian3, radius: number, delta: number, angle: number, private _arcProps: PolylineProps) {\n    super();\n    this.id = this.generateId();\n    this.editedEntityId = entityId;\n    this._center = center;\n    this._radius = radius;\n    this._delta = delta;\n    this._angle = angle;\n  }\n\n  get props() {\n    return this._arcProps;\n  }\n\n  set props(props: PolylineProps) {\n    this._arcProps = props;\n  }\n\n  get angle(): number {\n    return this._angle;\n  }\n\n  set angle(value: number) {\n    this._angle = value;\n  }\n\n  get delta(): number {\n    return this._delta;\n  }\n\n  set delta(value: number) {\n    this._delta = value;\n  }\n\n  get radius(): number {\n    return this._radius;\n  }\n\n  set radius(value: number) {\n    this._radius = value;\n  }\n\n  get center(): Cartesian3 {\n    return this._center;\n  }\n\n  set center(value: Cartesian3) {\n    this._center = value;\n  }\n\n  updateCenter(center: Cartesian3) {\n    this._center.x = center.x;\n    this._center.y = center.y;\n    this._center.z = center.z;\n  }\n\n  getId(): string {\n    return this.id;\n  }\n\n  private generateId(): string {\n    return 'edit-arc-' + EditArc.counter++;\n  }\n}\n","import { CallbackProperty, Cartesian3 } from 'cesium';\nimport { AcEntity } from '../../angular-cesium/models/ac-entity';\nimport { EditPoint } from './edit-point';\nimport { AcLayerComponent } from '../../angular-cesium/components/ac-layer/ac-layer.component';\n//import { Cartesian3 } from '../../angular-cesium/models/cartesian3';\nimport { GeoUtilsService } from '../../angular-cesium/services/geo-utils/geo-utils.service';\nimport { EditArc } from './edit-arc';\nimport { CircleEditOptions } from './circle-edit-options';\nimport { PointProps } from './point-edit-options';\nimport { PolylineProps } from './polyline-edit-options';\nimport { defaultLabelProps, LabelProps } from './label-props';\nimport { EllipseProps } from './ellipse-edit-options';\n\nexport class EditableCircle extends AcEntity {\n  private _center: EditPoint;\n  private _radiusPoint: EditPoint;\n  private _outlineArc: EditArc;\n  private doneCreation = false;\n  private _enableEdit = true;\n  private lastDraggedToPosition: any;\n  private _circleProps: EllipseProps;\n  private _pointProps: PointProps;\n  private _polylineProps: PolylineProps;\n  private _labels: LabelProps[] = [];\n\n  constructor(\n    private id: string,\n    private circlesLayer: AcLayerComponent,\n    private pointsLayer: AcLayerComponent,\n    private arcsLayer: AcLayerComponent,\n    private options: CircleEditOptions,\n  ) {\n    super();\n    this._circleProps = {...options.circleProps};\n    this._pointProps = {...options.pointProps};\n    this._polylineProps = {...options.polylineProps};\n  }\n\n  get labels(): LabelProps[] {\n    return this._labels;\n  }\n\n  set labels(labels: LabelProps[]) {\n    if (!labels || !this._center || !this._radiusPoint) {\n      return;\n    }\n    this._labels = labels.map((label, index) => {\n      if (!label.position) {\n        if (index !== labels.length - 1) {\n          label.position = this._center.getPosition();\n        } else {\n          label.position = this._radiusPoint.getPosition();\n        }\n      }\n\n      return Object.assign({}, defaultLabelProps, label);\n    });\n  }\n\n  get polylineProps(): PolylineProps {\n    return this._polylineProps;\n  }\n\n  set polylineProps(value: PolylineProps) {\n    this._polylineProps = value;\n  }\n\n  get pointProps(): PointProps {\n    return this._pointProps;\n  }\n\n  set pointProps(value: PointProps) {\n    this._pointProps = value;\n  }\n\n  get circleProps(): EllipseProps {\n    return this._circleProps;\n  }\n\n  set circleProps(value: EllipseProps) {\n    this._circleProps = value;\n  }\n\n  get center(): EditPoint {\n    return this._center;\n  }\n\n  get radiusPoint(): EditPoint {\n    return this._radiusPoint;\n  }\n\n  get enableEdit() {\n    return this._enableEdit;\n  }\n\n  set enableEdit(value: boolean) {\n    this._enableEdit = value;\n    this._center.show = value;\n    this._radiusPoint.show = value;\n    this.updatePointsLayer();\n  }\n\n  setManually(\n    center: Cartesian3,\n    radiusPoint: Cartesian3,\n    centerPointProp = this.pointProps,\n    radiusPointProp = this.pointProps,\n    circleProp = this.circleProps,\n  ) {\n    if (!this._center) {\n      this._center = new EditPoint(this.id, center, centerPointProp);\n    } else {\n      this._center.setPosition(center);\n    }\n\n    if (!this._radiusPoint) {\n      this._radiusPoint = new EditPoint(this.id, radiusPoint, radiusPointProp);\n    } else {\n      this._radiusPoint.setPosition(radiusPoint);\n    }\n\n    if (!this._outlineArc) {\n      this.createOutlineArc();\n    } else {\n      this._outlineArc.radius = this.getRadius();\n    }\n\n    this.circleProps = circleProp;\n    this.doneCreation = true;\n    this.updateArcsLayer();\n    this.updatePointsLayer();\n    this.updateCirclesLayer();\n  }\n\n  addPoint(position: Cartesian3) {\n    if (this.doneCreation) {\n      return;\n    }\n\n    if (!this._center) {\n      this._center = new EditPoint(this.id, position, this.pointProps);\n      this._radiusPoint = new EditPoint(this.id, position.clone(), this.pointProps);\n      if (!this._outlineArc) {\n        this.createOutlineArc();\n      }\n    }\n\n    this.updateArcsLayer();\n    this.updatePointsLayer();\n    this.updateCirclesLayer();\n  }\n\n  addLastPoint(position: Cartesian3) {\n    if (this.doneCreation || !this._center || !this._radiusPoint) {\n      return;\n    }\n\n    this._radiusPoint.setPosition(position);\n    this.doneCreation = true;\n\n    this.updatePointsLayer();\n    this.updateCirclesLayer();\n  }\n\n  movePoint(toPosition: Cartesian3) {\n    if (!this._center || !this._radiusPoint) {\n      return;\n    }\n\n    this._radiusPoint.setPosition(toPosition);\n    this._outlineArc.radius = this.getRadius();\n\n    this.updateArcsLayer();\n    this.updatePointsLayer();\n    this.updateCirclesLayer();\n  }\n\n  moveCircle(dragStartPosition: Cartesian3, dragEndPosition: Cartesian3) {\n    if (!this.doneCreation) {\n      return;\n    }\n    if (!this.lastDraggedToPosition) {\n      this.lastDraggedToPosition = dragStartPosition;\n    }\n\n    const radius = this.getRadius();\n    const delta = GeoUtilsService.getPositionsDelta(this.lastDraggedToPosition, dragEndPosition);\n    const newCenterPosition = GeoUtilsService.addDeltaToPosition(this.getCenter(), delta, true);\n    this._center.setPosition(newCenterPosition);\n    this.radiusPoint.setPosition(GeoUtilsService.pointByLocationDistanceAndAzimuth(this.getCenter(), radius, Math.PI / 2, true));\n    this._outlineArc.radius = this.getRadius();\n    this._outlineArc.center = this._center.getPosition();\n    this.updateArcsLayer();\n    this.updatePointsLayer();\n    this.updateCirclesLayer();\n    this.lastDraggedToPosition = dragEndPosition;\n  }\n\n  endMovePolygon() {\n    this.lastDraggedToPosition = undefined;\n  }\n\n  getRadius(): number {\n    if (!this._center || !this._radiusPoint) {\n      return 0;\n    }\n    return GeoUtilsService.distance(this._center.getPosition(), this._radiusPoint.getPosition());\n  }\n\n  getRadiusCallbackProperty(): CallbackProperty {\n    return new CallbackProperty(this.getRadius.bind(this), false);\n  }\n\n  getCenter(): Cartesian3 {\n    return this._center ? this._center.getPosition() : undefined;\n  }\n\n  getCenterCallbackProperty(): CallbackProperty {\n    return new CallbackProperty(this.getCenter.bind(this), false);\n  }\n\n  getRadiusPoint(): Cartesian3 {\n    return this._radiusPoint ? this._radiusPoint.getPosition() : undefined;\n  }\n\n  dispose() {\n    if (this._center) {\n      this.pointsLayer.remove(this._center.getId());\n    }\n\n    if (this._radiusPoint) {\n      this.pointsLayer.remove(this._radiusPoint.getId());\n    }\n\n    if (this._outlineArc) {\n      this.arcsLayer.remove(this._outlineArc.getId());\n    }\n\n    this.circlesLayer.remove(this.id);\n  }\n\n  getId() {\n    return this.id;\n  }\n\n  private updateCirclesLayer() {\n    this.circlesLayer.update(this, this.id);\n  }\n\n  private updatePointsLayer() {\n    if (this._center) {\n      this.pointsLayer.update(this._center, this._center.getId());\n    }\n    if (this._radiusPoint) {\n      this.pointsLayer.update(this._radiusPoint, this._radiusPoint.getId());\n    }\n  }\n\n  private updateArcsLayer() {\n    if (!this._outlineArc) {\n      return;\n    }\n    this.arcsLayer.update(this._outlineArc, this._outlineArc.getId());\n  }\n\n  private createOutlineArc() {\n    if (!this._center || !this._radiusPoint) {\n      return;\n    }\n    this._outlineArc = new EditArc(this.id, this.getCenter(), this.getRadius(), Math.PI * 2, 0, this.polylineProps);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { EditableCircle } from '../../../models/editable-circle';\nimport { AcLayerComponent } from '../../../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { CircleEditOptions } from '../../../models/circle-edit-options';\n\n@Injectable()\nexport class CirclesManagerService {\n  private circles = new Map<string, EditableCircle>();\n\n  createEditableCircle(id: string,\n                       editCirclesLayer: AcLayerComponent,\n                       editPointsLayer: AcLayerComponent,\n                       editArcsLayer: AcLayerComponent,\n                       circleOptions: CircleEditOptions): EditableCircle {\n    const editableCircle = new EditableCircle(id, editCirclesLayer, editPointsLayer, editArcsLayer, circleOptions);\n    this.circles.set(id, editableCircle);\n    return editableCircle;\n  }\n\n  dispose(id: string) {\n    const circle = this.circles.get(id);\n    if (circle) {\n      circle.dispose();\n    }\n    this.circles.delete(id);\n  }\n\n  get(id: string): EditableCircle {\n    return this.circles.get(id);\n  }\n\n  clear() {\n    this.circles.forEach(circle => circle.dispose());\n    this.circles.clear();\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { publish, tap } from 'rxjs/operators';\nimport { Color, ClassificationType, ShadowMode, Cartesian3 } from 'cesium';\nimport { CameraService } from '../../../../angular-cesium/services/camera/camera.service';\nimport { CoordinateConverter } from '../../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { GeoUtilsService } from '../../../../angular-cesium/services/geo-utils/geo-utils.service';\nimport { CesiumEvent } from '../../../../angular-cesium/services/map-events-mananger/consts/cesium-event.enum';\nimport { PickOptions } from '../../../../angular-cesium/services/map-events-mananger/consts/pickOptions.enum';\nimport { DisposableObservable } from '../../../../angular-cesium/services/map-events-mananger/disposable-observable';\nimport { MapEventsManagerService } from '../../../../angular-cesium/services/map-events-mananger/map-events-manager';\nimport { BasicEditUpdate } from '../../../models/basic-edit-update';\nimport { CircleEditOptions } from '../../../models/circle-edit-options';\nimport { CircleEditUpdate } from '../../../models/circle-edit-update';\nimport { CircleEditorObservable } from '../../../models/circle-editor-observable';\nimport { EditActions } from '../../../models/edit-actions.enum';\nimport { EditModes } from '../../../models/edit-mode.enum';\nimport { EditPoint } from '../../../models/edit-point';\nimport { EditableCircle } from '../../../models/editable-circle';\nimport { EllipseProps } from '../../../models/ellipse-edit-options';\nimport { LabelProps } from '../../../models/label-props';\nimport { PointProps } from '../../../models/point-edit-options';\nimport { generateKey } from '../../utils';\nimport { CirclesManagerService } from './circles-manager.service';\n\nexport const DEFAULT_CIRCLE_OPTIONS: CircleEditOptions = {\n  addPointEvent: CesiumEvent.LEFT_CLICK,\n  dragPointEvent: CesiumEvent.LEFT_CLICK_DRAG,\n  dragShapeEvent: CesiumEvent.LEFT_CLICK_DRAG,\n  allowDrag: true,\n  circleProps: {\n    material: Color.CORNFLOWERBLUE.withAlpha(0.4),\n    fill: true,\n    outline: false,\n    outlineWidth: 1,\n    outlineColor: Color.WHITE.withAlpha(0.8),\n    classificationType: ClassificationType.BOTH,\n    zIndex: 0,\n    shadows: ShadowMode.DISABLED,\n  },\n  pointProps: {\n    color: Color.WHITE,\n    outlineColor: Color.BLACK.withAlpha(0.2),\n    outlineWidth: 1,\n    pixelSize: 13,\n    virtualPointPixelSize: 8,\n    show: true,\n    showVirtual: true,\n    disableDepthTestDistance: Number.POSITIVE_INFINITY,\n  },\n  polylineProps: {\n    width: 1,\n    material: () => Color.WHITE.withAlpha(0.8),\n  },\n};\n\n/**\n * Service for creating editable circles\n *\n * You must provide `CircleEditorService` yourself.\n * PolygonsEditorService works together with `<circle-editor>` component. Therefor you need to create `<circle-editor>`\n * for each `CircleEditorService`, And of course somewhere under `<ac-map>`/\n *\n * + `create` for starting a creation of the shape over the map. Returns a extension of `CircleEditorObservable`.\n * + `edit` for editing shape over the map starting from a given positions. Returns an extension of `CircleEditorObservable`.\n * + To stop editing call `dsipose()` from the `CircleEditorObservable` you get back from `create()` \\ `edit()`.\n *\n * **Labels over editted shapes**\n * Angular Cesium allows you to draw labels over a shape that is being edited with one of the editors.\n * To add label drawing logic to your editor use the function `setLabelsRenderFn()` that is defined on the\n * `CircleEditorObservable` that is returned from calling `create()` \\ `edit()` of one of the editor services.\n * `setLabelsRenderFn()` - receives a callback that is called every time the shape is redrawn\n * (except when the shape is being dragged). The callback is called with the last shape state and with an array of the current labels.\n * The callback should return type `LabelProps[]`.\n * You can also use `updateLabels()` to pass an array of labels of type `LabelProps[]` to be drawn.\n *\n * usage:\n * ```typescript\n *  // Start creating circle\n *  const editing$ = circlesEditorService.create();\n *  this.editing$.subscribe(editResult => {\n *\t\t\t\tconsole.log(editResult.positions);\n *\t\t});\n *\n *  // Or edit circle from existing center point and radius\n *  const editing$ = this.circlesEditorService.edit(center, radius);\n *\n * ```\n */\n@Injectable()\nexport class CirclesEditorService {\n  private mapEventsManager: MapEventsManagerService;\n  private updateSubject = new Subject<CircleEditUpdate>();\n  private updatePublisher = publish<CircleEditUpdate>()(this.updateSubject); // TODO maybe not needed\n  private coordinateConverter: CoordinateConverter;\n  private cameraService: CameraService;\n  private circlesManager: CirclesManagerService;\n  private observablesMap = new Map<string, DisposableObservable<any>[]>();\n\n  init(\n    mapEventsManager: MapEventsManagerService,\n    coordinateConverter: CoordinateConverter,\n    cameraService: CameraService,\n    circlesManager: CirclesManagerService,\n  ) {\n    this.mapEventsManager = mapEventsManager;\n    this.coordinateConverter = coordinateConverter;\n    this.cameraService = cameraService;\n    this.circlesManager = circlesManager;\n    this.updatePublisher.connect();\n  }\n\n  onUpdate(): Observable<CircleEditUpdate> {\n    return this.updatePublisher;\n  }\n\n  create(options = DEFAULT_CIRCLE_OPTIONS, priority = 100): CircleEditorObservable {\n    let center: any;\n    const id = generateKey();\n    const circleOptions = this.setOptions(options);\n    const clientEditSubject = new BehaviorSubject<CircleEditUpdate>({\n      id,\n      editAction: null,\n      editMode: EditModes.CREATE,\n    });\n    let finishedCreate = false;\n\n    this.updateSubject.next({\n      id,\n      editMode: EditModes.CREATE,\n      editAction: EditActions.INIT,\n      circleOptions,\n    });\n\n    const finishCreation = (position: Cartesian3) => {\n      const update = {\n        id,\n        center,\n        radiusPoint: position,\n        editMode: EditModes.CREATE,\n        editAction: EditActions.ADD_LAST_POINT,\n      };\n      this.updateSubject.next(update);\n      clientEditSubject.next({\n        ...update,\n        ...this.getCircleProperties(id),\n      });\n\n      const changeMode = {\n        id,\n        center,\n        radiusPoint: position,\n        editMode: EditModes.CREATE,\n        editAction: EditActions.CHANGE_TO_EDIT,\n      };\n\n      this.updateSubject.next(changeMode);\n      clientEditSubject.next({\n        ...update,\n        ...this.getCircleProperties(id),\n      });\n      if (this.observablesMap.has(id)) {\n        this.observablesMap.get(id).forEach(registration => registration.dispose());\n      }\n      this.observablesMap.delete(id);\n      this.editCircle(id, priority, clientEditSubject, circleOptions, editorObservable);\n      finishedCreate = true;\n      return finishedCreate;\n    };\n\n    const mouseMoveRegistration = this.mapEventsManager.register({\n      event: CesiumEvent.MOUSE_MOVE,\n      pick: PickOptions.NO_PICK,\n      pickConfig: options.pickConfiguration,\n      priority,\n    });\n    const addPointRegistration = this.mapEventsManager.register({\n      event: CesiumEvent.LEFT_CLICK,\n      pick: PickOptions.NO_PICK,\n      pickConfig: options.pickConfiguration,\n      priority,\n    });\n\n    this.observablesMap.set(id, [mouseMoveRegistration, addPointRegistration]);\n    const editorObservable = this.createEditorObservable(clientEditSubject, id, finishCreation);\n\n    addPointRegistration.subscribe(({ movement: { endPosition } }) => {\n      if (finishedCreate) {\n        return;\n      }\n      const position = this.coordinateConverter.screenToCartesian3(endPosition);\n      if (!position) {\n        return;\n      }\n\n      if (!center) {\n        const update = {\n          id,\n          center: position,\n          editMode: EditModes.CREATE,\n          editAction: EditActions.ADD_POINT,\n        };\n        this.updateSubject.next(update);\n        clientEditSubject.next({\n          ...update,\n          ...this.getCircleProperties(id),\n        });\n        center = position;\n      } else {\n        finishedCreate = finishCreation(position);\n      }\n    });\n\n    mouseMoveRegistration.subscribe(({ movement: { endPosition } }) => {\n      if (!center) {\n        return;\n      }\n      const position = this.coordinateConverter.screenToCartesian3(endPosition);\n\n      if (position) {\n        const update = {\n          id,\n          center,\n          radiusPoint: position,\n          editMode: EditModes.CREATE,\n          editAction: EditActions.MOUSE_MOVE,\n        };\n        this.updateSubject.next(update);\n        clientEditSubject.next({\n          ...update,\n          ...this.getCircleProperties(id),\n        });\n      }\n    });\n\n    return editorObservable;\n  }\n\n  edit(center: Cartesian3, radius: number, options = DEFAULT_CIRCLE_OPTIONS, priority = 100): CircleEditorObservable {\n    const id = generateKey();\n    const circleOptions = this.setOptions(options);\n    const editSubject = new BehaviorSubject<CircleEditUpdate>({\n      id,\n      editAction: null,\n      editMode: EditModes.EDIT,\n    });\n\n    const radiusPoint: Cartesian3 = GeoUtilsService.pointByLocationDistanceAndAzimuth(center, radius, Math.PI / 2, true);\n\n    const update = {\n      id,\n      center,\n      radiusPoint,\n      editMode: EditModes.EDIT,\n      editAction: EditActions.INIT,\n      circleOptions,\n    };\n    this.updateSubject.next(update);\n    editSubject.next({\n      ...update,\n      ...this.getCircleProperties(id),\n    });\n\n    return this.editCircle(id, priority, editSubject, circleOptions);\n  }\n\n  private editCircle(\n    id: string,\n    priority: number,\n    editSubject: Subject<CircleEditUpdate>,\n    options: CircleEditOptions,\n    editObservable?: CircleEditorObservable,\n  ): CircleEditorObservable {\n    const pointDragRegistration = this.mapEventsManager.register({\n      event: CesiumEvent.LEFT_CLICK_DRAG,\n      entityType: EditPoint,\n      pickConfig: options.pickConfiguration,\n      pick: PickOptions.PICK_FIRST,\n      priority,\n      pickFilter: entity => id === entity.editedEntityId,\n    });\n\n    let shapeDragRegistration;\n    if (options.allowDrag) {\n      shapeDragRegistration = this.mapEventsManager.register({\n        event: CesiumEvent.LEFT_CLICK_DRAG,\n        entityType: EditableCircle,\n        pickConfig: options.pickConfiguration,\n        pick: PickOptions.PICK_FIRST,\n        priority: priority,\n        pickFilter: entity => id === entity.id,\n      });\n    }\n\n    pointDragRegistration\n      .pipe(tap(({ movement: { drop } }) => this.cameraService.enableInputs(drop)))\n      .subscribe(({ movement: { endPosition, startPosition, drop }, entities }) => {\n        const startDragPosition = this.coordinateConverter.screenToCartesian3(startPosition);\n        const endDragPosition = this.coordinateConverter.screenToCartesian3(endPosition);\n        if (!endDragPosition) {\n          return;\n        }\n\n        const point: EditPoint = entities[0];\n        const pointIsCenter = point === this.getCenterPoint(id);\n        let editAction;\n        if (drop) {\n          editAction = pointIsCenter ? EditActions.DRAG_SHAPE_FINISH : EditActions.DRAG_POINT_FINISH;\n        } else {\n          editAction = pointIsCenter ? EditActions.DRAG_SHAPE : EditActions.DRAG_POINT;\n        }\n\n        if (!options.allowDrag && (editAction === EditActions.DRAG_SHAPE || editAction === EditActions.DRAG_SHAPE_FINISH)) {\n          this.cameraService.enableInputs(true);\n          return;\n        }\n\n        const update = {\n          id,\n          center: this.getCenterPosition(id),\n          radiusPoint: this.getRadiusPosition(id),\n          startDragPosition,\n          endDragPosition,\n          editMode: EditModes.EDIT,\n          editAction,\n        };\n        this.updateSubject.next(update);\n        editSubject.next({\n          ...update,\n          ...this.getCircleProperties(id),\n        });\n      });\n\n    if (shapeDragRegistration) {\n      shapeDragRegistration\n        .pipe(tap(({ movement: { drop } }) => this.cameraService.enableInputs(drop)))\n        .subscribe(({ movement: { startPosition, endPosition, drop } }) => {\n          const startDragPosition = this.coordinateConverter.screenToCartesian3(startPosition);\n          const endDragPosition = this.coordinateConverter.screenToCartesian3(endPosition);\n          if (!endDragPosition || !startDragPosition) {\n            return;\n          }\n\n          const update = {\n            id,\n            center: this.getCenterPosition(id),\n            radiusPoint: this.getRadiusPosition(id),\n            startDragPosition,\n            endDragPosition,\n            editMode: EditModes.EDIT,\n            editAction: drop ? EditActions.DRAG_SHAPE_FINISH : EditActions.DRAG_SHAPE,\n          };\n          this.updateSubject.next(update);\n          editSubject.next({\n            ...update,\n            ...this.getCircleProperties(id),\n          });\n        });\n    }\n\n    const observables = [pointDragRegistration];\n    if (shapeDragRegistration) {\n      observables.push(shapeDragRegistration);\n    }\n\n    this.observablesMap.set(id, observables);\n    return editObservable || this.createEditorObservable(editSubject, id);\n  }\n\n  private createEditorObservable(observableToExtend: any, id: string, finishCreation?: (position: Cartesian3) => boolean)\n                                                                                                        : CircleEditorObservable {\n    observableToExtend.dispose = () => {\n      const observables = this.observablesMap.get(id);\n      if (observables) {\n        observables.forEach(obs => obs.dispose());\n      }\n      this.observablesMap.delete(id);\n      this.updateSubject.next({\n        id,\n        center: this.getCenterPosition(id),\n        radiusPoint: this.getRadiusPosition(id),\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.DISPOSE,\n      });\n    };\n\n    observableToExtend.enable = () => {\n      this.updateSubject.next({\n        id,\n        center: this.getCenterPosition(id),\n        radiusPoint: this.getRadiusPosition(id),\n        editMode: EditModes.EDIT,\n        editAction: EditActions.ENABLE,\n      });\n    };\n\n    observableToExtend.disable = () => {\n      this.updateSubject.next({\n        id,\n        center: this.getCenterPosition(id),\n        radiusPoint: this.getRadiusPosition(id),\n        editMode: EditModes.EDIT,\n        editAction: EditActions.DISABLE,\n      });\n    };\n\n    observableToExtend.setManually = (\n      center: Cartesian3,\n      radius: number,\n      centerPointProp?: PointProps,\n      radiusPointProp?: PointProps,\n      circleProp?: EllipseProps,\n    ) => {\n      const radiusPoint = GeoUtilsService.pointByLocationDistanceAndAzimuth(center, radius, Math.PI / 2, true);\n      const circle = this.circlesManager.get(id);\n      circle.setManually(center, radiusPoint, centerPointProp, radiusPointProp, circleProp);\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.SET_MANUALLY,\n      });\n    };\n\n    observableToExtend.setLabelsRenderFn = (callback: (update: BasicEditUpdate<any>, labels: LabelProps[]) => LabelProps[]) => {\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.SET_EDIT_LABELS_RENDER_CALLBACK,\n        labelsRenderFn: callback,\n      });\n    };\n\n    observableToExtend.updateLabels = (labels: LabelProps[]) => {\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.UPDATE_EDIT_LABELS,\n        updateLabels: labels,\n      });\n    };\n\n    observableToExtend.finishCreation = () => {\n      if (!finishCreation) {\n        throw new Error('Circles editor error edit(): cannot call finishCreation() on edit');\n      }\n\n      return finishCreation(null);\n    };\n\n    observableToExtend.getEditValue = () => observableToExtend.getValue();\n\n    observableToExtend.getLabels = (): LabelProps[] => this.circlesManager.get(id).labels;\n    observableToExtend.getCenter = (): Cartesian3 => this.getCenterPosition(id);\n    observableToExtend.getRadius = (): number => this.getRadius(id);\n\n    return observableToExtend as CircleEditorObservable;\n  }\n\n  private setOptions(options: CircleEditOptions): CircleEditOptions {\n    const defaultClone = JSON.parse(JSON.stringify(DEFAULT_CIRCLE_OPTIONS));\n    const circleOptions = Object.assign(defaultClone, options);\n    circleOptions.pointProps = Object.assign({}, DEFAULT_CIRCLE_OPTIONS.pointProps, options.pointProps);\n    circleOptions.circleProps = Object.assign({}, DEFAULT_CIRCLE_OPTIONS.circleProps, options.circleProps);\n    circleOptions.polylineProps = Object.assign({}, DEFAULT_CIRCLE_OPTIONS.polylineProps, options.polylineProps);\n    return circleOptions;\n  }\n\n  private getCenterPosition(id: string): Cartesian3 {\n    return this.circlesManager.get(id).getCenter();\n  }\n\n  private getCenterPoint(id: string): EditPoint {\n    return this.circlesManager.get(id).center;\n  }\n\n  private getRadiusPosition(id: string): Cartesian3 {\n    return this.circlesManager.get(id).getRadiusPoint();\n  }\n\n  private getRadius(id: string): number {\n    return this.circlesManager.get(id).getRadius();\n  }\n\n  private getCircleProperties(id: string) {\n    const circle = this.circlesManager.get(id);\n    return {\n      center: circle.getCenter(),\n      radiusPoint: circle.getRadiusPoint(),\n      radius: circle.getRadius(),\n    };\n  }\n}\n","import { ChangeDetectionStrategy, Component, OnDestroy, ViewChild } from '@angular/core';\nimport { EditModes } from '../../models/edit-mode.enum';\nimport { AcNotification } from '../../../angular-cesium/models/ac-notification';\nimport { EditActions } from '../../models/edit-actions.enum';\nimport { AcLayerComponent } from '../../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { CoordinateConverter } from '../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { MapEventsManagerService } from '../../../angular-cesium/services/map-events-mananger/map-events-manager';\nimport { Subject } from 'rxjs';\nimport { CameraService } from '../../../angular-cesium/services/camera/camera.service';\nimport { EditPoint } from '../../models/edit-point';\nimport { CirclesManagerService } from '../../services/entity-editors/circles-editor/circles-manager.service';\nimport { CirclesEditorService } from '../../services/entity-editors/circles-editor/circles-editor.service';\nimport { CircleEditUpdate } from '../../models/circle-edit-update';\nimport { LabelProps } from '../../models/label-props';\nimport { EditableCircle } from '../../models/editable-circle';\n\n@Component({\n    selector: 'circles-editor',\n    template: /*html*/ `\n      <ac-layer #editArcsLayer acFor=\"let arc of editArcs$\" [context]=\"this\">\n          <ac-arc-desc\n                  props=\"{\n        angle: arc.angle,\n        delta: arc.delta,\n        center: arc.center,\n        radius: arc.radius,\n        quality: 30,\n        color: arc.props.material()\n    }\"\n          >\n          </ac-arc-desc>\n      </ac-layer>\n\n      <ac-layer #editPointsLayer acFor=\"let point of editPoints$\" [context]=\"this\">\n          <ac-point-desc\n                  props=\"{\n                    position: point.getPositionCallbackProperty(),\n                    pixelSize: getPointSize(point),\n                    color: point.props.color,\n                    outlineColor: point.props.outlineColor,\n                    outlineWidth: point.props.outlineWidth,\n                    show: getPointShow(point),\n                    disableDepthTestDistance: point.props.disableDepthTestDistance,\n                    heightReference: point.props.heightReference,\n    }\"\n          >\n          </ac-point-desc>\n      </ac-layer>\n\n      <ac-layer #editCirclesLayer acFor=\"let circle of editCircles$\" [context]=\"this\" [zIndex]=\"0\">\n          <ac-ellipse-desc\n                  props=\"{\n                  position: circle.getCenterCallbackProperty(),\n                  semiMajorAxis: circle.getRadiusCallbackProperty(),\n                  semiMinorAxis: circle.getRadiusCallbackProperty(),\n                  material: circle.circleProps.material,\n                  outline: circle.circleProps.outline,\n                  height: 0\n                  outlineWidth: circle.circleProps.outlineWidth,\n                  outlineColor: circle.circleProps.outlineColor,\n                  fill: circle.circleProps.fill,\n                  classificationType: circle.circleProps.classificationType,\n                  zIndex: circle.circleProps.zIndex,\n                  shadows: circle.circleProps.shadows,\n    }\"\n          >\n          </ac-ellipse-desc>\n\n          <ac-array-desc acFor=\"let label of circle.labels\" [idGetter]=\"getLabelId\">\n              <ac-label-primitive-desc\n                      props=\"{\n            position: label.position,\n            backgroundColor: label.backgroundColor,\n            backgroundPadding: label.backgroundPadding,\n            distanceDisplayCondition: label.distanceDisplayCondition,\n            eyeOffset: label.eyeOffset,\n            fillColor: label.fillColor,\n            font: label.font,\n            heightReference: label.heightReference,\n            horizontalOrigin: label.horizontalOrigin,\n            outlineColor: label.outlineColor,\n            outlineWidth: label.outlineWidth,\n            pixelOffset: label.pixelOffset,\n            pixelOffsetScaleByDistance: label.pixelOffsetScaleByDistance,\n            scale: label.scale,\n            scaleByDistance: label.scaleByDistance,\n            show: label.show,\n            showBackground: label.showBackground,\n            style: label.style,\n            text: label.text,\n            translucencyByDistance: label.translucencyByDistance,\n            verticalOrigin: label.verticalOrigin,\n            disableDepthTestDistance: label.disableDepthTestDistance,\n        }\"\n              >\n              </ac-label-primitive-desc>\n          </ac-array-desc>\n      </ac-layer>\n  `,\n    providers: [CoordinateConverter, CirclesManagerService],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class CirclesEditorComponent implements OnDestroy {\n  private editLabelsRenderFn: (update: CircleEditUpdate, labels: LabelProps[]) => LabelProps[];\n  public editPoints$ = new Subject<AcNotification>();\n  public editCircles$ = new Subject<AcNotification>();\n  public editArcs$ = new Subject<AcNotification>();\n\n  @ViewChild('editCirclesLayer') private editCirclesLayer: AcLayerComponent;\n  @ViewChild('editArcsLayer') private editArcsLayer: AcLayerComponent;\n  @ViewChild('editPointsLayer') private editPointsLayer: AcLayerComponent;\n\n  constructor(\n    private circlesEditor: CirclesEditorService,\n    private coordinateConverter: CoordinateConverter,\n    private mapEventsManager: MapEventsManagerService,\n    private cameraService: CameraService,\n    private circlesManager: CirclesManagerService,\n  ) {\n    this.circlesEditor.init(this.mapEventsManager, this.coordinateConverter, this.cameraService, this.circlesManager);\n    this.startListeningToEditorUpdates();\n  }\n\n  private startListeningToEditorUpdates() {\n    this.circlesEditor.onUpdate().subscribe(update => {\n      if (update.editMode === EditModes.CREATE || update.editMode === EditModes.CREATE_OR_EDIT) {\n        this.handleCreateUpdates(update);\n      } else if (update.editMode === EditModes.EDIT) {\n        this.handleEditUpdates(update);\n      }\n    });\n  }\n\n  getLabelId(element: any, index: number): string {\n    return index.toString();\n  }\n\n  renderEditLabels(circle: EditableCircle, update: CircleEditUpdate, labels?: LabelProps[]) {\n    update.center = circle.getCenter();\n    update.radiusPoint = circle.getRadiusPoint();\n    update.radius = circle.getRadius();\n\n    if (labels) {\n      circle.labels = labels;\n      this.editCirclesLayer.update(circle, circle.getId());\n      return;\n    }\n\n    if (!this.editLabelsRenderFn) {\n      return;\n    }\n\n    circle.labels = this.editLabelsRenderFn(update, circle.labels);\n    this.editCirclesLayer.update(circle, circle.getId());\n  }\n\n  removeEditLabels(circle: EditableCircle) {\n    circle.labels = [];\n    this.editCirclesLayer.update(circle, circle.getId());\n  }\n\n  handleCreateUpdates(update: CircleEditUpdate) {\n    switch (update.editAction) {\n      case EditActions.INIT: {\n        this.circlesManager.createEditableCircle(\n          update.id,\n          this.editCirclesLayer,\n          this.editPointsLayer,\n          this.editArcsLayer,\n          update.circleOptions,\n        );\n        break;\n      }\n      case EditActions.MOUSE_MOVE: {\n        const circle = this.circlesManager.get(update.id);\n        if (update.radiusPoint) {\n          circle.movePoint(update.radiusPoint);\n          this.renderEditLabels(circle, update);\n        }\n        break;\n      }\n      case EditActions.ADD_POINT: {\n        const circle = this.circlesManager.get(update.id);\n        if (update.center) {\n          circle.addPoint(update.center);\n          this.renderEditLabels(circle, update);\n        }\n        break;\n      }\n      case EditActions.ADD_LAST_POINT: {\n        const circle = this.circlesManager.get(update.id);\n        if (update.radiusPoint) {\n          circle.addLastPoint(update.radiusPoint);\n          this.renderEditLabels(circle, update);\n        }\n        break;\n      }\n      case EditActions.DISPOSE: {\n        const circle = this.circlesManager.get(update.id);\n        if (circle) {\n          this.removeEditLabels(circle);\n          this.circlesManager.dispose(update.id);\n        }\n        break;\n      }\n      case EditActions.SET_EDIT_LABELS_RENDER_CALLBACK: {\n        const circle = this.circlesManager.get(update.id);\n        this.editLabelsRenderFn = update.labelsRenderFn;\n        this.renderEditLabels(circle, update);\n        break;\n      }\n      case EditActions.UPDATE_EDIT_LABELS: {\n        const circle = this.circlesManager.get(update.id);\n        this.renderEditLabels(circle, update, update.updateLabels);\n        break;\n      }\n      case EditActions.SET_MANUALLY: {\n        const circle = this.circlesManager.get(update.id);\n        this.renderEditLabels(circle, update, update.updateLabels);\n        break;\n      }\n      default: {\n        return;\n      }\n    }\n  }\n\n  handleEditUpdates(update: CircleEditUpdate) {\n    switch (update.editAction) {\n      case EditActions.INIT: {\n        const circle = this.circlesManager.createEditableCircle(\n          update.id,\n          this.editCirclesLayer,\n          this.editPointsLayer,\n          this.editArcsLayer,\n          update.circleOptions,\n        );\n        circle.setManually(update.center, update.radiusPoint);\n        break;\n      }\n      case EditActions.DRAG_POINT_FINISH:\n      case EditActions.DRAG_POINT: {\n        const circle = this.circlesManager.get(update.id);\n        if (circle && circle.enableEdit) {\n          circle.movePoint(update.endDragPosition);\n          this.renderEditLabels(circle, update);\n        }\n        break;\n      }\n      case EditActions.DRAG_SHAPE: {\n        const circle = this.circlesManager.get(update.id);\n        if (circle && circle.enableEdit) {\n          circle.moveCircle(update.startDragPosition, update.endDragPosition);\n          this.renderEditLabels(circle, update);\n        }\n        break;\n      }\n      case EditActions.DRAG_SHAPE_FINISH: {\n        const circle = this.circlesManager.get(update.id);\n        if (circle && circle.enableEdit) {\n          circle.endMovePolygon();\n          this.renderEditLabels(circle, update);\n        }\n        break;\n      }\n      case EditActions.DISABLE: {\n        const circle = this.circlesManager.get(update.id);\n        if (circle) {\n          circle.enableEdit = false;\n          this.renderEditLabels(circle, update);\n        }\n        break;\n      }\n      case EditActions.ENABLE: {\n        const circle = this.circlesManager.get(update.id);\n        if (circle) {\n          circle.enableEdit = true;\n          this.renderEditLabels(circle, update);\n        }\n        break;\n      }\n      default: {\n        return;\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.circlesManager.clear();\n  }\n\n  getPointSize(point: EditPoint) {\n    return point.isVirtualEditPoint() ? point.props.virtualPointPixelSize : point.props.pixelSize;\n  }\n\n  getPointShow(point: EditPoint) {\n    return point.show && (point.isVirtualEditPoint() ? point.props.showVirtual : point.props.show);\n  }\n}\n","import { Cartesian3, CallbackProperty, Math as cMath } from 'cesium';\nimport { AcEntity } from '../../angular-cesium/models/ac-entity';\nimport { EditPoint } from './edit-point';\nimport { AcLayerComponent } from '../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { GeoUtilsService } from '../../angular-cesium/services/geo-utils/geo-utils.service';\nimport { EllipseEditOptions, EllipseProps } from './ellipse-edit-options';\nimport { PointProps } from './point-edit-options';\nimport { PolylineProps } from './polyline-edit-options';\nimport { defaultLabelProps, LabelProps } from './label-props';\nimport { CoordinateConverter } from '../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\n\nexport class EditableEllipse extends AcEntity {\n  private _center: EditPoint;\n  private _majorRadiusPoint: EditPoint;\n  private _majorRadius: number;\n  private _minorRadius: number;\n  private _rotation = 0;\n  private doneCreation = false;\n  private _enableEdit = true;\n  private _minorRadiusPoints: EditPoint[] = [];\n  private lastDraggedToPosition: any;\n  private _ellipseProps: EllipseProps;\n  private _pointProps: PointProps;\n  private _polylineProps: PolylineProps;\n  private _labels: LabelProps[] = [];\n\n  constructor(\n    private id: string,\n    private ellipsesLayer: AcLayerComponent,\n    private pointsLayer: AcLayerComponent,\n    private coordinateConverter: CoordinateConverter,\n    private options: EllipseEditOptions,\n  ) {\n    super();\n    this._ellipseProps = {...options.ellipseProps};\n    this._pointProps = {...options.pointProps};\n  }\n\n  get labels(): LabelProps[] {\n    return this._labels;\n  }\n\n  set labels(labels: LabelProps[]) {\n    if (!labels || !this._center) {\n      return;\n    }\n    this._labels = labels.map((label, index) => {\n      if (!label.position) {\n        if (index === 0) {\n          label.position = this._center.getPosition();\n        } else if (index === 1) {\n          label.position = this._majorRadiusPoint\n            ? Cartesian3.midpoint(this.getCenter(), this._majorRadiusPoint.getPosition(), new Cartesian3())\n            : new Cartesian3();\n        } else if (index === 2) {\n          label.position =\n            this._minorRadiusPoints.length > 0 && this._minorRadius\n              ? Cartesian3.midpoint(this.getCenter(), this.getMinorRadiusPointPosition(), new Cartesian3())\n              : new Cartesian3();\n        }\n      }\n\n      return Object.assign({}, defaultLabelProps, label);\n    });\n  }\n\n  get polylineProps(): PolylineProps {\n    return this._polylineProps;\n  }\n\n  set polylineProps(value: PolylineProps) {\n    this._polylineProps = value;\n  }\n\n  get pointProps(): PointProps {\n    return this._pointProps;\n  }\n\n  set pointProps(value: PointProps) {\n    this._pointProps = value;\n  }\n\n  get ellipseProps(): EllipseProps {\n    return this._ellipseProps;\n  }\n\n  set ellipseProps(value: EllipseProps) {\n    this._ellipseProps = value;\n  }\n\n  get center(): EditPoint {\n    return this._center;\n  }\n\n  get majorRadiusPoint(): EditPoint {\n    return this._majorRadiusPoint;\n  }\n\n  getMajorRadiusPointPosition() {\n    if (!this._majorRadiusPoint) {\n      return undefined;\n    }\n\n    return this._majorRadiusPoint.getPosition();\n  }\n\n  getMinorRadiusPointPosition(): Cartesian3 {\n    if (this._minorRadiusPoints.length < 1) {\n      return undefined;\n    }\n\n    return this._minorRadiusPoints[0].getPosition();\n  }\n\n  get enableEdit() {\n    return this._enableEdit;\n  }\n\n  set enableEdit(value: boolean) {\n    this._enableEdit = value;\n    this._center.show = value;\n    this._majorRadiusPoint.show = value;\n    this.updatePointsLayer();\n  }\n\n  setManually(\n    center: Cartesian3,\n    majorRadius: number,\n    rotation = Math.PI / 2,\n    minorRadius?: number,\n    centerPointProp = this.pointProps,\n    radiusPointProp = this.pointProps,\n    ellipseProp = this.ellipseProps,\n  ) {\n    if (majorRadius < minorRadius) {\n      throw new Error('Major radius muse be equal or greater than minor radius');\n    }\n    this._rotation = rotation;\n    this._majorRadius = majorRadius;\n    if (!this._center) {\n      this._center = new EditPoint(this.id, center, centerPointProp);\n    } else {\n      this._center.setPosition(center);\n    }\n\n    const majorRadiusPosition = GeoUtilsService.pointByLocationDistanceAndAzimuth(this.center.getPosition(), majorRadius, rotation);\n\n    if (!this._majorRadiusPoint) {\n      this._majorRadiusPoint = new EditPoint(this.id, majorRadiusPosition, radiusPointProp);\n    } else {\n      this._majorRadiusPoint.setPosition(majorRadiusPosition);\n    }\n\n    if (minorRadius) {\n      this._minorRadius = minorRadius;\n    }\n\n    this.ellipseProps = ellipseProp;\n    this.doneCreation = true;\n    this.updateMinorRadiusEditPoints();\n    this.updatePointsLayer();\n    this.updateEllipsesLayer();\n  }\n\n  addPoint(position: Cartesian3) {\n    if (this.doneCreation) {\n      return;\n    }\n\n    if (!this._center) {\n      this._center = new EditPoint(this.id, position, this.pointProps);\n      this._majorRadiusPoint = new EditPoint(this.id, position.clone(), this.pointProps);\n      this._majorRadius = 0;\n    }\n\n    this.updateRotation();\n    this.updateMinorRadiusEditPoints();\n    this.updatePointsLayer();\n    this.updateEllipsesLayer();\n  }\n\n  transformToEllipse() {\n    if (this._minorRadius) {\n      return;\n    }\n\n    this._minorRadius = this.getMajorRadius();\n    this.updateMinorRadiusEditPoints();\n    this.updatePointsLayer();\n    this.updateEllipsesLayer();\n  }\n\n  addLastPoint(position: Cartesian3) {\n    if (this.doneCreation || !this._center || !this._majorRadiusPoint) {\n      return;\n    }\n\n    const newRadius = GeoUtilsService.distance(this._center.getPosition(), position);\n    this._majorRadiusPoint.setPosition(position);\n    this._majorRadius = newRadius;\n    this.doneCreation = true;\n\n    if (!this.options.circleToEllipseTransformation) {\n      this._minorRadius = this._majorRadius;\n    }\n\n    this.updateRotation();\n    this.updateMinorRadiusEditPoints();\n    this.updatePointsLayer();\n    this.updateEllipsesLayer();\n  }\n\n  movePoint(toPosition: Cartesian3, editPoint: EditPoint) {\n    if (!this._center || !this._majorRadiusPoint) {\n      return;\n    }\n\n    const newRadius = GeoUtilsService.distance(this._center.getPosition(), toPosition);\n    if (this.majorRadiusPoint === editPoint) {\n      if (newRadius < this._minorRadius) {\n        this._majorRadius = this._minorRadius;\n        this._majorRadiusPoint.setPosition(\n          GeoUtilsService.pointByLocationDistanceAndAzimuth(this.getCenter(), this._minorRadius, this._rotation),\n        );\n      } else {\n        this.majorRadiusPoint.setPosition(toPosition);\n        this._majorRadius = newRadius;\n      }\n    } else {\n      if (newRadius > this._majorRadius) {\n        this._minorRadius = this._majorRadius;\n      } else {\n        this._minorRadius = newRadius;\n      }\n    }\n\n    this.updateRotation();\n    this.updateMinorRadiusEditPoints();\n    this.updatePointsLayer();\n    this.updateEllipsesLayer();\n  }\n\n  moveEllipse(dragStartPosition: Cartesian3, dragEndPosition: Cartesian3) {\n    if (!this.doneCreation) {\n      return;\n    }\n    if (!this.lastDraggedToPosition) {\n      this.lastDraggedToPosition = dragStartPosition;\n    }\n\n    const majorRadius = this.getMajorRadius();\n    const rotation = this.getRotation();\n    const delta = GeoUtilsService.getPositionsDelta(this.lastDraggedToPosition, dragEndPosition);\n    const newCenterPosition = GeoUtilsService.addDeltaToPosition(this.getCenter(), delta, true);\n    this._center.setPosition(newCenterPosition);\n    this.majorRadiusPoint.setPosition(GeoUtilsService.pointByLocationDistanceAndAzimuth(this.getCenter(), majorRadius, rotation));\n    this.updatePointsLayer();\n    this.updateMinorRadiusEditPoints();\n    this.updateEllipsesLayer();\n    this.lastDraggedToPosition = dragEndPosition;\n  }\n\n  endMoveEllipse() {\n    this.lastDraggedToPosition = undefined;\n  }\n\n  private updateMinorRadiusEditPoints() {\n    if (this._minorRadius === undefined) {\n      return;\n    }\n    if (this._minorRadiusPoints.length === 0) {\n      this._minorRadiusPoints.push(new EditPoint(this.id, new Cartesian3(), this.pointProps, true));\n      this._minorRadiusPoints.push(new EditPoint(this.id, new Cartesian3(), this.pointProps, true));\n    }\n\n    this._minorRadiusPoints[0].setPosition(\n      GeoUtilsService.pointByLocationDistanceAndAzimuth(this._center.getPosition(), this._minorRadius, this.getRotation() - Math.PI / 2),\n    );\n\n    this._minorRadiusPoints[1].setPosition(\n      GeoUtilsService.pointByLocationDistanceAndAzimuth(this._center.getPosition(), this._minorRadius, this.getRotation() + Math.PI / 2),\n    );\n  }\n\n  getMajorRadius(): number {\n    return this._majorRadius || 0;\n  }\n\n  getMinorRadius() {\n    if (this._minorRadius === undefined) {\n      return this.getMajorRadius();\n    } else {\n      return this._minorRadius;\n    }\n  }\n\n  getRotation(): number {\n    return this._rotation || 0;\n  }\n\n  updateRotation(): number {\n    if (!this._majorRadiusPoint) {\n      return 0;\n    }\n\n    const azimuthInDegrees = this.coordinateConverter.bearingToCartesian(this.getCenter(), this._majorRadiusPoint.getPosition());\n    this._rotation = cMath.toRadians(azimuthInDegrees);\n    return this._rotation;\n  }\n\n  getRotationCallbackProperty(): CallbackProperty {\n    return new CallbackProperty(() => Math.PI / 2 - this.getRotation(), false);\n  }\n\n  getMinorRadiusCallbackProperty(): CallbackProperty {\n    return new CallbackProperty(() => this.getMinorRadius(), false);\n  }\n\n  getMajorRadiusCallbackProperty(): CallbackProperty {\n    return new CallbackProperty(() => this.getMajorRadius(), false);\n  }\n\n  getCenter(): Cartesian3 {\n    return this._center ? this._center.getPosition() : undefined;\n  }\n\n  getCenterCallbackProperty(): CallbackProperty {\n    return new CallbackProperty(() => this.getCenter(), false);\n  }\n\n  dispose() {\n    if (this._center) {\n      this.pointsLayer.remove(this._center.getId());\n    }\n\n    if (this._majorRadiusPoint) {\n      this.pointsLayer.remove(this._majorRadiusPoint.getId());\n    }\n\n    if (this._minorRadiusPoints) {\n      this._minorRadiusPoints.forEach(point => this.pointsLayer.remove(point.getId()));\n    }\n\n    this.ellipsesLayer.remove(this.id);\n  }\n\n  getId() {\n    return this.id;\n  }\n\n  private updateEllipsesLayer() {\n    this.ellipsesLayer.update(this, this.id);\n  }\n\n  private updatePointsLayer() {\n    if (this._center) {\n      this.pointsLayer.update(this._center, this._center.getId());\n    }\n    if (this._majorRadiusPoint) {\n      this.pointsLayer.update(this._majorRadiusPoint, this._majorRadiusPoint.getId());\n    }\n    if (this._minorRadiusPoints.length > 0) {\n      this.pointsLayer.update(this._minorRadiusPoints[0], this._minorRadiusPoints[0].getId());\n      this.pointsLayer.update(this._minorRadiusPoints[1], this._minorRadiusPoints[1].getId());\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { EditableEllipse } from '../../../models/editable-ellipse';\nimport { AcLayerComponent } from '../../../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { EllipseEditOptions } from '../../../models/ellipse-edit-options';\nimport { CoordinateConverter } from '../../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\n\n@Injectable()\nexport class EllipsesManagerService {\n  private ellipses = new Map<string, EditableEllipse>();\n\n  createEditableEllipse(id: string,\n                        editEllipsesLayer: AcLayerComponent,\n                        editPointsLayer: AcLayerComponent,\n                        coordinateConverter: CoordinateConverter,\n                        ellipseOptions: EllipseEditOptions): EditableEllipse {\n    const editableEllipse = new EditableEllipse(id, editEllipsesLayer, editPointsLayer, coordinateConverter, ellipseOptions);\n    this.ellipses.set(id, editableEllipse);\n    return editableEllipse;\n  }\n\n  dispose(id: string) {\n    this.ellipses.get(id).dispose();\n    this.ellipses.delete(id);\n  }\n\n  get(id: string): EditableEllipse {\n    return this.ellipses.get(id);\n  }\n\n  clear() {\n    this.ellipses.forEach(ellipse => ellipse.dispose());\n    this.ellipses.clear();\n  }\n}\n","import { publish, tap } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { Color, ClassificationType, ShadowMode, Cartesian3 } from 'cesium';\nimport { MapEventsManagerService } from '../../../../angular-cesium/services/map-events-mananger/map-events-manager';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { CesiumEvent } from '../../../../angular-cesium/services/map-events-mananger/consts/cesium-event.enum';\nimport { PickOptions } from '../../../../angular-cesium/services/map-events-mananger/consts/pickOptions.enum';\nimport { EditModes } from '../../../models/edit-mode.enum';\nimport { EditActions } from '../../../models/edit-actions.enum';\nimport { DisposableObservable } from '../../../../angular-cesium/services/map-events-mananger/disposable-observable';\nimport { CoordinateConverter } from '../../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { EditPoint } from '../../../models/edit-point';\nimport { CameraService } from '../../../../angular-cesium/services/camera/camera.service';\nimport { EllipseEditUpdate } from '../../../models/ellipse-edit-update';\nimport { EllipsesManagerService } from './ellipses-manager.service';\nimport { EllipseEditorObservable } from '../../../models/ellipse-editor-observable';\nimport { EllipseEditOptions, EllipseProps } from '../../../models/ellipse-edit-options';\nimport { EditableEllipse } from '../../../models/editable-ellipse';\nimport { PointProps } from '../../../models/point-edit-options';\nimport { LabelProps } from '../../../models/label-props';\nimport { BasicEditUpdate } from '../../../models/basic-edit-update';\nimport { generateKey } from '../../utils';\nimport { CesiumEventModifier } from '../../../../angular-cesium/services/map-events-mananger/consts/cesium-event-modifier.enum';\nimport { CesiumService } from '../../../../angular-cesium';\n\nexport const DEFAULT_ELLIPSE_OPTIONS: EllipseEditOptions = {\n  addPointEvent: CesiumEvent.LEFT_CLICK,\n  dragPointEvent: CesiumEvent.LEFT_CLICK_DRAG,\n  dragShapeEvent: CesiumEvent.LEFT_CLICK_DRAG,\n  circleToEllipseTransformEvent: CesiumEvent.LEFT_CLICK,\n  circleToEllipseTransformEventModifier: CesiumEventModifier.ALT,\n  allowDrag: true,\n  ellipseProps: {\n    material: Color.CORNFLOWERBLUE.withAlpha(0.4),\n    fill: true,\n    outline: true,\n    outlineWidth: 1,\n    outlineColor: Color.WHITE.withAlpha(0.8),\n    classificationType: ClassificationType.BOTH,\n    zIndex: 0,\n    shadows: ShadowMode.DISABLED,\n  },\n  pointProps: {\n    color: Color.WHITE,\n    outlineColor: Color.BLACK.withAlpha(0.2),\n    outlineWidth: 1,\n    pixelSize: 13,\n    virtualPointPixelSize: 8,\n    show: true,\n    showVirtual: true,\n    disableDepthTestDistance: Number.POSITIVE_INFINITY,\n  },\n  polylineProps: {\n    width: 1,\n    material: () => Color.WHITE,\n  },\n  circleToEllipseTransformation: false,\n};\n\n/**\n * Service for creating editable ellipses\n *\n * You must provide `EllipsesEditorService` yourself.\n * EllipsesEditorService works together with `<ellipse-editor>` component. Therefor you need to create `<ellipse-editor>`\n * for each `EllipsesEditorService`, And of course somewhere under `<ac-map>`/\n *\n * + `create` for starting a creation of the shape over the map. Returns a extension of `EllipseEditorObservable`.\n * + `edit` for editing shape over the map starting from a given positions. Returns an extension of `EllipseEditorObservable`.\n * + To stop editing call `dispose()` from the `EllipseEditorObservable` you get back from `create()` \\ `edit()`.\n *\n * **Labels over edited shapes**\n * Angular Cesium allows you to draw labels over a shape that is being edited with one of the editors.\n * To add label drawing logic to your editor use the function `setLabelsRenderFn()` that is defined on the\n * `EllipseEditorObservable` that is returned from calling `create()` \\ `edit()` of one of the editor services.\n * `setLabelsRenderFn()` - receives a callback that is called every time the shape is redrawn\n * (except when the shape is being dragged). The callback is called with the last shape state and with an array of the current labels.\n * The callback should return type `LabelProps[]`.\n * You can also use `updateLabels()` to pass an array of labels of type `LabelProps[]` to be drawn.\n *\n * usage:\n * ```typescript\n *  // Start creating ellipse\n *  const editing$ = ellipsesEditorService.create();\n *  this.editing$.subscribe(editResult => {\n *\t\t\t\tconsole.log(editResult.positions);\n *\t\t});\n *\n *  // Or edit ellipse from existing center point, two radiuses and rotation\n *  const editing$ = this.ellipsesEditorService.edit(center, majorRadius, rotation, minorRadius);\n *\n * ```\n */\n@Injectable()\nexport class EllipsesEditorService {\n  private mapEventsManager: MapEventsManagerService;\n  private updateSubject = new Subject<EllipseEditUpdate>();\n  private updatePublisher = publish<EllipseEditUpdate>()(this.updateSubject); // TODO maybe not needed\n  private coordinateConverter: CoordinateConverter;\n  private cameraService: CameraService;\n  private ellipsesManager: EllipsesManagerService;\n  private observablesMap = new Map<string, DisposableObservable<any>[]>();\n  private cesiumScene: any;\n\n  init(\n    mapEventsManager: MapEventsManagerService,\n    coordinateConverter: CoordinateConverter,\n    cameraService: CameraService,\n    ellipsesManager: EllipsesManagerService,\n    cesiumViewer: CesiumService,\n  ) {\n    this.mapEventsManager = mapEventsManager;\n    this.coordinateConverter = coordinateConverter;\n    this.cameraService = cameraService;\n    this.ellipsesManager = ellipsesManager;\n    this.updatePublisher.connect();\n\n    this.cesiumScene = cesiumViewer.getScene();\n  }\n\n  onUpdate(): Observable<EllipseEditUpdate> {\n    return this.updatePublisher;\n  }\n\n  create(options = DEFAULT_ELLIPSE_OPTIONS, priority = 100): EllipseEditorObservable {\n    let center: any;\n    const id = generateKey();\n    const ellipseOptions = this.setOptions(options);\n    const clientEditSubject = new BehaviorSubject<EllipseEditUpdate>({\n      id,\n      editAction: null,\n      editMode: EditModes.CREATE,\n    });\n    let finishedCreate = false;\n\n    this.updateSubject.next({\n      id,\n      editMode: EditModes.CREATE,\n      editAction: EditActions.INIT,\n      ellipseOptions,\n    });\n\n    const finishCreation = (position: Cartesian3) => {\n      const update: EllipseEditUpdate = {\n        id,\n        center,\n        updatedPosition: position,\n        editMode: EditModes.CREATE,\n        editAction: EditActions.ADD_LAST_POINT,\n      };\n      this.updateSubject.next(update);\n      clientEditSubject.next({\n        ...update,\n      });\n\n      const changeMode: EllipseEditUpdate = {\n        id,\n        center,\n        editMode: EditModes.CREATE,\n        editAction: EditActions.CHANGE_TO_EDIT,\n      };\n\n      this.updateSubject.next(changeMode);\n      clientEditSubject.next({\n        ...update,\n      });\n      if (this.observablesMap.has(id)) {\n        this.observablesMap.get(id).forEach(registration => registration.dispose());\n      }\n      this.observablesMap.delete(id);\n      this.editEllipse(id, priority, clientEditSubject, ellipseOptions, editorObservable);\n      finishedCreate = true;\n      return finishedCreate;\n    };\n\n    const mouseMoveRegistration = this.mapEventsManager.register({\n      event: CesiumEvent.MOUSE_MOVE,\n      pick: PickOptions.NO_PICK,\n      pickConfig: options.pickConfiguration,\n      priority,\n    });\n    const addPointRegistration = this.mapEventsManager.register({\n      event: ellipseOptions.addPointEvent,\n      pick: PickOptions.NO_PICK,\n      pickConfig: options.pickConfiguration,\n      priority,\n    });\n\n    this.observablesMap.set(id, [mouseMoveRegistration, addPointRegistration]);\n    const editorObservable = this.createEditorObservable(clientEditSubject, id, finishCreation);\n\n    addPointRegistration.subscribe(({ movement: { endPosition } }) => {\n      if (finishedCreate) {\n        return;\n      }\n      const position = this.coordinateConverter.screenToCartesian3(endPosition);\n      if (!position) {\n        return;\n      }\n\n      if (!center) {\n        const update: EllipseEditUpdate = {\n          id,\n          center: position,\n          editMode: EditModes.CREATE,\n          editAction: EditActions.ADD_POINT,\n        };\n        this.updateSubject.next(update);\n        clientEditSubject.next({\n          ...update,\n        });\n        center = position;\n      } else {\n        finishedCreate = finishCreation(position);\n      }\n    });\n\n    mouseMoveRegistration.subscribe(({ movement: { endPosition } }) => {\n      if (!center) {\n        return;\n      }\n      const position = this.coordinateConverter.screenToCartesian3(endPosition);\n\n      if (position) {\n        const update: EllipseEditUpdate = {\n          id,\n          center,\n          updatedPosition: position,\n          editMode: EditModes.CREATE,\n          editAction: EditActions.MOUSE_MOVE,\n        };\n        this.updateSubject.next(update);\n        clientEditSubject.next({\n          ...update,\n        });\n      }\n    });\n\n    return editorObservable;\n  }\n\n  edit(\n    center: Cartesian3,\n    majorRadius: number,\n    rotation = Math.PI / 2,\n    minorRadius?: number,\n    options = DEFAULT_ELLIPSE_OPTIONS,\n    priority = 100,\n  ): EllipseEditorObservable {\n    const id = generateKey();\n    const ellipseOptions = this.setOptions(options);\n    const editSubject = new BehaviorSubject<EllipseEditUpdate>({\n      id,\n      editAction: null,\n      editMode: EditModes.EDIT,\n    });\n\n    const update: EllipseEditUpdate = {\n      id,\n      center,\n      majorRadius,\n      rotation,\n      minorRadius,\n      editMode: EditModes.EDIT,\n      editAction: EditActions.INIT,\n      ellipseOptions,\n    };\n    this.updateSubject.next(update);\n    editSubject.next({\n      ...update,\n    });\n\n    return this.editEllipse(id, priority, editSubject, ellipseOptions);\n  }\n\n  private editEllipse(\n    id: string,\n    priority: number,\n    editSubject: Subject<EllipseEditUpdate>,\n    options: EllipseEditOptions,\n    editObservable?: EllipseEditorObservable,\n  ): EllipseEditorObservable {\n    const pointDragRegistration = this.mapEventsManager.register({\n      event: options.dragPointEvent,\n      entityType: EditPoint,\n      pickConfig: options.pickConfiguration,\n      pick: PickOptions.PICK_FIRST,\n      priority,\n      pickFilter: entity => id === entity.editedEntityId,\n    });\n\n    let addSecondRadiusRegistration;\n    if (options.circleToEllipseTransformation) {\n      addSecondRadiusRegistration = this.mapEventsManager.register({\n        event: options.circleToEllipseTransformEvent,\n        modifier: options.circleToEllipseTransformEventModifier,\n        entityType: EditableEllipse,\n        pickConfig: options.pickConfiguration,\n        pick: PickOptions.PICK_FIRST,\n        priority,\n        pickFilter: entity => id === entity.id,\n      });\n    }\n\n    let shapeDragRegistration;\n    if (options.allowDrag) {\n      shapeDragRegistration = this.mapEventsManager.register({\n        event: options.dragShapeEvent,\n        entityType: EditableEllipse,\n        pickConfig: options.pickConfiguration,\n        pick: PickOptions.PICK_FIRST,\n        priority: priority,\n        pickFilter: entity => id === entity.id,\n      });\n    }\n\n    pointDragRegistration\n      .pipe(tap(({ movement: { drop } }) => this.ellipsesManager.get(id).enableEdit && this.cameraService.enableInputs(drop)))\n      .subscribe(({ movement: { endPosition, startPosition, drop }, entities }) => {\n        const startDragPosition = this.coordinateConverter.screenToCartesian3(startPosition);\n        const endDragPosition = this.coordinateConverter.screenToCartesian3(endPosition);\n        if (!endDragPosition) {\n          return;\n        }\n\n        const point: EditPoint = entities[0];\n        const pointIsCenter = point === this.getCenterPoint(id);\n        let editAction;\n        if (drop) {\n          editAction = pointIsCenter ? EditActions.DRAG_SHAPE_FINISH : EditActions.DRAG_POINT_FINISH;\n        } else {\n          editAction = pointIsCenter ? EditActions.DRAG_SHAPE : EditActions.DRAG_POINT;\n        }\n\n        if (!options.allowDrag && this.ellipsesManager.get(id).enableEdit &&\n          (editAction === EditActions.DRAG_SHAPE || editAction === EditActions.DRAG_SHAPE_FINISH)) {\n          this.cameraService.enableInputs(true);\n          return;\n        }\n\n        const update: EllipseEditUpdate = {\n          id,\n          updatedPoint: point,\n          startDragPosition,\n          endDragPosition,\n          editMode: EditModes.EDIT,\n          editAction,\n          ...this.getEllipseProperties(id),\n        };\n        this.updateSubject.next(update);\n        editSubject.next({\n          ...update,\n        });\n      });\n\n    if (addSecondRadiusRegistration) {\n      addSecondRadiusRegistration.subscribe(({ movement: { endPosition, startPosition, drop }, entities }) => {\n        const update: EllipseEditUpdate = {\n          id,\n          editMode: EditModes.EDIT,\n          editAction: EditActions.TRANSFORM,\n          ...this.getEllipseProperties(id),\n        };\n        this.updateSubject.next(update);\n        editSubject.next({\n          ...update,\n        });\n      });\n    }\n\n    if (shapeDragRegistration) {\n      shapeDragRegistration\n        .pipe(tap(({ movement: { drop } }) => this.ellipsesManager.get(id).enableEdit && this.cameraService.enableInputs(drop)))\n        .subscribe(({ movement: { startPosition, endPosition, drop } }) => {\n          const startDragPosition = this.coordinateConverter.screenToCartesian3(startPosition);\n          const endDragPosition = this.coordinateConverter.screenToCartesian3(endPosition);\n          if (!endDragPosition || !startDragPosition) {\n            return;\n          }\n\n          const update: EllipseEditUpdate = {\n            id,\n            startDragPosition,\n            endDragPosition,\n            editMode: EditModes.EDIT,\n            editAction: drop ? EditActions.DRAG_SHAPE_FINISH : EditActions.DRAG_SHAPE,\n            ...this.getEllipseProperties(id),\n          };\n          this.updateSubject.next(update);\n          editSubject.next({\n            ...update,\n          });\n        });\n    }\n\n    const observables = [pointDragRegistration];\n    if (shapeDragRegistration) {\n      observables.push(shapeDragRegistration);\n    }\n    if (addSecondRadiusRegistration) {\n      observables.push(addSecondRadiusRegistration);\n    }\n\n    this.observablesMap.set(id, observables);\n    return editObservable || this.createEditorObservable(editSubject, id);\n  }\n\n  private createEditorObservable(observableToExtend: any, id: string, finishCreation?: (position: Cartesian3) => boolean)\n                                                                                                        : EllipseEditorObservable {\n    observableToExtend.dispose = () => {\n      const observables = this.observablesMap.get(id);\n      if (observables) {\n        observables.forEach(obs => obs.dispose());\n      }\n      this.observablesMap.delete(id);\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.DISPOSE,\n      } as EllipseEditUpdate);\n    };\n\n    observableToExtend.enable = () => {\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.EDIT,\n        editAction: EditActions.ENABLE,\n        ...this.getEllipseProperties(id),\n      } as EllipseEditUpdate);\n    };\n\n    observableToExtend.disable = () => {\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.EDIT,\n        editAction: EditActions.DISABLE,\n        ...this.getEllipseProperties(id),\n      } as EllipseEditUpdate);\n    };\n\n    observableToExtend.setManually = (\n      center: Cartesian3,\n      majorRadius: number,\n      rotation?: number,\n      minorRadius?: number,\n      centerPointProp?: PointProps,\n      radiusPointProp?: PointProps,\n      ellipseProp?: EllipseProps,\n    ) => {\n      const ellipse = this.ellipsesManager.get(id);\n      ellipse.setManually(center, majorRadius, rotation, minorRadius, centerPointProp, radiusPointProp, ellipseProp);\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.SET_MANUALLY,\n      });\n    };\n\n    observableToExtend.setLabelsRenderFn = (callback: (update: BasicEditUpdate<any>, labels: LabelProps[]) => LabelProps[]) => {\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.SET_EDIT_LABELS_RENDER_CALLBACK,\n        labelsRenderFn: callback,\n      } as EllipseEditUpdate);\n    };\n\n    observableToExtend.updateLabels = (labels: LabelProps[]) => {\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.UPDATE_EDIT_LABELS,\n        updateLabels: labels,\n      } as EllipseEditUpdate);\n    };\n\n    observableToExtend.finishCreation = () => {\n      if (!finishCreation) {\n        throw new Error('Ellipses editor error edit(): cannot call finishCreation() on edit');\n      }\n\n      return finishCreation(null);\n    };\n\n    observableToExtend.getEditValue = () => observableToExtend.getValue();\n\n    observableToExtend.getLabels = (): LabelProps[] => this.ellipsesManager.get(id).labels;\n    observableToExtend.getCenter = (): Cartesian3 => this.getCenterPosition(id);\n    observableToExtend.getMajorRadius = (): number => this.getMajorRadius(id);\n    observableToExtend.getMinorRadius = (): number => this.getMinorRadius(id);\n\n    return observableToExtend as EllipseEditorObservable;\n  }\n\n  private setOptions(options: EllipseEditOptions): EllipseEditOptions {\n    const defaultClone = JSON.parse(JSON.stringify(DEFAULT_ELLIPSE_OPTIONS));\n    const ellipseOptions = Object.assign(defaultClone, options);\n    ellipseOptions.pointProps = Object.assign({}, DEFAULT_ELLIPSE_OPTIONS.pointProps, options.pointProps);\n    ellipseOptions.ellipseProps = Object.assign({}, DEFAULT_ELLIPSE_OPTIONS.ellipseProps, options.ellipseProps);\n    ellipseOptions.polylineProps = Object.assign({}, DEFAULT_ELLIPSE_OPTIONS.polylineProps, options.polylineProps);\n    return ellipseOptions;\n  }\n\n  private getCenterPosition(id: string): Cartesian3 {\n    return this.ellipsesManager.get(id).getCenter();\n  }\n\n  private getCenterPoint(id: string): EditPoint {\n    return this.ellipsesManager.get(id).center;\n  }\n\n  private getMajorRadius(id: string): number {\n    return this.ellipsesManager.get(id).getMajorRadius();\n  }\n\n  private getMinorRadius(id: string): number {\n    return this.ellipsesManager.get(id).getMinorRadius();\n  }\n\n  private getEllipseProperties(id: string) {\n    const ellipse = this.ellipsesManager.get(id);\n    return {\n      center: ellipse.getCenter(),\n      rotation: ellipse.getRotation(),\n      minorRadius: ellipse.getMinorRadius(),\n      majorRadius: ellipse.getMajorRadius(),\n      minorRadiusPointPosition: ellipse.getMinorRadiusPointPosition(),\n      majorRadiusPointPosition: ellipse.getMajorRadiusPointPosition(),\n    };\n  }\n}\n","import { ChangeDetectionStrategy, Component, OnDestroy, ViewChild } from '@angular/core';\nimport { CesiumService } from '../../../angular-cesium/services/cesium/cesium.service';\nimport { EditModes } from '../../models/edit-mode.enum';\nimport { AcNotification } from '../../../angular-cesium/models/ac-notification';\nimport { EditActions } from '../../models/edit-actions.enum';\nimport { AcLayerComponent } from '../../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { CoordinateConverter } from '../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { MapEventsManagerService } from '../../../angular-cesium/services/map-events-mananger/map-events-manager';\nimport { Subject } from 'rxjs';\nimport { CameraService } from '../../../angular-cesium/services/camera/camera.service';\nimport { EditPoint } from '../../models/edit-point';\nimport { EllipsesManagerService } from '../../services/entity-editors/ellipses-editor/ellipses-manager.service';\nimport { EllipsesEditorService } from '../../services/entity-editors/ellipses-editor/ellipses-editor.service';\nimport { EllipseEditUpdate } from '../../models/ellipse-edit-update';\nimport { LabelProps } from '../../models/label-props';\nimport { EditableEllipse } from '../../models/editable-ellipse';\n\n@Component({\n    selector: 'ellipses-editor',\n    template: /*html*/ `\n      <ac-layer #editPointsLayer acFor=\"let point of editPoints$\" [context]=\"this\">\n          <ac-point-desc\n                  props=\"{\n                    position: point.getPositionCallbackProperty(),\n                    pixelSize: getPointSize(point),\n                    color: point.props.color,\n                    outlineColor: point.props.outlineColor,\n                    outlineWidth: point.props.outlineWidth,\n                    show: getPointShow(point),\n                    disableDepthTestDistance: point.props.disableDepthTestDistance,\n                    heightReference: point.props.heightReference,\n    }\"\n          >\n          </ac-point-desc>\n      </ac-layer>\n\n      <ac-layer #editEllipsesLayer acFor=\"let ellipse of editEllipses$\" [context]=\"this\" [zIndex]=\"0\">\n          <ac-ellipse-desc\n                  props=\"{\n                    position: ellipse.getCenterCallbackProperty(),\n                    semiMajorAxis: ellipse.getMajorRadiusCallbackProperty(),\n                    semiMinorAxis: ellipse.getMinorRadiusCallbackProperty(),\n                    rotation: ellipse.getRotationCallbackProperty(),\n                    material: ellipse.ellipseProps.material,\n                    outline: ellipse.ellipseProps.outline,\n                    outlineWidth: ellipse.ellipseProps.outlineWidth,\n                    outlineColor: ellipse.ellipseProps.outlineColor,\n                    height: 0,\n                    fill: ellipse.ellipseProps.fill,\n                    classificationType: ellipse.ellipseProps.classificationType,\n                    zIndex: ellipse.ellipseProps.zIndex,\n                    shadows: ellipse.ellipseProps.shadows,\n    }\"\n          >\n          </ac-ellipse-desc>\n\n          <ac-array-desc acFor=\"let label of ellipse.labels\" [idGetter]=\"getLabelId\">\n              <ac-label-primitive-desc\n                      props=\"{\n                        position: label.position,\n                        text: label.text,\n                        backgroundColor: label.backgroundColor,\n                        backgroundPadding: label.backgroundPadding,\n                        distanceDisplayCondition: label.distanceDisplayCondition,\n                        eyeOffset: label.eyeOffset,\n                        fillColor: label.fillColor,\n                        font: label.font,\n                        heightReference: label.heightReference,\n                        horizontalOrigin: label.horizontalOrigin,\n                        outlineColor: label.outlineColor,\n                        outlineWidth: label.outlineWidth,\n                        pixelOffset: label.pixelOffset,\n                        pixelOffsetScaleByDistance: label.pixelOffsetScaleByDistance,\n                        scale: label.scale,\n                        scaleByDistance: label.scaleByDistance,\n                        show: label.show,\n                        showBackground: label.showBackground,\n                        style: label.style,\n                        translucencyByDistance: label.translucencyByDistance,\n                        verticalOrigin: label.verticalOrigin,\n                        disableDepthTestDistance: label.disableDepthTestDistance,\n        }\"\n              >\n              </ac-label-primitive-desc>\n          </ac-array-desc>\n      </ac-layer>\n  `,\n    providers: [CoordinateConverter, EllipsesManagerService],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class EllipsesEditorComponent implements OnDestroy {\n  private editLabelsRenderFn: (update: EllipseEditUpdate, labels: LabelProps[]) => LabelProps[];\n  public editPoints$ = new Subject<AcNotification>();\n  public editEllipses$ = new Subject<AcNotification>();\n\n  @ViewChild('editEllipsesLayer') private editEllipsesLayer: AcLayerComponent;\n  @ViewChild('editPointsLayer') private editPointsLayer: AcLayerComponent;\n\n  constructor(\n    private ellipsesEditor: EllipsesEditorService,\n    private coordinateConverter: CoordinateConverter,\n    private mapEventsManager: MapEventsManagerService,\n    private cameraService: CameraService,\n    private ellipsesManager: EllipsesManagerService,\n    private cesiumService: CesiumService,\n  ) {\n    this.ellipsesEditor.init(this.mapEventsManager, this.coordinateConverter, this.cameraService, this.ellipsesManager, this.cesiumService);\n    this.startListeningToEditorUpdates();\n  }\n\n  private startListeningToEditorUpdates() {\n    this.ellipsesEditor.onUpdate().subscribe(update => {\n      if (update.editMode === EditModes.CREATE || update.editMode === EditModes.CREATE_OR_EDIT) {\n        this.handleCreateUpdates(update);\n      } else if (update.editMode === EditModes.EDIT) {\n        this.handleEditUpdates(update);\n      }\n    });\n  }\n\n  getLabelId(element: any, index: number): string {\n    return index.toString();\n  }\n\n  renderEditLabels(ellipse: EditableEllipse, update: EllipseEditUpdate, labels?: LabelProps[]) {\n    update.center = ellipse.getCenter();\n    update.majorRadius = ellipse.getMajorRadius();\n    update.minorRadius = ellipse.getMinorRadius();\n    update.rotation = ellipse.getRotation();\n\n    if (labels) {\n      ellipse.labels = labels;\n      this.editEllipsesLayer.update(ellipse, ellipse.getId());\n      return;\n    }\n\n    if (!this.editLabelsRenderFn) {\n      return;\n    }\n\n    ellipse.labels = this.editLabelsRenderFn(update, ellipse.labels);\n    this.editEllipsesLayer.update(ellipse, ellipse.getId());\n  }\n\n  removeEditLabels(ellipse: EditableEllipse) {\n    ellipse.labels = [];\n    this.editEllipsesLayer.update(ellipse, ellipse.getId());\n  }\n\n  handleCreateUpdates(update: EllipseEditUpdate) {\n    switch (update.editAction) {\n      case EditActions.INIT: {\n        this.ellipsesManager.createEditableEllipse(\n          update.id,\n          this.editEllipsesLayer,\n          this.editPointsLayer,\n          this.coordinateConverter,\n          update.ellipseOptions,\n        );\n        break;\n      }\n      case EditActions.MOUSE_MOVE: {\n        const ellipse = this.ellipsesManager.get(update.id);\n        if (update.updatedPosition) {\n          ellipse.movePoint(update.updatedPosition, ellipse.majorRadiusPoint);\n          this.renderEditLabels(ellipse, update);\n        }\n        break;\n      }\n      case EditActions.ADD_POINT: {\n        const ellipse = this.ellipsesManager.get(update.id);\n        if (update.center) {\n          ellipse.addPoint(update.center);\n          this.renderEditLabels(ellipse, update);\n        }\n        break;\n      }\n      case EditActions.ADD_LAST_POINT: {\n        const ellipse = this.ellipsesManager.get(update.id);\n        if (update.updatedPosition) {\n          ellipse.addLastPoint(update.updatedPosition);\n          this.renderEditLabels(ellipse, update);\n        }\n        break;\n      }\n      case EditActions.DISPOSE: {\n        const ellipse = this.ellipsesManager.get(update.id);\n        if (ellipse) {\n          this.removeEditLabels(ellipse);\n          this.ellipsesManager.dispose(update.id);\n        }\n        break;\n      }\n      case EditActions.SET_EDIT_LABELS_RENDER_CALLBACK: {\n        const ellipse = this.ellipsesManager.get(update.id);\n        this.editLabelsRenderFn = update.labelsRenderFn;\n        this.renderEditLabels(ellipse, update);\n        break;\n      }\n      case EditActions.UPDATE_EDIT_LABELS: {\n        const ellipse = this.ellipsesManager.get(update.id);\n        this.renderEditLabels(ellipse, update, update.updateLabels);\n        break;\n      }\n      case EditActions.SET_MANUALLY: {\n        const ellipse = this.ellipsesManager.get(update.id);\n        this.renderEditLabels(ellipse, update, update.updateLabels);\n        break;\n      }\n      default: {\n        return;\n      }\n    }\n  }\n\n  handleEditUpdates(update: EllipseEditUpdate) {\n    switch (update.editAction) {\n      case EditActions.INIT: {\n        const ellipse = this.ellipsesManager.createEditableEllipse(\n          update.id,\n          this.editEllipsesLayer,\n          this.editPointsLayer,\n          this.coordinateConverter,\n          update.ellipseOptions,\n        );\n        ellipse.setManually(\n          update.center,\n          update.majorRadius,\n          update.rotation,\n          update.minorRadius,\n          (update.ellipseOptions && update.ellipseOptions.pointProps) || undefined,\n          (update.ellipseOptions && update.ellipseOptions.pointProps) || undefined,\n          (update.ellipseOptions && update.ellipseOptions.ellipseProps) || undefined,\n        );\n        this.renderEditLabels(ellipse, update);\n        break;\n      }\n      case EditActions.DRAG_POINT_FINISH:\n      case EditActions.DRAG_POINT: {\n        const ellipse = this.ellipsesManager.get(update.id);\n        if (ellipse && ellipse.enableEdit) {\n          ellipse.movePoint(update.endDragPosition, update.updatedPoint);\n          this.renderEditLabels(ellipse, update);\n        }\n        break;\n      }\n      case EditActions.DRAG_SHAPE: {\n        const ellipse = this.ellipsesManager.get(update.id);\n        if (ellipse && ellipse.enableEdit) {\n          ellipse.moveEllipse(update.startDragPosition, update.endDragPosition);\n          this.renderEditLabels(ellipse, update);\n        }\n        break;\n      }\n      case EditActions.DRAG_SHAPE_FINISH: {\n        const ellipse = this.ellipsesManager.get(update.id);\n        if (ellipse && ellipse.enableEdit) {\n          ellipse.endMoveEllipse();\n          this.renderEditLabels(ellipse, update);\n        }\n        break;\n      }\n      case EditActions.TRANSFORM: {\n        const ellipse = this.ellipsesManager.get(update.id);\n        if (ellipse && ellipse.enableEdit) {\n          ellipse.transformToEllipse();\n          this.renderEditLabels(ellipse, update);\n        }\n        break;\n      }\n      case EditActions.DISABLE: {\n        const ellipse = this.ellipsesManager.get(update.id);\n        if (ellipse) {\n          ellipse.enableEdit = false;\n          this.renderEditLabels(ellipse, update);\n        }\n        break;\n      }\n      case EditActions.ENABLE: {\n        const ellipse = this.ellipsesManager.get(update.id);\n        if (ellipse) {\n          ellipse.enableEdit = true;\n          this.renderEditLabels(ellipse, update);\n        }\n        break;\n      }\n      default: {\n        return;\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.ellipsesManager.clear();\n  }\n\n  getPointSize(point: EditPoint) {\n    return point.isVirtualEditPoint() ? point.props.virtualPointPixelSize : point.props.pixelSize;\n  }\n\n  getPointShow(point: EditPoint) {\n    return point.show && (point.isVirtualEditPoint() ? point.props.showVirtual : point.props.show);\n  }\n}\n","import { Cartesian3, CallbackProperty } from 'cesium';\nimport { AcEntity } from '../../angular-cesium/models/ac-entity';\nimport { EditPoint } from './edit-point';\nimport { EditPolyline } from './edit-polyline';\nimport { AcLayerComponent } from '../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { CoordinateConverter } from '../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { PointProps } from './point-edit-options';\nimport { PolylineEditOptions, PolylineProps } from './polyline-edit-options';\nimport { GeoUtilsService } from '../../angular-cesium/services/geo-utils/geo-utils.service';\nimport { defaultLabelProps, LabelProps } from './label-props';\n\nexport class EditablePolyline extends AcEntity {\n  private positions: EditPoint[] = [];\n\n  private polylines: EditPolyline[] = [];\n  private movingPoint: EditPoint;\n  private doneCreation = false;\n  private _enableEdit = true;\n  private _pointProps: PointProps;\n  private polylineProps: PolylineProps;\n  private lastDraggedToPosition: any;\n  private _labels: LabelProps[] = [];\n\n  constructor(private id: string,\n              private pointsLayer: AcLayerComponent,\n              private polylinesLayer: AcLayerComponent,\n              private coordinateConverter: CoordinateConverter,\n              private editOptions: PolylineEditOptions,\n              positions?: Cartesian3[]) {\n    super();\n    this._pointProps = {...editOptions.pointProps};\n    this.props = {...editOptions.polylineProps};\n    if (positions && positions.length >= 2) {\n      this.createFromExisting(positions);\n    }\n  }\n\n  get labels(): LabelProps[] {\n    return this._labels;\n  }\n\n  set labels(labels: LabelProps[]) {\n    if (!labels) {\n      return;\n    }\n    const positions = this.getRealPositions();\n    this._labels = labels.map((label, index) => {\n      if (!label.position) {\n        label.position = positions[index];\n      }\n\n      return Object.assign({}, defaultLabelProps, label);\n    });\n  }\n\n  get props(): PolylineProps {\n    return this.polylineProps;\n  }\n\n  set props(value: PolylineProps) {\n    this.polylineProps = value;\n  }\n\n  get pointProps(): PointProps {\n    return this._pointProps;\n  }\n\n  set pointProps(value: PointProps) {\n    this._pointProps = value;\n  }\n\n  get enableEdit() {\n    return this._enableEdit;\n  }\n\n  set enableEdit(value: boolean) {\n    this._enableEdit = value;\n    this.positions.forEach(point => {\n      point.show = value;\n      this.updatePointsLayer(false, point);\n    });\n  }\n\n  private createFromExisting(positions: Cartesian3[]) {\n    positions.forEach((position) => {\n      this.addPointFromExisting(position);\n    });\n    this.addAllVirtualEditPoints();\n    this.doneCreation = true;\n  }\n\n  setManually(points: {\n    position: Cartesian3,\n    pointProp?: PointProps\n  }[] | Cartesian3[], polylineProps?: PolylineProps) {\n    if (!this.doneCreation) {\n      throw new Error('Update manually only in edit mode, after polyline is created');\n    }\n    this.positions.forEach(p => this.pointsLayer.remove(p.getId()));\n\n    const newPoints: EditPoint[] = [];\n    for (let i = 0; i < points.length; i++) {\n      const pointOrCartesian: any = points[i];\n      let newPoint = null;\n      if (pointOrCartesian.pointProps) {\n        newPoint = new EditPoint(this.id, pointOrCartesian.position, pointOrCartesian.pointProps);\n      } else {\n        newPoint = new EditPoint(this.id, pointOrCartesian, this._pointProps);\n      }\n      newPoints.push(newPoint);\n    }\n    this.positions = newPoints;\n    this.polylineProps = polylineProps ? polylineProps : this.polylineProps;\n\n    this.updatePointsLayer(true, ...this.positions);\n    this.addAllVirtualEditPoints();\n  }\n\n  private addAllVirtualEditPoints() {\n    const currentPoints = [...this.positions];\n    currentPoints.forEach((pos, index) => {\n      if (index !== currentPoints.length - 1) {\n        const currentPoint = pos;\n        const nextIndex = (index + 1) % (currentPoints.length);\n        const nextPoint = currentPoints[nextIndex];\n\n        const midPoint = this.setMiddleVirtualPoint(currentPoint, nextPoint);\n\n        this.updatePointsLayer(false, midPoint);\n      }\n    });\n  }\n\n  private setMiddleVirtualPoint(firstP: EditPoint, secondP: EditPoint): EditPoint {\n    const pos1 = firstP.getPosition();\n    const pos2 = secondP.getPosition()\n    const midPointCartesian3 = Cartesian3.lerp(new Cartesian3(pos1.x, pos1.y, pos1.z), new Cartesian3(pos2.x, pos2.y, pos2.z), 0.5, new Cartesian3());\n    const midPoint = new EditPoint(this.id, midPointCartesian3, this._pointProps);\n    midPoint.setVirtualEditPoint(true);\n\n    const firstIndex = this.positions.indexOf(firstP);\n    this.positions.splice(firstIndex + 1, 0, midPoint);\n    return midPoint;\n  }\n\n  private updateMiddleVirtualPoint(virtualEditPoint: EditPoint, prevPoint: EditPoint, nextPoint: EditPoint) {\n    const pos1 = prevPoint.getPosition();\n    const pos2 = nextPoint.getPosition(); \n    const midPointCartesian3 = Cartesian3.lerp(new Cartesian3(pos1.x, pos1.y, pos1.z), new Cartesian3(pos2.x, pos2.y, pos2.z), 0.5, new Cartesian3());\n    virtualEditPoint.setPosition(midPointCartesian3);\n  }\n\n  changeVirtualPointToRealPoint(point: EditPoint) {\n    point.setVirtualEditPoint(false); // actual point becomes a real point\n    const pointsCount = this.positions.length;\n    const pointIndex = this.positions.indexOf(point);\n    const nextIndex = (pointIndex + 1) % (pointsCount);\n    const preIndex = ((pointIndex - 1) + pointsCount) % pointsCount;\n\n    const nextPoint = this.positions[nextIndex];\n    const prePoint = this.positions[preIndex];\n\n    const firstMidPoint = this.setMiddleVirtualPoint(prePoint, point);\n    const secMidPoint = this.setMiddleVirtualPoint(point, nextPoint);\n    this.updatePointsLayer(false, firstMidPoint, secMidPoint, point);\n\n  }\n\n  private renderPolylines() {\n    this.polylines.forEach(polyline => this.polylinesLayer.remove(polyline.getId()));\n    this.polylines = [];\n    const realPoints = this.positions.filter(point => !point.isVirtualEditPoint());\n    realPoints.forEach((point, index) => {\n      if (index !== realPoints.length - 1) {\n        const nextIndex = (index + 1);\n        const nextPoint = realPoints[nextIndex];\n        const polyline = new EditPolyline(this.id, point.getPosition(), nextPoint.getPosition(), this.polylineProps);\n        this.polylines.push(polyline);\n        this.polylinesLayer.update(polyline, polyline.getId());\n      }\n    });\n  }\n\n  addPointFromExisting(position: Cartesian3) {\n    const newPoint = new EditPoint(this.id, position, this._pointProps);\n    this.positions.push(newPoint);\n    this.updatePointsLayer(true, newPoint);\n  }\n\n\n  addPoint(position: Cartesian3) {\n    if (this.doneCreation) {\n      return;\n    }\n    const isFirstPoint = !this.positions.length;\n    if (isFirstPoint) {\n      const firstPoint = new EditPoint(this.id, position, this._pointProps);\n      this.positions.push(firstPoint);\n      this.updatePointsLayer(true, firstPoint);\n    }\n\n    this.movingPoint = new EditPoint(this.id, position.clone(), this._pointProps);\n    this.positions.push(this.movingPoint);\n\n    this.updatePointsLayer(true, this.movingPoint);\n  }\n\n  movePointFinish(editPoint: EditPoint) {\n    if (this.editOptions.clampHeightTo3D) {\n      editPoint.props.disableDepthTestDistance = Number.POSITIVE_INFINITY;\n      this.updatePointsLayer(false, editPoint);\n    }\n  }\n\n  movePoint(toPosition: Cartesian3, editPoint: EditPoint) {\n    editPoint.setPosition(toPosition);\n    if (this.doneCreation) {\n      if (editPoint.props.disableDepthTestDistance && this.editOptions.clampHeightTo3D) {\n        // To avoid bug with pickPosition() on point with disableDepthTestDistance\n        editPoint.props.disableDepthTestDistance = undefined;\n        return; // ignore first move because the pickPosition() could be wrong\n      }\n\n      if (editPoint.isVirtualEditPoint()) {\n        this.changeVirtualPointToRealPoint(editPoint);\n      }\n      const pointsCount = this.positions.length;\n      const pointIndex = this.positions.indexOf(editPoint);\n\n      if (pointIndex < this.positions.length - 1) {\n        const nextVirtualPoint = this.positions[(pointIndex + 1) % (pointsCount)];\n        const nextRealPoint = this.positions[(pointIndex + 2) % (pointsCount)];\n        this.updateMiddleVirtualPoint(nextVirtualPoint, editPoint, nextRealPoint);\n      }\n      if (pointIndex > 0) {\n        const prevVirtualPoint = this.positions[((pointIndex - 1) + pointsCount) % pointsCount];\n        const prevRealPoint = this.positions[((pointIndex - 2) + pointsCount) % pointsCount];\n        this.updateMiddleVirtualPoint(prevVirtualPoint, editPoint, prevRealPoint);\n      }\n    }\n    this.updatePointsLayer(true, editPoint);\n  }\n\n  moveTempMovingPoint(toPosition: Cartesian3) {\n    if (this.movingPoint) {\n      this.movePoint(toPosition, this.movingPoint);\n    }\n  }\n\n  moveShape(startMovingPosition: Cartesian3, draggedToPosition: Cartesian3) {\n    if (!this.doneCreation) {\n      return;\n    }\n    if (!this.lastDraggedToPosition) {\n      this.lastDraggedToPosition = startMovingPosition;\n    }\n\n    const delta = GeoUtilsService.getPositionsDelta(this.lastDraggedToPosition, new Cartesian3(draggedToPosition.x, draggedToPosition.y, draggedToPosition.z));\n    this.positions.forEach(point => {\n      const pos = point.getPosition()\n      const newPos = GeoUtilsService.addDeltaToPosition(new Cartesian3(pos.x, pos.y, pos.z), delta, true);\n      point.setPosition(newPos);\n    });\n    this.updatePointsLayer(true, ...this.positions);\n    this.lastDraggedToPosition = draggedToPosition;\n  }\n\n  endMoveShape() {\n    this.lastDraggedToPosition = undefined;\n    this.updatePointsLayer(true, ...this.positions);\n  }\n\n  removePoint(pointToRemove: EditPoint) {\n    this.removePosition(pointToRemove);\n    this.positions\n      .filter(p => p.isVirtualEditPoint())\n      .forEach(p => this.removePosition(p));\n    this.addAllVirtualEditPoints();\n\n    this.renderPolylines();\n  }\n\n  addLastPoint(position: Cartesian3) {\n    this.doneCreation = true;\n    this.removePosition(this.movingPoint); // remove movingPoint\n    this.movingPoint = null;\n\n    this.addAllVirtualEditPoints();\n  }\n\n  getRealPositions(): Cartesian3[] {\n    return this.getRealPoints()\n      .map(position => position.getPosition());\n  }\n\n  getRealPoints(): EditPoint[] {\n    return this.positions\n      .filter(position => !position.isVirtualEditPoint() && position !== this.movingPoint);\n  }\n\n  getPoints(): EditPoint[] {\n    return this.positions.filter(position => position !== this.movingPoint);\n  }\n\n  getPositions(): Cartesian3[] {\n    return this.positions.map(position => position.getPosition());\n  }\n\n  getPositionsCallbackProperty(): CallbackProperty {\n    return new CallbackProperty(this.getPositions.bind(this), false);\n  }\n\n  private removePosition(point: EditPoint) {\n    const index = this.positions.findIndex((p) => p === point);\n    if (index < 0) {\n      return;\n    }\n    this.positions.splice(index, 1);\n    this.pointsLayer.remove(point.getId());\n  }\n\n  private updatePointsLayer(renderPolylines = true, ...point: EditPoint[]) {\n    if (renderPolylines) {\n      this.renderPolylines();\n    }\n    point.forEach(p => this.pointsLayer.update(p, p.getId()));\n  }\n\n  update() {\n    this.updatePointsLayer();\n  }\n\n  dispose() {\n    this.positions.forEach(editPoint => {\n      this.pointsLayer.remove(editPoint.getId());\n    });\n    this.polylines.forEach(line => this.polylinesLayer.remove(line.getId()));\n    if (this.movingPoint) {\n      this.pointsLayer.remove(this.movingPoint.getId());\n      this.movingPoint = undefined;\n    }\n    this.positions.length = 0;\n  }\n\n  getPointsCount(): number {\n    return this.positions.length;\n  }\n\n  getId() {\n    return this.id;\n  }\n}\n","import { Cartesian3 } from 'cesium';\nimport { CoordinateConverter } from './../../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { AcLayerComponent } from './../../../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { Injectable } from '@angular/core';\nimport { PolygonEditOptions } from '../../../models/polygon-edit-options';\nimport { EditablePolyline } from '../../../models/editable-polyline';\n\n@Injectable()\nexport class PolylinesManagerService {\n  polylines: Map<string, EditablePolyline> = new Map<string, EditablePolyline>();\n\n  createEditablePolyline(id: string, editPolylinesLayer: AcLayerComponent, editPointsLayer: AcLayerComponent,\n                         coordinateConverter: CoordinateConverter, polylineOptions?: PolygonEditOptions, positions?: Cartesian3[]) {\n    const editablePolyline = new EditablePolyline(\n      id,\n      editPolylinesLayer,\n      editPointsLayer,\n      coordinateConverter,\n      polylineOptions,\n      positions);\n    this.polylines.set(id, editablePolyline\n    );\n  }\n\n  get(id: string): EditablePolyline {\n    return this.polylines.get(id);\n  }\n\n  clear() {\n    this.polylines.forEach(polyline => polyline.dispose());\n    this.polylines.clear();\n  }\n}\n","import { Cartesian3, Cartographic, CallbackProperty, Rectangle } from 'cesium';\nimport { AcEntity } from '../../angular-cesium/models/ac-entity';\nimport { EditPoint } from './edit-point';\nimport { AcLayerComponent } from '../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { CoordinateConverter } from '../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { GeoUtilsService } from '../../angular-cesium/services/geo-utils/geo-utils.service';\nimport { RectangleEditOptions, RectangleProps } from './rectangle-edit-options';\nimport { PointProps } from './point-edit-options';\nimport { defaultLabelProps, LabelProps } from './label-props';\n\nexport class EditableRectangle extends AcEntity {\n  private positions: EditPoint[] = [];\n  private movingPoint: EditPoint;\n  private done = false;\n  private _enableEdit = true;\n  private _defaultPointProps: PointProps;\n  private _rectangleProps: RectangleProps;\n  private lastDraggedToPosition: Cartesian3;\n  private _labels: LabelProps[] = [];\n\n  constructor(\n    private id: string,\n    private pointsLayer: AcLayerComponent,\n    private rectangleLayer: AcLayerComponent,\n    private coordinateConverter: CoordinateConverter,\n    editOptions: RectangleEditOptions,\n    positions?: Cartesian3[]\n  ) {\n    super();\n    this.defaultPointProps = {...editOptions.pointProps};\n    this.rectangleProps = {...editOptions.rectangleProps};\n    if (positions && positions.length === 2) {\n      this.createFromExisting(positions);\n    } else if (positions) {\n      throw new Error('Rectangle consist of 2 points but provided ' + positions.length);\n    }\n  }\n\n  get labels(): LabelProps[] {\n    return this._labels;\n  }\n\n  set labels(labels: LabelProps[]) {\n    if (!labels) {\n      return;\n    }\n    const positions = this.getRealPositions();\n    this._labels = labels.map((label, index) => {\n      if (!label.position) {\n        label.position = positions[index];\n      }\n\n      return Object.assign({}, defaultLabelProps, label);\n    });\n  }\n\n  get rectangleProps(): RectangleProps {\n    return this._rectangleProps;\n  }\n\n  set rectangleProps(value: RectangleProps) {\n    this._rectangleProps = value;\n  }\n\n  get defaultPointProps(): PointProps {\n    return this._defaultPointProps;\n  }\n\n  set defaultPointProps(value: PointProps) {\n    this._defaultPointProps = value;\n  }\n\n  get enableEdit() {\n    return this._enableEdit;\n  }\n\n  set enableEdit(value: boolean) {\n    this._enableEdit = value;\n    this.positions.forEach(point => {\n      point.show = value;\n      this.updatePointsLayer(point);\n    });\n  }\n\n  private createFromExisting(positions: Cartesian3[]) {\n    positions.forEach(position => {\n      this.addPointFromExisting(position);\n    });\n    this.updateRectangleLayer();\n    this.updatePointsLayer(...this.positions);\n    this.done = true;\n  }\n\n  setPointsManually(points: EditPoint[], widthMeters?: number) {\n    if (!this.done) {\n      throw new Error('Update manually only in edit mode, after rectangle is created');\n    }\n    this.positions.forEach(p => this.pointsLayer.remove(p.getId()));\n    this.positions = points;\n    this.updatePointsLayer(...points);\n    this.updateRectangleLayer();\n  }\n\n  addPointFromExisting(position: Cartesian3) {\n    const newPoint = new EditPoint(this.id, position, this.defaultPointProps);\n    this.positions.push(newPoint);\n    this.updatePointsLayer(newPoint);\n  }\n\n  addPoint(position: Cartesian3) {\n    if (this.done) {\n      return;\n    }\n    const isFirstPoint = !this.positions.length;\n    if (isFirstPoint) {\n      const firstPoint = new EditPoint(this.id, position, this.defaultPointProps);\n      this.positions.push(firstPoint);\n      this.movingPoint = new EditPoint(this.id, position.clone(), this.defaultPointProps);\n      this.positions.push(this.movingPoint);\n      this.updatePointsLayer(firstPoint);\n    } else {\n\n      this.updatePointsLayer(...this.positions);\n      this.updateRectangleLayer();\n      this.done = true;\n      this.movingPoint = null;\n    }\n  }\n\n  movePoint(toPosition: Cartesian3, editPoint: EditPoint) {\n    if (!editPoint.isVirtualEditPoint()) {\n      editPoint.setPosition(toPosition);\n      this.updatePointsLayer(...this.positions);\n      this.updateRectangleLayer();\n    }\n  }\n\n  moveShape(startMovingPosition: Cartesian3, draggedToPosition: Cartesian3) {\n    if (!this.lastDraggedToPosition) {\n      this.lastDraggedToPosition = startMovingPosition;\n    }\n\n    const lastDraggedCartographic = Cartographic.fromCartesian(this.lastDraggedToPosition);\n    const draggedToPositionCartographic = Cartographic.fromCartesian(draggedToPosition);\n    this.getRealPoints().forEach(point => {\n      const cartographic = Cartographic.fromCartesian(point.getPosition());\n      cartographic.longitude += (draggedToPositionCartographic.longitude - lastDraggedCartographic.longitude);\n      cartographic.latitude += (draggedToPositionCartographic.latitude - lastDraggedCartographic.latitude);\n      point.setPosition(Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0));\n    });\n\n    this.updatePointsLayer(...this.positions);\n    this.updateRectangleLayer();\n    this.lastDraggedToPosition = draggedToPosition;\n  }\n\n  endMoveShape() {\n    this.lastDraggedToPosition = undefined;\n    this.positions.forEach(point => this.updatePointsLayer(point));\n    this.updateRectangleLayer();\n  }\n\n  endMovePoint() {\n    this.updatePointsLayer(...this.positions);\n  }\n\n  moveTempMovingPoint(toPosition: Cartesian3) {\n    if (this.movingPoint) {\n      this.movePoint(toPosition, this.movingPoint);\n    }\n  }\n\n  removePoint(pointToRemove: EditPoint) {\n    this.removePosition(pointToRemove);\n    this.positions.filter(p => p.isVirtualEditPoint()).forEach(p => this.removePosition(p));\n  }\n\n  addLastPoint(position: Cartesian3) {\n    this.done = true;\n    this.removePosition(this.movingPoint); // remove movingPoint\n    this.movingPoint = null;\n  }\n\n  getRealPositions(): Cartesian3[] {\n    return this.getRealPoints().map(position => position.getPosition());\n  }\n\n  getRealPositionsCallbackProperty(): CallbackProperty {\n    return new CallbackProperty(this.getRealPositions.bind(this), false);\n  }\n\n  getRealPoints(): EditPoint[] {\n    return this.positions.filter(position => !position.isVirtualEditPoint());\n  }\n\n  getPositions(): Cartesian3[] {\n    return this.positions.map(position => position.getPosition());\n  }\n\n  getRectangle(): Rectangle {\n    const cartographics = this.getPositions().map(cartesian => Cartographic.fromCartesian(cartesian));\n    const longitudes = cartographics.map(position => position.longitude);\n    const latitudes = cartographics.map(position =>  position.latitude);\n\n    return new Rectangle(\n      Math.min(...longitudes),\n      Math.min(...latitudes),\n      Math.max(...longitudes),\n      Math.max(...latitudes)\n    );\n  }\n\n  getRectangleCallbackProperty(): CallbackProperty {\n    return new CallbackProperty(this.getRectangle.bind(this), false);\n  }\n\n  private removePosition(point: EditPoint) {\n    const index = this.positions.findIndex(p => p === point);\n    if (index < 0) {\n      return;\n    }\n    this.positions.splice(index, 1);\n    this.pointsLayer.remove(point.getId());\n  }\n\n  private updatePointsLayer(...point: EditPoint[]) {\n    point.forEach(p => this.pointsLayer.update(p, p.getId()));\n  }\n\n  private updateRectangleLayer() {\n    this.rectangleLayer.update(this, this.id);\n  }\n\n  dispose() {\n    this.rectangleLayer.remove(this.id);\n\n    this.positions.forEach(editPoint => {\n      this.pointsLayer.remove(editPoint.getId());\n    });\n    if (this.movingPoint) {\n      this.pointsLayer.remove(this.movingPoint.getId());\n      this.movingPoint = undefined;\n    }\n    this.positions.length = 0;\n  }\n\n  getPointsCount(): number {\n    return this.positions.length;\n  }\n\n  getId() {\n    return this.id;\n  }\n}\n\n","import { Observable } from 'rxjs';\nimport { LabelProps } from './label-props';\n\nexport class EditorObservable<T> extends Observable<T> {\n  dispose: Function;\n  enable: Function;\n  disable: Function;\n  getLabels: () => LabelProps[];\n  getEditValue: () => T;\n  setLabelsRenderFn: (func: (update: T, labels: LabelProps[]) => LabelProps[]) => void;\n  updateLabels: (labels: LabelProps[]) => void;\n  finishCreation: () => boolean;\n}\n","import { Cartesian3 } from 'cesium';\nimport { EditPoint } from './edit-point';\nimport { EditorObservable } from './editor-observable';\nimport { PointProps } from './point-edit-options';\nimport { PointEditUpdate } from './point-edit-update';\n\nexport class PointEditorObservable extends EditorObservable<PointEditUpdate> {\n  setManually: (point: { position: Cartesian3, pointProp?: PointProps } | Cartesian3, pointProps?: PointProps) => void;\n  getCurrentPoint: () => EditPoint;\n}\n","import { Cartesian3 } from 'cesium';\nimport { EditPoint } from './edit-point';\nimport { EditorObservable } from './editor-observable';\nimport { PolylineEditUpdate } from './polyline-edit-update';\nimport { PointProps } from './point-edit-options';\nimport { PolylineProps } from './polyline-edit-options';\n//import { Cartesian3 } from '../../angular-cesium';\n\nexport class PolylineEditorObservable extends EditorObservable<PolylineEditUpdate> {\n  setManually: (points: { position: Cartesian3, pointProp?: PointProps }[] | Cartesian3[], polylineProps?: PolylineProps) => void;\n  getCurrentPoints: () => EditPoint[];\n}\n","import { Cartesian3 } from 'cesium';\nimport { EditPoint } from './edit-point';\nimport { EditorObservable } from './editor-observable';\nimport { PolygonEditUpdate } from './polygon-edit-update';\nimport { PointProps } from './point-edit-options';\nimport { PolygonProps } from './polygon-edit-options';\n\n\nexport class PolygonEditorObservable extends EditorObservable<PolygonEditUpdate> {\n  setManually: (points: { position: Cartesian3, pointProp?: PointProps }[] | Cartesian3[],\n                polygonProps?: PolygonProps) => void;\n  getCurrentPoints: () => EditPoint[];\n}\n","import { Cartesian3 } from 'cesium';\nimport { EditPoint } from './edit-point';\nimport { EditorObservable } from './editor-observable';\nimport { RectangleEditUpdate } from './rectangle-edit-update';\nimport { PointProps } from './point-edit-options';\n\nexport class RectangleEditorObservable extends EditorObservable<RectangleEditUpdate> {\n  setManually: (\n    firstPosition: Cartesian3,\n    secondPosition: Cartesian3,\n    firstPointProp?: PointProps,\n    secondPointProp?: PointProps\n  ) => void;\n  getCurrentPoints: () => EditPoint[];\n}\n\n","import { Cartesian3 } from 'cesium';\nimport { EditorObservable } from './editor-observable';\nimport { CircleEditUpdate } from './circle-edit-update';\nimport { PointProps } from './point-edit-options';\nimport { EllipseProps } from './ellipse-edit-options';\n\nexport class CircleEditorObservable extends EditorObservable<CircleEditUpdate> {\n  setManually: (center: Cartesian3, radius: number, centerPointProp?: PointProps,\n                radiusPointProp?: PointProps, circleProp?: EllipseProps) => void;\n  getCenter: () => Cartesian3;\n  getRadius: () => number; // meters\n}\n","import { Cartesian3 } from 'cesium';\nimport { EditorObservable } from './editor-observable';\n//import { Cartesian3 } from '../../angular-cesium/models/cartesian3';\nimport { EllipseEditUpdate } from './ellipse-edit-update';\nimport { PointProps } from './point-edit-options';\nimport { EllipseProps } from './ellipse-edit-options';\n\nexport class EllipseEditorObservable extends EditorObservable<EllipseEditUpdate> {\n  setManually: (\n    center: Cartesian3,\n    majorRadius: number,\n    rotation?: number,\n    minorRadius?: number,\n    centerPointProp?: PointProps,\n    radiusPointProp?: PointProps,\n    ellipseProp?: EllipseProps,\n  ) => void;\n  getCenter: () => Cartesian3;\n  getMinorRadius: () => number; // meters\n  getMajorRadius: () => number; // meters\n}\n","import { Cartesian3 } from 'cesium';\nimport { EditPoint } from './edit-point';\nimport { EditorObservable } from './editor-observable';\nimport { HippodromeEditUpdate } from './hippodrome-edit-update';\nimport { PointProps } from './point-edit-options';\n\nexport class HippodromeEditorObservable extends EditorObservable<HippodromeEditUpdate> {\n  setManually: (firstPosition: Cartesian3,\n                secondPosition: Cartesian3,\n                widthMeters?: number,\n                firstPointProp?: PointProps,\n                secondPointProp?: PointProps) => void;\n  getCurrentPoints: () => EditPoint[];\n  getCurrentWidth: () => number; // meters\n}\n","import { Cartesian3, Math as cMath, CallbackProperty } from 'cesium';\nimport { AcEntity } from '../../angular-cesium/models/ac-entity';\nimport { EditPoint } from './edit-point';\nimport { AcLayerComponent } from '../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { CoordinateConverter } from '../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { PointProps } from './point-edit-options';\nimport { HippodromeEditOptions, HippodromeProps } from './hippodrome-edit-options';\nimport { GeoUtilsService } from '../../angular-cesium/services/geo-utils/geo-utils.service';\nimport { defaultLabelProps, LabelProps } from './label-props';\n\nexport class EditableHippodrome extends AcEntity {\n  private positions: EditPoint[] = [];\n  private movingPoint: EditPoint;\n  private done = false;\n  private _enableEdit = true;\n  private _defaultPointProps: PointProps;\n  private _hippodromeProps: HippodromeProps;\n  private lastDraggedToPosition: Cartesian3;\n  private _labels: LabelProps[] = [];\n\n  constructor(\n    private id: string,\n    private pointsLayer: AcLayerComponent,\n    private hippodromeLayer: AcLayerComponent,\n    private coordinateConverter: CoordinateConverter,\n    editOptions: HippodromeEditOptions,\n    positions?: Cartesian3[],\n  ) {\n    super();\n    this.defaultPointProps = {...editOptions.pointProps};\n    this.hippodromeProps = {...editOptions.hippodromeProps};\n    if (positions && positions.length === 2) {\n      this.createFromExisting(positions);\n    } else if (positions) {\n      throw new Error('Hippodrome consist of 2 points but provided ' + positions.length);\n    }\n  }\n\n  get labels(): LabelProps[] {\n    return this._labels;\n  }\n\n  set labels(labels: LabelProps[]) {\n    if (!labels) {\n      return;\n    }\n    const positions = this.getRealPositions();\n    this._labels = labels.map((label, index) => {\n      if (!label.position) {\n        label.position = positions[index];\n      }\n\n      return Object.assign({}, defaultLabelProps, label);\n    });\n  }\n\n  get hippodromeProps(): HippodromeProps {\n    return this._hippodromeProps;\n  }\n\n  set hippodromeProps(value: HippodromeProps) {\n    this._hippodromeProps = value;\n  }\n\n  get defaultPointProps(): PointProps {\n    return this._defaultPointProps;\n  }\n\n  set defaultPointProps(value: PointProps) {\n    this._defaultPointProps = value;\n  }\n\n  get enableEdit() {\n    return this._enableEdit;\n  }\n\n  set enableEdit(value: boolean) {\n    this._enableEdit = value;\n    this.positions.forEach(point => {\n      point.show = value;\n      this.updatePointsLayer(point);\n    });\n  }\n\n  private createFromExisting(positions: Cartesian3[]) {\n    positions.forEach(position => {\n      this.addPointFromExisting(position);\n    });\n    this.createHeightEditPoints();\n    this.updateHippdromeLayer();\n    this.updatePointsLayer(...this.positions);\n    this.done = true;\n  }\n\n  setPointsManually(points: EditPoint[], widthMeters?: number) {\n    if (!this.done) {\n      throw new Error('Update manually only in edit mode, after polyline is created');\n    }\n    this.hippodromeProps.width = widthMeters ? widthMeters : this.hippodromeProps.width;\n    this.positions.forEach(p => this.pointsLayer.remove(p.getId()));\n    this.positions = points;\n    this.createHeightEditPoints();\n    this.updatePointsLayer(...points);\n    this.updateHippdromeLayer();\n  }\n\n  addPointFromExisting(position: Cartesian3) {\n    const newPoint = new EditPoint(this.id, position, this.defaultPointProps);\n    this.positions.push(newPoint);\n    this.updatePointsLayer(newPoint);\n  }\n\n  addPoint(position: Cartesian3) {\n    if (this.done) {\n      return;\n    }\n    const isFirstPoint = !this.positions.length;\n    if (isFirstPoint) {\n      const firstPoint = new EditPoint(this.id, position, this.defaultPointProps);\n      this.positions.push(firstPoint);\n      this.movingPoint = new EditPoint(this.id, position.clone(), this.defaultPointProps);\n      this.positions.push(this.movingPoint);\n      this.updatePointsLayer(firstPoint);\n    } else {\n      this.createHeightEditPoints();\n\n      this.updatePointsLayer(...this.positions);\n      this.updateHippdromeLayer();\n      this.done = true;\n      this.movingPoint = null;\n    }\n  }\n\n  private createHeightEditPoints() {\n    this.positions.filter(p => p.isVirtualEditPoint()).forEach(p => this.removePosition(p));\n\n    const firstP = this.getRealPoints()[0];\n    const secP = this.getRealPoints()[1];\n\n    const midPointCartesian3 = Cartesian3.lerp(firstP.getPosition(), secP.getPosition(), 0.5, new Cartesian3());\n    const bearingDeg = this.coordinateConverter.bearingToCartesian(firstP.getPosition(), secP.getPosition());\n\n    const upAzimuth = cMath.toRadians(bearingDeg) - Math.PI / 2;\n    this.createMiddleEditablePoint(midPointCartesian3, upAzimuth);\n    const downAzimuth = cMath.toRadians(bearingDeg) + Math.PI / 2;\n    this.createMiddleEditablePoint(midPointCartesian3, downAzimuth);\n  }\n\n  private createMiddleEditablePoint(midPointCartesian3: any, azimuth: number) {\n    const upEditCartesian3 = GeoUtilsService.pointByLocationDistanceAndAzimuth(\n      midPointCartesian3,\n      this.hippodromeProps.width / 2,\n      azimuth,\n      true,\n    );\n    const midPoint = new EditPoint(this.id, upEditCartesian3, this.defaultPointProps);\n    midPoint.setVirtualEditPoint(true);\n    this.positions.push(midPoint);\n  }\n\n  movePoint(toPosition: Cartesian3, editPoint: EditPoint) {\n    if (!editPoint.isVirtualEditPoint()) {\n      editPoint.setPosition(toPosition);\n      this.createHeightEditPoints();\n      this.updatePointsLayer(...this.positions);\n      this.updateHippdromeLayer();\n    } else {\n      this.changeWidthByNewPoint(toPosition);\n    }\n  }\n\n  private changeWidthByNewPoint(toPosition: Cartesian3) {\n    const firstP = this.getRealPoints()[0];\n    const secP = this.getRealPoints()[1];\n    const midPointCartesian3 = Cartesian3.lerp(firstP.getPosition(), secP.getPosition(), 0.5, new Cartesian3());\n\n    const bearingDeg = this.coordinateConverter.bearingToCartesian(midPointCartesian3, toPosition);\n    let normalizedBearingDeb = bearingDeg;\n    if (bearingDeg > 270) {\n      normalizedBearingDeb = bearingDeg - 270;\n    } else if (bearingDeg > 180) {\n      normalizedBearingDeb = bearingDeg - 180;\n    }\n    let bearingDegHippodromeDots = this.coordinateConverter.bearingToCartesian(firstP.getPosition(), secP.getPosition());\n    if (bearingDegHippodromeDots > 180) {\n      bearingDegHippodromeDots = this.coordinateConverter.bearingToCartesian(secP.getPosition(), firstP.getPosition());\n    }\n    let fixedBearingDeg =\n      bearingDegHippodromeDots > normalizedBearingDeb\n        ? bearingDegHippodromeDots - normalizedBearingDeb\n        : normalizedBearingDeb - bearingDegHippodromeDots;\n\n    if (bearingDeg > 270) {\n      fixedBearingDeg = bearingDeg - bearingDegHippodromeDots;\n    }\n\n    const distanceMeters = Math.abs(GeoUtilsService.distance(midPointCartesian3, toPosition));\n    const radiusWidth = Math.sin(cMath.toRadians(fixedBearingDeg)) * distanceMeters;\n\n    this.hippodromeProps.width = Math.abs(radiusWidth) * 2;\n    this.createHeightEditPoints();\n    this.updatePointsLayer(...this.positions);\n    this.updateHippdromeLayer();\n  }\n\n  moveShape(startMovingPosition: Cartesian3, draggedToPosition: Cartesian3) {\n    if (!this.lastDraggedToPosition) {\n      this.lastDraggedToPosition = startMovingPosition;\n    }\n\n    const delta = GeoUtilsService.getPositionsDelta(this.lastDraggedToPosition, draggedToPosition);\n    this.getRealPoints().forEach(point => {\n      const newPos = GeoUtilsService.addDeltaToPosition(point.getPosition(), delta, true);\n      point.setPosition(newPos);\n    });\n    this.createHeightEditPoints();\n    this.updatePointsLayer(...this.positions);\n    this.updateHippdromeLayer();\n    this.lastDraggedToPosition = draggedToPosition;\n  }\n\n  endMoveShape() {\n    this.lastDraggedToPosition = undefined;\n    this.createHeightEditPoints();\n    this.positions.forEach(point => this.updatePointsLayer(point));\n    this.updateHippdromeLayer();\n  }\n\n  endMovePoint() {\n    this.createHeightEditPoints();\n    this.updatePointsLayer(...this.positions);\n  }\n\n  moveTempMovingPoint(toPosition: Cartesian3) {\n    if (this.movingPoint) {\n      this.movePoint(toPosition, this.movingPoint);\n    }\n  }\n\n  removePoint(pointToRemove: EditPoint) {\n    this.removePosition(pointToRemove);\n    this.positions.filter(p => p.isVirtualEditPoint()).forEach(p => this.removePosition(p));\n  }\n\n  addLastPoint(position: Cartesian3) {\n    this.done = true;\n    this.removePosition(this.movingPoint); // remove movingPoint\n    this.movingPoint = null;\n  }\n\n  getRealPositions(): Cartesian3[] {\n    return this.getRealPoints().map(position => position.getPosition());\n  }\n\n  getRealPositionsCallbackProperty(): CallbackProperty {\n    return new CallbackProperty(this.getRealPositions.bind(this), false);\n  }\n\n  getRealPoints(): EditPoint[] {\n    return this.positions.filter(position => !position.isVirtualEditPoint());\n  }\n\n  getWidth(): number {\n    return this.hippodromeProps.width;\n  }\n\n  getPositions(): Cartesian3[] {\n    return this.positions.map(position => position.getPosition());\n  }\n\n  private removePosition(point: EditPoint) {\n    const index = this.positions.findIndex(p => p === point);\n    if (index < 0) {\n      return;\n    }\n    this.positions.splice(index, 1);\n    this.pointsLayer.remove(point.getId());\n  }\n\n  private updatePointsLayer(...point: EditPoint[]) {\n    point.forEach(p => this.pointsLayer.update(p, p.getId()));\n  }\n\n  private updateHippdromeLayer() {\n    this.hippodromeLayer.update(this, this.id);\n  }\n\n  dispose() {\n    this.hippodromeLayer.remove(this.id);\n\n    this.positions.forEach(editPoint => {\n      this.pointsLayer.remove(editPoint.getId());\n    });\n    if (this.movingPoint) {\n      this.pointsLayer.remove(this.movingPoint.getId());\n      this.movingPoint = undefined;\n    }\n    this.positions.length = 0;\n  }\n\n  getPointsCount(): number {\n    return this.positions.length;\n  }\n\n  getId() {\n    return this.id;\n  }\n}\n","import { publish, tap } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { Color, ClassificationType, sampleTerrain, Cartographic, HeightReference, Cartesian3 } from 'cesium';\nimport { MapEventsManagerService } from '../../../../angular-cesium/services/map-events-mananger/map-events-manager';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { CesiumEvent } from '../../../../angular-cesium/services/map-events-mananger/consts/cesium-event.enum';\nimport { PickOptions } from '../../../../angular-cesium/services/map-events-mananger/consts/pickOptions.enum';\nimport { EditModes } from '../../../models/edit-mode.enum';\nimport { EditActions } from '../../../models/edit-actions.enum';\nimport { DisposableObservable } from '../../../../angular-cesium/services/map-events-mananger/disposable-observable';\nimport { CoordinateConverter } from '../../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { EditPoint } from '../../../models/edit-point';\nimport { CameraService } from '../../../../angular-cesium/services/camera/camera.service';\nimport { PolylinesManagerService } from './polylines-manager.service';\nimport { ClampTo3DOptions, PolylineEditOptions, PolylineProps } from '../../../models/polyline-edit-options';\nimport { PointProps } from '../../../models/point-edit-options';\nimport { PolylineEditUpdate } from '../../../models/polyline-edit-update';\nimport { PolylineEditorObservable } from '../../../models/polyline-editor-observable';\nimport { EditPolyline } from '../../../models';\nimport { LabelProps } from '../../../models/label-props';\nimport { debounce, generateKey } from '../../utils';\nimport { CesiumService } from '../../../../angular-cesium';\nimport { when } from 'when';\n\nexport const DEFAULT_POLYLINE_OPTIONS: PolylineEditOptions = {\n  addPointEvent: CesiumEvent.LEFT_CLICK,\n  addLastPointEvent: CesiumEvent.LEFT_DOUBLE_CLICK,\n  removePointEvent: CesiumEvent.RIGHT_CLICK,\n  dragPointEvent: CesiumEvent.LEFT_CLICK_DRAG,\n  dragShapeEvent: CesiumEvent.LEFT_CLICK_DRAG,\n  allowDrag: true,\n  pointProps: {\n    color: Color.WHITE.withAlpha(0.95),\n    outlineColor: Color.BLACK.withAlpha(0.5),\n    outlineWidth: 1,\n    pixelSize: 15,\n    virtualPointPixelSize: 8,\n    show: true,\n    showVirtual: true,\n    disableDepthTestDistance: Number.POSITIVE_INFINITY,\n  },\n  polylineProps: {\n    material: () => Color.BLACK,\n    width: 3,\n    clampToGround: false,\n    zIndex: 0,\n    classificationType: ClassificationType.BOTH,\n  },\n  clampHeightTo3D: false,\n  clampHeightTo3DOptions: {\n    clampToTerrain: false,\n    clampMostDetailed: true,\n    clampToHeightPickWidth: 2,\n  },\n};\n\n/**\n * Service for creating editable polylines\n *\n *  * You must provide `PolylineEditorService` yourself.\n * PolygonsEditorService works together with `<polylines-editor>` component. Therefor you need to create `<polylines-editor>`\n * for each `PolylineEditorService`, And of course somewhere under `<ac-map>`/\n *\n * + `create` for starting a creation of the shape over the map. Returns a extension of `PolylineEditorObservable`.\n * + `edit` for editing shape over the map starting from a given positions. Returns an extension of `PolylineEditorObservable`.\n * + To stop editing call `dsipose()` from the `PolylineEditorObservable` you get back from `create()` \\ `edit()`.\n *\n * **Labels over editted shapes**\n * Angular Cesium allows you to draw labels over a shape that is being edited with one of the editors.\n * To add label drawing logic to your editor use the function `setLabelsRenderFn()` that is defined on the\n * `PolylineEditorObservable` that is returned from calling `create()` \\ `edit()` of one of the editor services.\n * `setLabelsRenderFn()` - receives a callback that is called every time the shape is redrawn\n * (except when the shape is being dragged). The callback is called with the last shape state and with an array of the current labels.\n * The callback should return type `LabelProps[]`.\n * You can also use `updateLabels()` to pass an array of labels of type `LabelProps[]` to be drawn.\n *\n * usage:\n * ```typescript\n *  // Start creating polyline\n *  const editing$ = polylinesEditorService.create();\n *  this.editing$.subscribe(editResult => {\n *\t\t\t\tconsole.log(editResult.positions);\n *\t\t});\n *\n *  // Or edit polyline from existing polyline cartesian3 positions\n *  const editing$ = this.polylinesEditor.edit(initialPos);\n *\n * ```\n */\n@Injectable()\nexport class PolylinesEditorService {\n  private mapEventsManager: MapEventsManagerService;\n  private updateSubject = new Subject<PolylineEditUpdate>();\n  private updatePublisher = publish<PolylineEditUpdate>()(this.updateSubject); // TODO maybe not needed\n  private coordinateConverter: CoordinateConverter;\n  private cameraService: CameraService;\n  private polylinesManager: PolylinesManagerService;\n  private observablesMap = new Map<string, DisposableObservable<any>[]>();\n  private cesiumScene;\n\n  private clampPointsDebounced = debounce((id, clampHeightTo3D: boolean, clampHeightTo3DOptions) => {\n    this.clampPoints(id, clampHeightTo3D, clampHeightTo3DOptions);\n  }, 300);\n\n  init(mapEventsManager: MapEventsManagerService,\n       coordinateConverter: CoordinateConverter,\n       cameraService: CameraService,\n       polylinesManager: PolylinesManagerService,\n       cesiumViewer: CesiumService) {\n    this.mapEventsManager = mapEventsManager;\n    this.coordinateConverter = coordinateConverter;\n    this.cameraService = cameraService;\n    this.polylinesManager = polylinesManager;\n    this.updatePublisher.connect();\n\n    this.cesiumScene = cesiumViewer.getScene();\n  }\n\n  onUpdate(): Observable<PolylineEditUpdate> {\n    return this.updatePublisher;\n  }\n\n  private clampPoints(id, clampHeightTo3D: boolean, { clampToTerrain, clampMostDetailed, clampToHeightPickWidth }: ClampTo3DOptions) {\n    if (clampHeightTo3D && clampMostDetailed) {\n      const polyline = this.polylinesManager.get(id);\n      const points = polyline.getPoints();\n\n      if (!clampToTerrain) {\n        // 3dTiles\n        points.forEach(point => {\n          point.setPosition(this.cesiumScene.clampToHeight(point.getPosition(), undefined, clampToHeightPickWidth));\n        });\n      } else {\n        const cartographics = points.map(point => this.coordinateConverter.cartesian3ToCartographic(point.getPosition()));\n        const promise = sampleTerrain(this.cesiumScene.terrainProvider, 11, cartographics);\n        when(promise, function (updatedPositions) {\n          points.forEach((point, index) => {\n            point.setPosition(Cartographic.toCartesian(updatedPositions[index]));\n          });\n        });\n      }\n    }\n  }\n\n\n  private screenToPosition(cartesian2, clampHeightTo3D: boolean, {clampToHeightPickWidth, clampToTerrain}: ClampTo3DOptions) {\n    const cartesian3 = this.coordinateConverter.screenToCartesian3(cartesian2);\n\n    // If cartesian3 is undefined then the point inst on the globe\n    if (clampHeightTo3D && cartesian3) {\n      const globePositionPick = () => {\n        const ray = this.cameraService.getCamera().getPickRay(cartesian2);\n        return this.cesiumScene.globe.pick(ray, this.cesiumScene);\n      };\n\n      // is terrain?\n      if (clampToTerrain) {\n        return globePositionPick();\n      } else {\n        const cartesian3PickPosition = this.cesiumScene.pickPosition(cartesian2);\n        const latLon = CoordinateConverter.cartesian3ToLatLon(cartesian3PickPosition);\n        if (latLon.height < 0) {// means nothing picked -> Validate it\n          return globePositionPick();\n        }\n        return this.cesiumScene.clampToHeight(cartesian3PickPosition, undefined, clampToHeightPickWidth);\n      }\n    }\n\n    return cartesian3;\n  }\n\n  create(options = DEFAULT_POLYLINE_OPTIONS, eventPriority = 100): PolylineEditorObservable {\n    const positions: Cartesian3[] = [];\n    const id = generateKey();\n    const polylineOptions = this.setOptions(options);\n\n    const clientEditSubject = new BehaviorSubject<PolylineEditUpdate>({\n      id,\n      editAction: null,\n      editMode: EditModes.CREATE\n    });\n    let finishedCreate = false;\n\n    this.updateSubject.next({\n      id,\n      positions,\n      editMode: EditModes.CREATE,\n      editAction: EditActions.INIT,\n      polylineOptions: polylineOptions,\n    });\n\n    const finishCreation = (position: Cartesian3) => {\n      return this.switchToEditMode(\n        id,\n        position,\n        clientEditSubject,\n        positions,\n        eventPriority,\n        polylineOptions,\n        editorObservable,\n        finishedCreate);\n    };\n\n    const mouseMoveRegistration = this.mapEventsManager.register({\n      event: CesiumEvent.MOUSE_MOVE,\n      pick: PickOptions.NO_PICK,\n      priority: eventPriority,\n      pickConfig: options.pickConfiguration,\n    });\n    const addPointRegistration = this.mapEventsManager.register({\n      event: polylineOptions.addPointEvent,\n      modifier: polylineOptions.addPointModifier,\n      pick: PickOptions.NO_PICK,\n      priority: eventPriority,\n      pickConfig: options.pickConfiguration,\n    });\n    const addLastPointRegistration = this.mapEventsManager.register({\n      event: polylineOptions.addLastPointEvent,\n      modifier: polylineOptions.addLastPointModifier,\n      pick: PickOptions.NO_PICK,\n      priority: eventPriority,\n      pickConfig: options.pickConfiguration,\n    });\n\n    this.observablesMap.set(id, [mouseMoveRegistration, addPointRegistration, addLastPointRegistration]);\n    const editorObservable = this.createEditorObservable(clientEditSubject, id, finishCreation);\n\n    mouseMoveRegistration.subscribe(({ movement: { endPosition } }) => {\n      const position = this.screenToPosition(endPosition, polylineOptions.clampHeightTo3D, polylineOptions.clampHeightTo3DOptions);\n      if (position) {\n        this.updateSubject.next({\n          id,\n          positions: this.getPositions(id),\n          editMode: EditModes.CREATE,\n          updatedPosition: position,\n          editAction: EditActions.MOUSE_MOVE,\n        });\n      }\n    });\n\n    addPointRegistration.subscribe(({ movement: { endPosition } }) => {\n      if (finishedCreate) {\n        return;\n      }\n      const position = this.screenToPosition(endPosition, polylineOptions.clampHeightTo3D, polylineOptions.clampHeightTo3DOptions);\n      if (!position) {\n        return;\n      }\n      const allPositions = this.getPositions(id);\n      if (allPositions.find((cartesian) => cartesian.equals(position))) {\n        return;\n      }\n      const updateValue = {\n        id,\n        positions: allPositions,\n        editMode: EditModes.CREATE,\n        updatedPosition: position,\n        editAction: EditActions.ADD_POINT,\n      };\n      this.updateSubject.next(updateValue);\n      clientEditSubject.next({\n        ...updateValue,\n        positions: this.getPositions(id),\n        points: this.getPoints(id),\n      });\n      if (polylineOptions.maximumNumberOfPoints && allPositions.length + 1 === polylineOptions.maximumNumberOfPoints) {\n        finishedCreate = finishCreation(position);\n      }\n    });\n\n    addLastPointRegistration.subscribe(({ movement: { endPosition } }) => {\n      const position = this.screenToPosition(endPosition, polylineOptions.clampHeightTo3D, polylineOptions.clampHeightTo3DOptions);\n      if (!position) {\n        return;\n      }\n\n      // Add last point to positions if not already added\n      const allPositions = this.getPositions(id);\n      if (!allPositions.find((cartesian) => cartesian.equals(position))) {\n        const updateValue = {\n          id,\n          positions: allPositions,\n          editMode: EditModes.CREATE,\n          updatedPosition: position,\n          editAction: EditActions.ADD_POINT,\n        };\n        this.updateSubject.next(updateValue);\n        clientEditSubject.next({\n          ...updateValue,\n          positions: this.getPositions(id),\n          points: this.getPoints(id),\n        });\n      }\n\n      finishedCreate = finishCreation(position);\n    });\n\n    return editorObservable;\n  }\n\n  private switchToEditMode(id,\n                           position,\n                           clientEditSubject,\n                           positions: Cartesian3[],\n                           eventPriority,\n                           polylineOptions,\n                           editorObservable,\n                           finishedCreate: boolean) {\n    const update = {\n      id,\n      positions: this.getPositions(id),\n      editMode: EditModes.CREATE,\n      updatedPosition: position,\n      editAction: EditActions.ADD_LAST_POINT,\n    };\n    this.updateSubject.next(update);\n    clientEditSubject.next({\n      ...update,\n      positions: this.getPositions(id),\n      points: this.getPoints(id),\n    });\n\n    const changeMode = {\n      id,\n      editMode: EditModes.CREATE,\n      editAction: EditActions.CHANGE_TO_EDIT,\n    };\n    this.updateSubject.next(changeMode);\n    clientEditSubject.next(changeMode);\n    if (this.observablesMap.has(id)) {\n      this.observablesMap.get(id).forEach(registration => registration.dispose());\n    }\n    this.observablesMap.delete(id);\n    this.editPolyline(id, positions, eventPriority, clientEditSubject, polylineOptions, editorObservable);\n    finishedCreate = true;\n    return finishedCreate;\n  }\n\n  edit(positions: Cartesian3[], options = DEFAULT_POLYLINE_OPTIONS, priority = 100): PolylineEditorObservable {\n    if (positions.length < 2) {\n      throw new Error('Polylines editor error edit(): polyline should have at least 2 positions');\n    }\n    const id = generateKey();\n    const polylineOptions = this.setOptions(options);\n    const editSubject = new BehaviorSubject<PolylineEditUpdate>({\n      id,\n      editAction: null,\n      editMode: EditModes.EDIT\n    });\n    const update = {\n      id,\n      positions: positions,\n      editMode: EditModes.EDIT,\n      editAction: EditActions.INIT,\n      polylineOptions: polylineOptions,\n    };\n    this.updateSubject.next(update);\n    editSubject.next({\n      ...update,\n      positions: this.getPositions(id),\n      points: this.getPoints(id),\n    });\n    return this.editPolyline(\n      id,\n      positions,\n      priority,\n      editSubject,\n      polylineOptions\n    );\n  }\n\n  private editPolyline(id: string,\n                       positions: Cartesian3[],\n                       priority: number,\n                       editSubject: Subject<PolylineEditUpdate>,\n                       options: PolylineEditOptions,\n                       editObservable?: PolylineEditorObservable) {\n    this.clampPoints(id, options.clampHeightTo3D, options.clampHeightTo3DOptions);\n\n    const pointDragRegistration = this.mapEventsManager.register({\n      event: options.dragPointEvent,\n      entityType: EditPoint,\n      pick: PickOptions.PICK_FIRST,\n      pickConfig: options.pickConfiguration,\n      priority,\n      pickFilter: entity => id === entity.editedEntityId,\n    });\n\n    const pointRemoveRegistration = this.mapEventsManager.register({\n      event: options.removePointEvent,\n      modifier: options.removePointModifier,\n      entityType: EditPoint,\n      pick: PickOptions.PICK_FIRST,\n      pickConfig: options.pickConfiguration,\n      priority,\n      pickFilter: entity => id === entity.editedEntityId,\n    });\n\n    let shapeDragRegistration;\n    if (options.allowDrag) {\n      shapeDragRegistration = this.mapEventsManager.register({\n        event: options.dragShapeEvent,\n        entityType: EditPolyline,\n        pick: PickOptions.PICK_FIRST,\n        pickConfig: options.pickConfiguration,\n        priority,\n        pickFilter: entity => id === entity.editedEntityId,\n      });\n    }\n\n    if (shapeDragRegistration) {\n      shapeDragRegistration\n        .pipe(tap(({ movement: { drop } }) => this.polylinesManager.get(id).enableEdit && this.cameraService.enableInputs(drop)))\n        .subscribe(({ movement: { startPosition, endPosition, drop }, entities }) => {\n          const endDragPosition = this.screenToPosition(endPosition, false, options.clampHeightTo3DOptions);\n          const startDragPosition = this.screenToPosition(startPosition, false, options.clampHeightTo3DOptions);\n          if (!endDragPosition) {\n            return;\n          }\n\n          const update = {\n            id,\n            positions: this.getPositions(id),\n            editMode: EditModes.EDIT,\n            updatedPosition: endDragPosition,\n            draggedPosition: startDragPosition,\n            editAction: drop ? EditActions.DRAG_SHAPE_FINISH : EditActions.DRAG_SHAPE,\n          };\n          this.updateSubject.next(update);\n          editSubject.next({\n            ...update,\n            positions: this.getPositions(id),\n            points: this.getPoints(id),\n          });\n        });\n    }\n\n    pointDragRegistration.pipe(\n      tap(({ movement: { drop } }) => this.polylinesManager.get(id).enableEdit && this.cameraService.enableInputs(drop)))\n      .subscribe(({ movement: { endPosition, drop }, entities }) => {\n        const position = this.screenToPosition(endPosition, options.clampHeightTo3D, options.clampHeightTo3DOptions);\n        if (!position) {\n          return;\n        }\n        const point: EditPoint = entities[0];\n\n        const update = {\n          id,\n          positions: this.getPositions(id),\n          editMode: EditModes.EDIT,\n          updatedPosition: position,\n          updatedPoint: point,\n          editAction: drop ? EditActions.DRAG_POINT_FINISH : EditActions.DRAG_POINT,\n        };\n        this.updateSubject.next(update);\n        editSubject.next({\n          ...update,\n          positions: this.getPositions(id),\n          points: this.getPoints(id),\n        });\n\n        this.clampPointsDebounced(id, options.clampHeightTo3D, options.clampHeightTo3DOptions);\n      });\n\n    pointRemoveRegistration.subscribe(({ entities }) => {\n      const point: EditPoint = entities[0];\n      const allPositions = [...this.getPositions(id)];\n      if (allPositions.length < 3) {\n        return;\n      }\n      const index = allPositions.findIndex(position => point.getPosition().equals(position as Cartesian3));\n      if (index < 0) {\n        return;\n      }\n\n      const update = {\n        id,\n        positions: allPositions,\n        editMode: EditModes.EDIT,\n        updatedPoint: point,\n        editAction: EditActions.REMOVE_POINT,\n      };\n      this.updateSubject.next(update);\n      editSubject.next({\n        ...update,\n        positions: this.getPositions(id),\n        points: this.getPoints(id),\n      });\n\n      this.clampPoints(id, options.clampHeightTo3D, options.clampHeightTo3DOptions);\n    });\n\n    const observables = [pointDragRegistration, pointRemoveRegistration];\n    if (shapeDragRegistration) {\n      observables.push(shapeDragRegistration);\n    }\n    this.observablesMap.set(id, observables);\n    return this.createEditorObservable(editSubject, id);\n  }\n\n  private setOptions(options: PolylineEditOptions) {\n    const defaultClone = JSON.parse(JSON.stringify(DEFAULT_POLYLINE_OPTIONS));\n    const polylineOptions: PolylineEditOptions = Object.assign(defaultClone, options);\n    polylineOptions.pointProps = {...DEFAULT_POLYLINE_OPTIONS.pointProps, ...options.pointProps};\n    polylineOptions.polylineProps = {...DEFAULT_POLYLINE_OPTIONS.polylineProps, ...options.polylineProps};\n    polylineOptions.clampHeightTo3DOptions = {...DEFAULT_POLYLINE_OPTIONS.clampHeightTo3DOptions, ...options.clampHeightTo3DOptions};\n\n    if (options.clampHeightTo3D) {\n      if (!this.cesiumScene.pickPositionSupported || !this.cesiumScene.clampToHeightSupported) {\n        throw new Error(`Cesium pickPosition and clampToHeight must be supported to use clampHeightTo3D`);\n      }\n\n      if (this.cesiumScene.pickTranslucentDepth) {\n        console.warn(`Cesium scene.pickTranslucentDepth must be false in order to make the editors work properly on 3D`);\n      }\n\n      if (polylineOptions.pointProps.color.alpha === 1 || polylineOptions.pointProps.outlineColor.alpha === 1) {\n        console.warn('Point color and outline color must have alpha in order to make the editor work properly on 3D');\n      }\n\n      polylineOptions.allowDrag = false;\n      polylineOptions.polylineProps.clampToGround = true;\n      polylineOptions.pointProps.heightReference = polylineOptions.clampHeightTo3DOptions.clampToTerrain ?\n        HeightReference.CLAMP_TO_GROUND : HeightReference.RELATIVE_TO_GROUND;\n      polylineOptions.pointProps.disableDepthTestDistance = Number.POSITIVE_INFINITY;\n    }\n    return polylineOptions;\n  }\n\n\n  private createEditorObservable(observableToExtend: any, id: string, finishCreation?: (position: Cartesian3) => boolean)\n                                                                                                      : PolylineEditorObservable {\n    observableToExtend.dispose = () => {\n      const observables = this.observablesMap.get(id);\n      if (observables) {\n        observables.forEach(obs => obs.dispose());\n      }\n      this.observablesMap.delete(id);\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.DISPOSE,\n      });\n    };\n\n    observableToExtend.enable = () => {\n      this.updateSubject.next({\n        id,\n        positions: this.getPositions(id),\n        editMode: EditModes.EDIT,\n        editAction: EditActions.ENABLE,\n      });\n    };\n\n    observableToExtend.disable = () => {\n      this.updateSubject.next({\n        id,\n        positions: this.getPositions(id),\n        editMode: EditModes.EDIT,\n        editAction: EditActions.DISABLE,\n      });\n    };\n\n    observableToExtend.setManually = (points: {\n      position: Cartesian3,\n      pointProp?: PointProps\n    }[] | Cartesian3[], polylineProps?: PolylineProps) => {\n      const polyline = this.polylinesManager.get(id);\n      polyline.setManually(points, polylineProps);\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.SET_MANUALLY,\n      });\n    };\n\n    observableToExtend.setLabelsRenderFn = (callback: any) => {\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.SET_EDIT_LABELS_RENDER_CALLBACK,\n        labelsRenderFn: callback,\n      });\n    };\n\n    observableToExtend.updateLabels = (labels: LabelProps[]) => {\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.UPDATE_EDIT_LABELS,\n        updateLabels: labels,\n      });\n    };\n\n    observableToExtend.finishCreation = () => {\n      if (!finishCreation) {\n        throw new Error('Polylines editor error edit(): cannot call finishCreation() on edit');\n      }\n\n      return finishCreation(null);\n    };\n\n    observableToExtend.getCurrentPoints = () => this.getPoints(id);\n\n    observableToExtend.getEditValue = () => observableToExtend.getValue();\n\n    observableToExtend.getLabels = (): LabelProps[] => this.polylinesManager.get(id).labels;\n\n    return observableToExtend as PolylineEditorObservable;\n  }\n\n  private getPositions(id: string) {\n    const polyline = this.polylinesManager.get(id);\n    return polyline.getRealPositions();\n  }\n\n  private getPoints(id: string) {\n    const polyline = this.polylinesManager.get(id);\n    return polyline.getRealPoints();\n  }\n}\n","import { ChangeDetectionStrategy, Component, OnDestroy, ViewChild } from '@angular/core';\nimport * as Cesium from 'cesium';\nimport { CesiumService } from '../../../angular-cesium/services/cesium/cesium.service';\nimport { EditModes } from '../../models/edit-mode.enum';\nimport { AcNotification } from '../../../angular-cesium/models/ac-notification';\nimport { EditActions } from '../../models/edit-actions.enum';\nimport { AcLayerComponent } from '../../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { CoordinateConverter } from '../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { MapEventsManagerService } from '../../../angular-cesium/services/map-events-mananger/map-events-manager';\nimport { Subject } from 'rxjs';\nimport { CameraService } from '../../../angular-cesium/services/camera/camera.service';\nimport { EditPoint } from '../../models/edit-point';\nimport { PolylinesEditorService } from '../../services/entity-editors/polyline-editor/polylines-editor.service';\nimport { PolylinesManagerService } from '../../services/entity-editors/polyline-editor/polylines-manager.service';\nimport { PolylineEditUpdate } from '../../models/polyline-edit-update';\nimport { EditablePolyline } from '../../models/editable-polyline';\nimport { LabelProps } from '../../models/label-props';\n\n@Component({\n    selector: 'polylines-editor',\n    template: /*html*/ `\n    <ac-layer #editPolylinesLayer acFor=\"let polyline of editPolylines$\" [context]=\"this\">\n      <ac-polyline-desc\n        props=\"{\n        positions: polyline.getPositionsCallbackProperty(),\n        width: polyline.props.width,\n        material: polyline.props.material(),\n        clampToGround: polyline.props.clampToGround,\n        zIndex: polyline.props.zIndex,\n        classificationType: polyline.props.classificationType,\n      }\"\n      >\n      </ac-polyline-desc>\n    </ac-layer>\n\n    <ac-layer #editPointsLayer acFor=\"let point of editPoints$\" [context]=\"this\">\n      <ac-point-desc\n        props=\"{\n        position: point.getPositionCallbackProperty(),\n        pixelSize: getPointSize(point),\n        color: point.props.color,\n        outlineColor: point.props.outlineColor,\n        outlineWidth: point.props.outlineWidth,\n        show: getPointShow(point),\n        disableDepthTestDistance: point.props.disableDepthTestDistance,\n        heightReference: point.props.heightReference,\n    }\"\n      ></ac-point-desc>\n    </ac-layer>\n\n    <ac-layer #polylineLabelsLayer acFor=\"let polylineLabels of polylineLabels$\" [context]=\"this\">\n      <ac-array-desc acFor=\"let label of polylineLabels.labels\" [idGetter]=\"getLabelId\">\n        <ac-label-primitive-desc\n          props=\"{\n            position: label.position,\n            backgroundColor: label.backgroundColor,\n            backgroundPadding: label.backgroundPadding,\n            distanceDisplayCondition: label.distanceDisplayCondition,\n            eyeOffset: label.eyeOffset,\n            fillColor: label.fillColor,\n            font: label.font,\n            heightReference: label.heightReference,\n            horizontalOrigin: label.horizontalOrigin,\n            outlineColor: label.outlineColor,\n            outlineWidth: label.outlineWidth,\n            pixelOffset: label.pixelOffset,\n            pixelOffsetScaleByDistance: label.pixelOffsetScaleByDistance,\n            scale: label.scale,\n            scaleByDistance: label.scaleByDistance,\n            show: label.show,\n            showBackground: label.showBackground,\n            style: label.style,\n            text: label.text,\n            translucencyByDistance: label.translucencyByDistance,\n            verticalOrigin: label.verticalOrigin,\n            disableDepthTestDistance: label.disableDepthTestDistance,\n        }\"\n        >\n        </ac-label-primitive-desc>\n      </ac-array-desc>\n    </ac-layer>\n  `,\n    providers: [CoordinateConverter, PolylinesManagerService],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class PolylinesEditorComponent implements OnDestroy {\n  private editLabelsRenderFn: (update: PolylineEditUpdate, labels: LabelProps[]) => LabelProps[];\n  public editPoints$ = new Subject<AcNotification>();\n  public editPolylines$ = new Subject<AcNotification>();\n  public polylineLabels$ = new Subject<AcNotification>();\n\n  @ViewChild('editPointsLayer') private editPointsLayer: AcLayerComponent;\n  @ViewChild('editPolylinesLayer') private editPolylinesLayer: AcLayerComponent;\n  @ViewChild('polylineLabelsLayer') private polylineLabelsLayer: AcLayerComponent;\n\n  constructor(\n    private polylinesEditor: PolylinesEditorService,\n    private coordinateConverter: CoordinateConverter,\n    private mapEventsManager: MapEventsManagerService,\n    private cameraService: CameraService,\n    private polylinesManager: PolylinesManagerService,\n    private cesiumService: CesiumService,\n  ) {\n    this.polylinesEditor.init(this.mapEventsManager, this.coordinateConverter, this.cameraService, polylinesManager, this.cesiumService);\n    this.startListeningToEditorUpdates();\n  }\n\n  private startListeningToEditorUpdates() {\n    this.polylinesEditor.onUpdate().subscribe((update: PolylineEditUpdate) => {\n      if (update.editMode === EditModes.CREATE || update.editMode === EditModes.CREATE_OR_EDIT) {\n        this.handleCreateUpdates(update);\n      } else if (update.editMode === EditModes.EDIT) {\n        this.handleEditUpdates(update);\n      }\n    });\n  }\n\n  getLabelId(element: any, index: number): string {\n    return index.toString();\n  }\n\n  renderEditLabels(polyline: EditablePolyline, update: PolylineEditUpdate, labels?: LabelProps[]) {\n    update.positions = polyline.getRealPositions();\n    update.points = polyline.getRealPoints();\n\n    if (labels) {\n      polyline.labels = labels;\n      this.polylineLabelsLayer.update(polyline, polyline.getId());\n      return;\n    }\n\n    if (!this.editLabelsRenderFn) {\n      return;\n    }\n\n    polyline.labels = this.editLabelsRenderFn(update, polyline.labels);\n    this.polylineLabelsLayer.update(polyline, polyline.getId());\n  }\n\n  removeEditLabels(polyline: EditablePolyline) {\n    polyline.labels = [];\n    this.polylineLabelsLayer.remove(polyline.getId());\n  }\n\n  handleCreateUpdates(update: PolylineEditUpdate) {\n    switch (update.editAction) {\n      case EditActions.INIT: {\n        this.polylinesManager.createEditablePolyline(\n          update.id,\n          this.editPointsLayer,\n          this.editPolylinesLayer,\n          this.coordinateConverter,\n          update.polylineOptions,\n        );\n        break;\n      }\n      case EditActions.MOUSE_MOVE: {\n        const polyline = this.polylinesManager.get(update.id);\n        if (update.updatedPosition) {\n          polyline.moveTempMovingPoint(update.updatedPosition);\n          this.renderEditLabels(polyline, update);\n        }\n        break;\n      }\n      case EditActions.ADD_POINT: {\n        const polyline = this.polylinesManager.get(update.id);\n        if (update.updatedPosition) {\n          polyline.moveTempMovingPoint(update.updatedPosition);\n          polyline.addPoint(update.updatedPosition);\n          this.renderEditLabels(polyline, update);\n        }\n        break;\n      }\n      case EditActions.ADD_LAST_POINT: {\n        const polyline = this.polylinesManager.get(update.id);\n        if (update.updatedPosition) {\n          polyline.addLastPoint(update.updatedPosition);\n          this.renderEditLabels(polyline, update);\n        }\n        break;\n      }\n      case EditActions.DISPOSE: {\n        const polyline = this.polylinesManager.get(update.id);\n        if (polyline) {\n          this.removeEditLabels(polyline);\n          polyline.dispose();\n          this.editLabelsRenderFn = undefined;\n        }\n        break;\n      }\n      case EditActions.SET_EDIT_LABELS_RENDER_CALLBACK: {\n        const polyline = this.polylinesManager.get(update.id);\n        this.editLabelsRenderFn = update.labelsRenderFn;\n        this.renderEditLabels(polyline, update);\n        break;\n      }\n      case EditActions.UPDATE_EDIT_LABELS: {\n        const polyline = this.polylinesManager.get(update.id);\n        this.renderEditLabels(polyline, update, update.updateLabels);\n        break;\n      }\n      case EditActions.SET_MANUALLY: {\n        const polyline = this.polylinesManager.get(update.id);\n        this.renderEditLabels(polyline, update, update.updateLabels);\n        break;\n      }\n      default: {\n        return;\n      }\n    }\n  }\n\n  handleEditUpdates(update: PolylineEditUpdate) {\n    switch (update.editAction) {\n      case EditActions.INIT: {\n        this.polylinesManager.createEditablePolyline(\n          update.id,\n          this.editPointsLayer,\n          this.editPolylinesLayer,\n          this.coordinateConverter,\n          update.polylineOptions,\n          update.positions,\n        );\n        break;\n      }\n      case EditActions.DRAG_POINT: {\n        const polyline = this.polylinesManager.get(update.id);\n        if (polyline && polyline.enableEdit) {\n          polyline.movePoint(update.updatedPosition, update.updatedPoint);\n          this.renderEditLabels(polyline, update);\n        }\n        break;\n      }\n      case EditActions.DRAG_POINT_FINISH: {\n        const polyline = this.polylinesManager.get(update.id);\n        if (polyline && polyline.enableEdit) {\n          polyline.movePointFinish(update.updatedPoint);\n\n          if (update.updatedPoint.isVirtualEditPoint()) {\n            polyline.changeVirtualPointToRealPoint(update.updatedPoint);\n            this.renderEditLabels(polyline, update);\n          }\n        }\n        break;\n      }\n      case EditActions.REMOVE_POINT: {\n        const polyline = this.polylinesManager.get(update.id);\n        if (polyline && polyline.enableEdit) {\n          polyline.removePoint(update.updatedPoint);\n          this.renderEditLabels(polyline, update);\n        }\n        break;\n      }\n      case EditActions.DISABLE: {\n        const polyline = this.polylinesManager.get(update.id);\n        if (polyline) {\n          polyline.enableEdit = false;\n          this.renderEditLabels(polyline, update);\n        }\n        break;\n      }\n      case EditActions.ENABLE: {\n        const polyline = this.polylinesManager.get(update.id);\n        if (polyline) {\n          polyline.enableEdit = true;\n          this.renderEditLabels(polyline, update);\n        }\n        break;\n      }\n      case EditActions.DRAG_SHAPE: {\n        const polyline = this.polylinesManager.get(update.id);\n        if (polyline && polyline.enableEdit) {\n          polyline.moveShape(update.draggedPosition, update.updatedPosition);\n          this.renderEditLabels(polyline, update);\n        }\n        break;\n      }\n\n      case EditActions.DRAG_SHAPE_FINISH: {\n        const polyline = this.polylinesManager.get(update.id);\n        if (polyline && polyline.enableEdit) {\n          polyline.endMoveShape();\n          this.renderEditLabels(polyline, update);\n        }\n        break;\n      }\n      default: {\n        return;\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.polylinesManager.clear();\n  }\n\n  getPointSize(point: EditPoint) {\n    return point.isVirtualEditPoint() ? point.props.virtualPointPixelSize : point.props.pixelSize;\n  }\n\n  getPointShow(point: EditPoint) {\n    return point.show && (point.isVirtualEditPoint() ? point.props.showVirtual : point.props.show);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Cartesian3 } from 'cesium';\nimport { EditableHippodrome } from '../../../models/editable-hippodrome';\nimport { HippodromeEditOptions } from '../../../models/hippodrome-edit-options';\nimport { AcLayerComponent } from '../../../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { CoordinateConverter } from '../../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\n\n@Injectable()\nexport class HippodromeManagerService {\n  hippodromes: Map<string, EditableHippodrome> = new Map<string, EditableHippodrome>();\n\n  createEditableHippodrome(id: string, editHippodromeLayer: AcLayerComponent, editPointsLayer: AcLayerComponent,\n                           coordinateConverter: CoordinateConverter, hippodromeEditOptions?: HippodromeEditOptions,\n                           positions?: Cartesian3[]) {\n    const editableHippodrome = new EditableHippodrome(\n      id,\n      editHippodromeLayer,\n      editPointsLayer,\n      coordinateConverter,\n      hippodromeEditOptions,\n      positions);\n    this.hippodromes.set(id, editableHippodrome);\n  }\n\n  get(id: string): EditableHippodrome {\n    return this.hippodromes.get(id);\n  }\n\n  clear() {\n    this.hippodromes.forEach(hippodrome => hippodrome.dispose());\n    this.hippodromes.clear();\n  }\n}\n","import { publish, tap } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { Color, ClassificationType, ShadowMode, Cartesian3 } from 'cesium';\nimport { MapEventsManagerService } from '../../../../angular-cesium/services/map-events-mananger/map-events-manager';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { CesiumEvent } from '../../../../angular-cesium/services/map-events-mananger/consts/cesium-event.enum';\nimport { PickOptions } from '../../../../angular-cesium/services/map-events-mananger/consts/pickOptions.enum';\nimport { EditModes } from '../../../models/edit-mode.enum';\nimport { EditActions } from '../../../models/edit-actions.enum';\nimport { DisposableObservable } from '../../../../angular-cesium/services/map-events-mananger/disposable-observable';\nimport { CoordinateConverter } from '../../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { EditPoint } from '../../../models/edit-point';\nimport { CameraService } from '../../../../angular-cesium/services/camera/camera.service';\n//import { Cartesian3 } from '../../../../angular-cesium/models/cartesian3';\nimport { HippodromeEditOptions } from '../../../models/hippodrome-edit-options';\nimport { HippodromeManagerService } from './hippodrome-manager.service';\nimport { HippodromeEditorObservable } from '../../../models/hippodrome-editor-oboservable';\nimport { HippodromeEditUpdate } from '../../../models/hippodrome-edit-update';\nimport { EditableHippodrome } from '../../../models/editable-hippodrome';\nimport { PointProps } from '../../../models/point-edit-options';\nimport { LabelProps } from '../../../models/label-props';\nimport { generateKey } from '../../utils';\n\nexport const DEFAULT_HIPPODROME_OPTIONS: HippodromeEditOptions = {\n  addPointEvent: CesiumEvent.LEFT_CLICK,\n  dragPointEvent: CesiumEvent.LEFT_CLICK_DRAG,\n  dragShapeEvent: CesiumEvent.LEFT_CLICK_DRAG,\n  allowDrag: true,\n  hippodromeProps: {\n    fill: true,\n    material: Color.CORNFLOWERBLUE.withAlpha(0.4),\n    outline: true,\n    width: 200000.0,\n    outlineWidth: 1,\n    outlineColor: Color.WHITE.withAlpha(0.8),\n    classificationType: ClassificationType.BOTH,\n    zIndex: 0,\n    shadows: ShadowMode.DISABLED,\n  },\n  pointProps: {\n    color: Color.WHITE,\n    outlineColor: Color.BLACK.withAlpha(0.2),\n    outlineWidth: 1,\n    pixelSize: 13,\n    virtualPointPixelSize: 8,\n    show: true,\n    showVirtual: true,\n    disableDepthTestDistance: Number.POSITIVE_INFINITY,\n  },\n};\n\n/**\n * Service for creating editable hippodromes\n *\n * You must provide `HippodromeEditorService` yourself.\n * HippodromeEditorService works together with `<hippodromes-editor>` component. Therefor you need to create `<hippodromes-editor>`\n * for each `PolylineEditorService`, And of course somewhere under `<ac-map>`/\n *\n * + `create` for starting a creation of the shape over the map. Returns a extension of `HippodromeEditorObservable`.\n * + `edit` for editing shape over the map starting from a given positions. Returns an extension of `HippodromeEditorObservable`.\n * + To stop editing call `dsipose()` from the `HippodromeEditorObservable` you get back from `create()` \\ `edit()`.\n *\n * **Labels over editted shapes**\n * Angular Cesium allows you to draw labels over a shape that is being edited with one of the editors.\n * To add label drawing logic to your editor use the function `setLabelsRenderFn()` that is defined on the\n * `HippodromeEditorObservable` that is returned from calling `create()` \\ `edit()` of one of the editor services.\n * `setLabelsRenderFn()` - receives a callback that is called every time the shape is redrawn\n * (except when the shape is being dragged). The callback is called with the last shape state and with an array of the current labels.\n * The callback should return type `LabelProps[]`.\n * You can also use `updateLabels()` to pass an array of labels of type `LabelProps[]` to be drawn.\n *\n *\n * usage:\n * ```typescript\n *  // Start creating hippodrome\n *  const editing$ = hippodromeEditorService.create();\n *  this.editing$.subscribe(editResult => {\n *\t\t\t\tconsole.log(editResult.positions);\n *\t\t});\n *\n *  // Or edit hippodromes from existing hippodromes cartesian3 positions\n *  const editing$ = this.hippodromeEditor.edit(initialPos);\n *\n * ```\n */\n@Injectable()\nexport class HippodromeEditorService {\n  private mapEventsManager: MapEventsManagerService;\n  private updateSubject = new Subject<HippodromeEditUpdate>();\n  private updatePublisher = publish<HippodromeEditUpdate>()(this.updateSubject); // TODO maybe not needed\n  private coordinateConverter: CoordinateConverter;\n  private cameraService: CameraService;\n  private hippodromeManager: HippodromeManagerService;\n  private observablesMap = new Map<string, DisposableObservable<any>[]>();\n\n  init(mapEventsManager: MapEventsManagerService,\n       coordinateConverter: CoordinateConverter,\n       cameraService: CameraService,\n       managerService: HippodromeManagerService) {\n    this.mapEventsManager = mapEventsManager;\n    this.coordinateConverter = coordinateConverter;\n    this.cameraService = cameraService;\n    this.hippodromeManager = managerService;\n    this.updatePublisher.connect();\n  }\n\n  onUpdate(): Observable<HippodromeEditUpdate> {\n    return this.updatePublisher;\n  }\n\n  create(options = DEFAULT_HIPPODROME_OPTIONS, eventPriority = 100): HippodromeEditorObservable {\n    const positions: Cartesian3[] = [];\n    const id = generateKey();\n    const hippodromeOptions = this.setOptions(options);\n\n    const clientEditSubject = new BehaviorSubject<HippodromeEditUpdate>({\n      id,\n      editAction: null,\n      editMode: EditModes.CREATE\n    });\n    let finishedCreate = false;\n\n    this.updateSubject.next({\n      id,\n      positions,\n      editMode: EditModes.CREATE,\n      editAction: EditActions.INIT,\n      hippodromeOptions: hippodromeOptions,\n    });\n\n    const finishCreation = () => {\n      const changeMode = {\n        id,\n        editMode: EditModes.CREATE,\n        editAction: EditActions.CHANGE_TO_EDIT,\n      };\n      this.updateSubject.next(changeMode);\n      clientEditSubject.next(changeMode);\n      if (this.observablesMap.has(id)) {\n        this.observablesMap.get(id).forEach(registration => registration.dispose());\n      }\n      this.observablesMap.delete(id);\n      this.editHippodrome(id, eventPriority, clientEditSubject, hippodromeOptions, editorObservable);\n      finishedCreate = true;\n      return finishedCreate;\n    };\n\n    const mouseMoveRegistration = this.mapEventsManager.register({\n      event: CesiumEvent.MOUSE_MOVE,\n      pickConfig: options.pickConfiguration,\n      pick: PickOptions.NO_PICK,\n      priority: eventPriority,\n    });\n    const addPointRegistration = this.mapEventsManager.register({\n      event: hippodromeOptions.addPointEvent,\n      pickConfig: options.pickConfiguration,\n      pick: PickOptions.NO_PICK,\n      priority: eventPriority,\n    });\n\n    this.observablesMap.set(id, [mouseMoveRegistration, addPointRegistration]);\n    const editorObservable = this.createEditorObservable(clientEditSubject, id, finishCreation);\n\n    mouseMoveRegistration.subscribe(({movement: {endPosition}}) => {\n      const position = this.coordinateConverter.screenToCartesian3(endPosition);\n\n      if (position) {\n        this.updateSubject.next({\n          id,\n          positions: this.getPositions(id),\n          editMode: EditModes.CREATE,\n          updatedPosition: position,\n          editAction: EditActions.MOUSE_MOVE,\n        });\n      }\n    });\n\n    addPointRegistration.subscribe(({movement: {endPosition}}) => {\n      if (finishedCreate) {\n        return;\n      }\n      const position = this.coordinateConverter.screenToCartesian3(endPosition);\n      if (!position) {\n        return;\n      }\n\n      const allPositions = this.getPositions(id);\n      const isFirstPoint = this.getPositions(id).length === 0;\n\n      const updateValue = {\n        id,\n        positions: allPositions,\n        editMode: EditModes.CREATE,\n        updatedPosition: position,\n        editAction: EditActions.ADD_POINT,\n      };\n      this.updateSubject.next(updateValue);\n      clientEditSubject.next({\n        ...updateValue,\n        positions: this.getPositions(id),\n        points: this.getPoints(id),\n        width: this.getWidth(id),\n      });\n\n      if (!isFirstPoint) {\n        finishedCreate = finishCreation();\n      }\n    });\n\n    return editorObservable;\n  }\n\n  edit(positions: Cartesian3[], options = DEFAULT_HIPPODROME_OPTIONS, priority = 100): HippodromeEditorObservable {\n    if (positions.length !== 2) {\n      throw new Error('Hippodrome editor error edit(): polygon should have 2 positions but received ' + positions);\n    }\n    const id = generateKey();\n    const hippodromeEditOptions = this.setOptions(options);\n    const editSubject = new BehaviorSubject<HippodromeEditUpdate>({\n      id,\n      editAction: null,\n      editMode: EditModes.EDIT\n    });\n    const update = {\n      id,\n      positions: positions,\n      editMode: EditModes.EDIT,\n      editAction: EditActions.INIT,\n      hippodromeOptions: hippodromeEditOptions,\n    };\n    this.updateSubject.next(update);\n    editSubject.next({\n      ...update,\n      positions: this.getPositions(id),\n      points: this.getPoints(id),\n      width: this.getWidth(id),\n    });\n    return this.editHippodrome(\n      id,\n      priority,\n      editSubject,\n      hippodromeEditOptions\n    );\n  }\n\n  private editHippodrome(id: string,\n                         priority: number,\n                         editSubject: Subject<HippodromeEditUpdate>,\n                         options: HippodromeEditOptions,\n                         editObservable?: HippodromeEditorObservable): HippodromeEditorObservable {\n    let shapeDragRegistration;\n    if (options.allowDrag) {\n      shapeDragRegistration = this.mapEventsManager.register({\n        event: options.dragShapeEvent,\n        entityType: EditableHippodrome,\n        pick: PickOptions.PICK_FIRST,\n        pickConfig: options.pickConfiguration,\n        priority,\n        pickFilter: entity => id === entity.id,\n      });\n    }\n    const pointDragRegistration = this.mapEventsManager.register({\n      event: options.dragPointEvent,\n      entityType: EditPoint,\n      pick: PickOptions.PICK_FIRST,\n      pickConfig: options.pickConfiguration,\n      priority,\n      pickFilter: entity => id === entity.editedEntityId,\n    });\n\n    pointDragRegistration.pipe(\n      tap(({movement: {drop}}) => this.hippodromeManager.get(id).enableEdit && this.cameraService.enableInputs(drop)))\n      .subscribe(({movement: {endPosition, drop}, entities}) => {\n        const position = this.coordinateConverter.screenToCartesian3(endPosition);\n        if (!position) {\n          return;\n        }\n        const point: EditPoint = entities[0];\n\n        const update = {\n          id,\n          positions: this.getPositions(id),\n          editMode: EditModes.EDIT,\n          updatedPosition: position,\n          updatedPoint: point,\n          editAction: drop ? EditActions.DRAG_POINT_FINISH : EditActions.DRAG_POINT,\n        };\n        this.updateSubject.next(update);\n        editSubject.next({\n          ...update,\n          positions: this.getPositions(id),\n          points: this.getPoints(id),\n          width: this.getWidth(id),\n        });\n      });\n\n    if (shapeDragRegistration) {\n      shapeDragRegistration\n        .pipe(tap(({movement: {drop}}) => this.hippodromeManager.get(id).enableEdit && this.cameraService.enableInputs(drop)))\n        .subscribe(({movement: {startPosition, endPosition, drop}, entities}) => {\n          const endDragPosition = this.coordinateConverter.screenToCartesian3(endPosition);\n          const startDragPosition = this.coordinateConverter.screenToCartesian3(startPosition);\n          if (!endDragPosition) {\n            return;\n          }\n\n          const update = {\n            id,\n            positions: this.getPositions(id),\n            editMode: EditModes.EDIT,\n            updatedPosition: endDragPosition,\n            draggedPosition: startDragPosition,\n            editAction: drop ? EditActions.DRAG_SHAPE_FINISH : EditActions.DRAG_SHAPE,\n          };\n          this.updateSubject.next(update);\n          editSubject.next({\n            ...update,\n            positions: this.getPositions(id),\n            points: this.getPoints(id),\n            width: this.getWidth(id),\n          });\n        });\n    }\n\n    const observables = [pointDragRegistration];\n    if (shapeDragRegistration) {\n      observables.push(shapeDragRegistration);\n    }\n\n    this.observablesMap.set(id, observables);\n    return this.createEditorObservable(editSubject, id);\n  }\n\n  private setOptions(options: HippodromeEditOptions): HippodromeEditOptions {\n    const defaultClone = JSON.parse(JSON.stringify(DEFAULT_HIPPODROME_OPTIONS));\n    const hippodromeOptions = Object.assign(defaultClone, options);\n    hippodromeOptions.hippodromeProps = Object.assign({}, DEFAULT_HIPPODROME_OPTIONS.hippodromeProps, options.hippodromeProps);\n    hippodromeOptions.pointProps = Object.assign({}, DEFAULT_HIPPODROME_OPTIONS.pointProps, options.pointProps);\n    return hippodromeOptions;\n  }\n\n\n  private createEditorObservable(observableToExtend: any, id: string, finishCreation?: () => boolean): HippodromeEditorObservable {\n    observableToExtend.dispose = () => {\n      const observables = this.observablesMap.get(id);\n      if (observables) {\n        observables.forEach(obs => obs.dispose());\n      }\n      this.observablesMap.delete(id);\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.DISPOSE,\n      });\n    };\n\n    observableToExtend.enable = () => {\n      this.updateSubject.next({\n        id,\n        positions: this.getPositions(id),\n        editMode: EditModes.EDIT,\n        editAction: EditActions.ENABLE,\n      });\n    };\n\n    observableToExtend.disable = () => {\n      this.updateSubject.next({\n        id,\n        positions: this.getPositions(id),\n        editMode: EditModes.EDIT,\n        editAction: EditActions.DISABLE,\n      });\n    };\n\n    observableToExtend.setManually = (firstPosition: Cartesian3,\n                                      secondPosition: Cartesian3,\n                                      widthMeters: number,\n                                      firstPointProp?: PointProps,\n                                      secondPointProp?: PointProps) => {\n      const firstP = new EditPoint(id, firstPosition, firstPointProp ? firstPointProp : DEFAULT_HIPPODROME_OPTIONS.pointProps);\n      const secP = new EditPoint(id, secondPosition, secondPointProp ? secondPointProp : DEFAULT_HIPPODROME_OPTIONS.pointProps);\n\n      const hippodrome = this.hippodromeManager.get(id);\n      hippodrome.setPointsManually([firstP, secP], widthMeters);\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.SET_MANUALLY,\n      });\n    };\n\n    observableToExtend.setLabelsRenderFn = (callback: any) => {\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.SET_EDIT_LABELS_RENDER_CALLBACK,\n        labelsRenderFn: callback,\n      });\n    };\n\n    observableToExtend.updateLabels = (labels: LabelProps[]) => {\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.UPDATE_EDIT_LABELS,\n        updateLabels: labels,\n      });\n    };\n\n    observableToExtend.finishCreation = () => {\n      if (!finishCreation) {\n        throw new Error('Hippodrome editor error edit(): cannot call finishCreation() on edit');\n      }\n\n      return finishCreation();\n    };\n\n    observableToExtend.getCurrentPoints = () => this.getPoints(id);\n    observableToExtend.getEditValue = () => observableToExtend.getValue();\n    observableToExtend.getLabels = (): LabelProps[] => this.hippodromeManager.get(id).labels;\n    observableToExtend.getCurrentWidth = (): number => this.getWidth(id);\n\n    return observableToExtend as HippodromeEditorObservable;\n  }\n\n  private getPositions(id: any) {\n    const hippodrome = this.hippodromeManager.get(id);\n    return hippodrome.getRealPositions();\n  }\n\n  private getPoints(id: any) {\n    const hippodrome = this.hippodromeManager.get(id);\n    return hippodrome.getRealPoints();\n  }\n\n  private getWidth(id: string) {\n    const hippodrome = this.hippodromeManager.get(id);\n    return hippodrome.getWidth();\n  }\n}\n","import { ChangeDetectionStrategy, Component, OnDestroy, ViewChild } from '@angular/core';\nimport { EditModes } from '../../models/edit-mode.enum';\nimport { AcNotification } from '../../../angular-cesium/models/ac-notification';\nimport { EditActions } from '../../models/edit-actions.enum';\nimport { AcLayerComponent } from '../../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { CoordinateConverter } from '../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { MapEventsManagerService } from '../../../angular-cesium/services/map-events-mananger/map-events-manager';\nimport { Subject } from 'rxjs';\nimport { CameraService } from '../../../angular-cesium/services/camera/camera.service';\nimport { EditPoint } from '../../models/edit-point';\nimport { HippodromeManagerService } from '../../services/entity-editors/hippodrome-editor/hippodrome-manager.service';\nimport { HippodromeEditorService } from '../../services/entity-editors/hippodrome-editor/hippodrome-editor.service';\nimport { HippodromeEditUpdate } from '../../models/hippodrome-edit-update';\nimport { LabelProps } from '../../models/label-props';\nimport { EditableHippodrome } from '../../models/editable-hippodrome';\n\n@Component({\n    selector: 'hippodrome-editor',\n    template: /*html*/ `\n      <ac-layer #editHippodromesLayer acFor=\"let hippodrome of editHippodromes$\" [context]=\"this\">\n          <ac-corridor-desc props=\"{\n            positions: hippodrome.getRealPositionsCallbackProperty(),\n            cornerType: Cesium.CornerType.ROUNDED,\n            material: hippodrome.hippodromeProps.material,\n            width : hippodrome.hippodromeProps.width,\n            outline: hippodrome.hippodromeProps.outline,\n            outlineColor: hippodrome.hippodromeProps.outlineColor,\n            outlineWidth: hippodrome.hippodromeProps.outlineWidth,\n            height: 0,\n            classificationType: hippodrome.hippodromeProps.classificationType,\n            zIndex: hippodrome.hippodromeProps.zIndex,\n            shadows: hippodrome.hippodromeProps.shadows,\n    }\">\n          </ac-corridor-desc>\n\n          <ac-array-desc acFor=\"let label of hippodrome.labels\" [idGetter]=\"getLabelId\">\n              <ac-label-primitive-desc props=\"{\n            position: label.position,\n            backgroundColor: label.backgroundColor,\n            backgroundPadding: label.backgroundPadding,\n            distanceDisplayCondition: label.distanceDisplayCondition,\n            eyeOffset: label.eyeOffset,\n            fillColor: label.fillColor,\n            font: label.font,\n            heightReference: label.heightReference,\n            horizontalOrigin: label.horizontalOrigin,\n            outlineColor: label.outlineColor,\n            outlineWidth: label.outlineWidth,\n            pixelOffset: label.pixelOffset,\n            pixelOffsetScaleByDistance: label.pixelOffsetScaleByDistance,\n            scale: label.scale,\n            scaleByDistance: label.scaleByDistance,\n            show: label.show,\n            showBackground: label.showBackground,\n            style: label.style,\n            text: label.text,\n            translucencyByDistance: label.translucencyByDistance,\n            verticalOrigin: label.verticalOrigin,\n            disableDepthTestDistance: label.disableDepthTestDistance,\n        }\">\n              </ac-label-primitive-desc>\n          </ac-array-desc>\n      </ac-layer>\n\n      <ac-layer #editPointsLayer acFor=\"let point of editPoints$\" [context]=\"this\">\n          <ac-point-desc props=\"{\n         position: point.getPositionCallbackProperty(),\n         pixelSize: getPointSize(point),\n         color: point.props.color,\n         outlineColor: point.props.outlineColor,\n         outlineWidth: point.props.outlineWidth,\n         show: getPointShow(point),\n         disableDepthTestDistance: point.props.disableDepthTestDistance,\n         heightReference: point.props.heightReference,\n    }\">\n          </ac-point-desc>\n      </ac-layer>\n  `,\n    providers: [CoordinateConverter, HippodromeManagerService],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class HippodromeEditorComponent implements OnDestroy {\n  private editLabelsRenderFn: (update: HippodromeEditUpdate, labels: LabelProps[]) => LabelProps[];\n  public editPoints$ = new Subject<AcNotification>();\n  public editHippodromes$ = new Subject<AcNotification>();\n\n  @ViewChild('editPointsLayer') private editPointsLayer: AcLayerComponent;\n  @ViewChild('editHippodromesLayer') private editHippodromesLayer: AcLayerComponent;\n\n  constructor(\n    private hippodromesEditor: HippodromeEditorService,\n    private coordinateConverter: CoordinateConverter,\n    private mapEventsManager: MapEventsManagerService,\n    private cameraService: CameraService,\n    private hippodromesManager: HippodromeManagerService,\n  ) {\n    this.hippodromesEditor.init(this.mapEventsManager, this.coordinateConverter, this.cameraService, hippodromesManager);\n    this.startListeningToEditorUpdates();\n  }\n\n  private startListeningToEditorUpdates() {\n    this.hippodromesEditor.onUpdate().subscribe((update: HippodromeEditUpdate) => {\n      if (update.editMode === EditModes.CREATE || update.editMode === EditModes.CREATE_OR_EDIT) {\n        this.handleCreateUpdates(update);\n      } else if (update.editMode === EditModes.EDIT) {\n        this.handleEditUpdates(update);\n      }\n    });\n  }\n\n  getLabelId(element: any, index: number): string {\n    return index.toString();\n  }\n\n  renderEditLabels(hippodrome: EditableHippodrome, update: HippodromeEditUpdate, labels?: LabelProps[]) {\n    update.positions = hippodrome.getRealPositions();\n    update.points = hippodrome.getRealPoints();\n\n    if (labels) {\n      hippodrome.labels = labels;\n      this.editHippodromesLayer.update(hippodrome, hippodrome.getId());\n      return;\n    }\n\n    if (!this.editLabelsRenderFn) {\n      return;\n    }\n\n    hippodrome.labels = this.editLabelsRenderFn(update, hippodrome.labels);\n    this.editHippodromesLayer.update(hippodrome, hippodrome.getId());\n  }\n\n  removeEditLabels(hippodrome: EditableHippodrome) {\n    hippodrome.labels = [];\n    this.editHippodromesLayer.update(hippodrome, hippodrome.getId());\n  }\n\n  handleCreateUpdates(update: HippodromeEditUpdate) {\n    switch (update.editAction) {\n      case EditActions.INIT: {\n        this.hippodromesManager.createEditableHippodrome(\n          update.id,\n          this.editPointsLayer,\n          this.editHippodromesLayer,\n          this.coordinateConverter,\n          update.hippodromeOptions,\n        );\n        break;\n      }\n      case EditActions.MOUSE_MOVE: {\n        const hippodrome = this.hippodromesManager.get(update.id);\n        if (update.updatedPosition) {\n          hippodrome.moveTempMovingPoint(update.updatedPosition);\n          this.renderEditLabels(hippodrome, update);\n        }\n        break;\n      }\n      case EditActions.ADD_POINT: {\n        const hippodrome = this.hippodromesManager.get(update.id);\n        if (update.updatedPosition) {\n          hippodrome.moveTempMovingPoint(update.updatedPosition);\n          hippodrome.addPoint(update.updatedPosition);\n          this.renderEditLabels(hippodrome, update);\n        }\n        break;\n      }\n      case EditActions.DISPOSE: {\n        const hippodrome = this.hippodromesManager.get(update.id);\n        if (hippodrome) {\n          this.removeEditLabels(hippodrome);\n          hippodrome.dispose();\n        }\n        break;\n      }\n      case EditActions.SET_EDIT_LABELS_RENDER_CALLBACK: {\n        const hippodrome = this.hippodromesManager.get(update.id);\n        this.editLabelsRenderFn = update.labelsRenderFn;\n        this.renderEditLabels(hippodrome, update);\n        break;\n      }\n      case EditActions.UPDATE_EDIT_LABELS: {\n        const hippodrome = this.hippodromesManager.get(update.id);\n        this.renderEditLabels(hippodrome, update, update.updateLabels);\n        break;\n      }\n      case EditActions.SET_MANUALLY: {\n        const hippodrome = this.hippodromesManager.get(update.id);\n        this.renderEditLabels(hippodrome, update, update.updateLabels);\n        break;\n      }\n      default: {\n        return;\n      }\n    }\n  }\n\n  handleEditUpdates(update: HippodromeEditUpdate) {\n    switch (update.editAction) {\n      case EditActions.INIT: {\n        this.hippodromesManager.createEditableHippodrome(\n          update.id,\n          this.editPointsLayer,\n          this.editHippodromesLayer,\n          this.coordinateConverter,\n          update.hippodromeOptions,\n          update.positions,\n        );\n        break;\n      }\n      case EditActions.DRAG_POINT: {\n        const hippodrome = this.hippodromesManager.get(update.id);\n        if (hippodrome && hippodrome.enableEdit) {\n          hippodrome.movePoint(update.updatedPosition, update.updatedPoint);\n          this.renderEditLabels(hippodrome, update);\n        }\n        break;\n      }\n      case EditActions.DRAG_POINT_FINISH: {\n        const hippodrome = this.hippodromesManager.get(update.id);\n        if (hippodrome && hippodrome.enableEdit) {\n          hippodrome.endMovePoint();\n          this.renderEditLabels(hippodrome, update);\n        }\n        break;\n      }\n      case EditActions.DISABLE: {\n        const hippodrome = this.hippodromesManager.get(update.id);\n        if (hippodrome) {\n          hippodrome.enableEdit = false;\n          this.renderEditLabels(hippodrome, update);\n        }\n        break;\n      }\n      case EditActions.ENABLE: {\n        const hippodrome = this.hippodromesManager.get(update.id);\n        if (hippodrome) {\n          hippodrome.enableEdit = true;\n          this.renderEditLabels(hippodrome, update);\n        }\n        break;\n      }\n      case EditActions.DRAG_SHAPE: {\n        const hippodrome = this.hippodromesManager.get(update.id);\n        if (hippodrome && hippodrome.enableEdit) {\n          hippodrome.moveShape(update.draggedPosition, update.updatedPosition);\n          this.renderEditLabels(hippodrome, update);\n        }\n        break;\n      }\n\n      case EditActions.DRAG_SHAPE_FINISH: {\n        const hippodrome = this.hippodromesManager.get(update.id);\n        if (hippodrome && hippodrome.enableEdit) {\n          hippodrome.endMoveShape();\n          this.renderEditLabels(hippodrome, update);\n        }\n        break;\n      }\n      default: {\n        return;\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.hippodromesManager.clear();\n  }\n\n  getPointSize(point: EditPoint) {\n    return point.isVirtualEditPoint() ? point.props.virtualPointPixelSize : point.props.pixelSize;\n  }\n\n  getPointShow(point: EditPoint) {\n    return point.show && (point.isVirtualEditPoint() ? point.props.showVirtual : point.props.show);\n  }\n}\n","import { fromEvent as observableFromEvent, Observable, Subject } from 'rxjs';\n\nimport { map, merge, takeUntil, tap } from 'rxjs/operators';\nimport { Inject, Injectable, DOCUMENT } from '@angular/core';\n\nimport { Cartesian3 } from 'cesium';\nimport { Vec2 } from '../../angular-cesium/models/vec2';\nimport { CoordinateConverter } from '../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { MapsManagerService } from '../../angular-cesium/services/maps-manager/maps-manager.service';\n\nexport interface IconDragEvent {\n  initialScreenPosition: Vec2;\n  screenPosition: Vec2;\n  mapPosition: Cartesian3;\n  drop: boolean;\n}\n\n/**\n * The Service is used to preform, handle and subscribe to icon dragging when using the `DraggableToMapDirective`.\n * For more info check `DraggableToMapDirective` docs.\n */\n\n@Injectable()\nexport class DraggableToMapService {\n\n  private coordinateConverter: CoordinateConverter;\n  private dragObservable: Observable<IconDragEvent>;\n  private stopper: Subject<any>;\n  private mainSubject = new Subject<IconDragEvent>();\n\n  constructor(@Inject(DOCUMENT) private document: any, private mapsManager: MapsManagerService) {\n  }\n\n  setCoordinateConverter(coordinateConverter: CoordinateConverter) {\n    this.coordinateConverter = coordinateConverter;\n  }\n\n  drag(imageSrc: string, style?: any) {\n    if (!this.coordinateConverter) {\n      const mapComponent = this.mapsManager.getMap();\n      if (mapComponent) {\n        this.coordinateConverter = mapComponent.getCoordinateConverter();\n      }\n    }\n    this.cancel();\n    const imgElement = document.createElement('img');\n    imgElement.src = imageSrc;\n    imgElement.style.position = 'fixed';\n    imgElement.style.visibility = 'hidden';\n    imgElement.style.width = '30px';\n    imgElement.style.height = '30px';\n    imgElement.style['user-drag'] = 'none';\n    imgElement.style['user-select'] = 'none';\n    imgElement.style['-moz-user-select'] = 'none';\n    imgElement.style['-webkit-user-drag'] = 'none';\n    imgElement.style['-webkit-user-select'] = 'none';\n    imgElement.style['-ms-user-select'] = 'none';\n    Object.assign(imgElement.style, style);\n    document.body.appendChild(imgElement);\n\n    this.createDragObservable();\n    this.dragObservable.subscribe(\n      (e) => {\n        imgElement.style.visibility = 'visible';\n        imgElement.style.left = e.screenPosition.x - imgElement.clientWidth / 2 + 'px';\n        imgElement.style.top = e.screenPosition.y - imgElement.clientHeight / 2 + 'px';\n        this.mainSubject.next(e);\n        if (e.drop) {\n          imgElement.remove();\n        }\n      },\n      (e: any) => {\n        imgElement.remove();\n      },\n      () => {\n        imgElement.remove();\n      }\n    );\n  }\n\n  dragUpdates(): Observable<IconDragEvent> {\n    return this.mainSubject;\n  }\n\n  cancel() {\n    if (this.stopper) {\n      this.stopper.next(true);\n      this.stopper = undefined;\n      this.dragObservable = undefined;\n    }\n  }\n\n  private createDragObservable() {\n    const stopper = new Subject();\n    const dropSubject = new Subject<any>();\n    const pointerUp = observableFromEvent(document, 'pointerup');\n    const pointerMove = observableFromEvent(document, 'pointermove');\n\n    let dragStartPositionX: number;\n    let dragStartPositionY: number;\n    let lastMove: any;\n    const moveObservable = pointerMove.pipe(map((e: any) => {\n        dragStartPositionX = dragStartPositionX ? dragStartPositionX : e.x;\n        dragStartPositionY = dragStartPositionY ? dragStartPositionY : e.y;\n        lastMove = {\n          drop: false,\n          initialScreenPosition: {\n            x: dragStartPositionX,\n            y: dragStartPositionY,\n          },\n          screenPosition: {\n            x: e.x,\n            y: e.y,\n          },\n          mapPosition: this.coordinateConverter ?\n            this.coordinateConverter.screenToCartesian3({x: e.x, y: e.y}) : undefined,\n        };\n        return lastMove;\n      }),\n      takeUntil(pointerUp),\n      tap(undefined, undefined, () => {\n        if (lastMove) {\n          const dropEvent = Object.assign({}, lastMove);\n          dropEvent.drop = true;\n          dropSubject.next(dropEvent);\n        }\n      }), );\n\n    this.dragObservable = moveObservable.pipe(merge(dropSubject), takeUntil(stopper), );\n    this.stopper = stopper;\n  }\n}\n","import { Directive, ElementRef, HostListener, Input, OnInit } from '@angular/core';\nimport { DraggableToMapService } from '../services/draggable-to-map.service';\n\n/**\n * This directive is used to allow dragging of icons from outside the map over the map\n * while being notified of the dragging position and drop position with an observable exposed from `DraggableToMapService`.\n * @Input {src: string, style?: any} | string -\n * the [src: string | string] should be the image src of the dragged image.\n * The style is an optional style object for the image.\n *\n * example:\n * ```\n * <a href=\"...\" class=\"...\" [draggableToMap]=\"{src: '../assets/GitHub-Mark-Light.png', style: {width: '50px', height: '50px'}}\">\n *     <img class=\"github\" src=\"../assets/GitHub-Mark-Light.png\">\n * </a>\n * ```\n *\n * In order the get notified of the dragging location  and drop state subscribe to `DraggableToMapService.dragUpdates()`\n * ```\n *  this.iconDragService.dragUpdates().subscribe(e => console.log(e));\n * ```\n *\n * In order the cancel dragging use `DraggableToMapService.cancel()`\n * ```\n *  this.iconDragService.cancel();\n * ```\n */\n\n@Directive({\n    selector: '[draggableToMap]',\n    standalone: false\n})\nexport class DraggableToMapDirective implements OnInit {\n  @Input() draggableToMap: { src: string, style?: any } | string;\n  private src: string;\n  private style: any;\n\n  constructor(el: ElementRef, private iconDragService: DraggableToMapService) {\n    el.nativeElement.style['user-drag'] = 'none';\n    el.nativeElement.style['user-select'] = 'none';\n    el.nativeElement.style['-moz-user-select'] = 'none';\n    el.nativeElement.style['-webkit-user-drag'] = 'none';\n    el.nativeElement.style['-webkit-user-select'] = 'none';\n    el.nativeElement.style['-ms-user-select'] = 'none';\n  }\n\n  ngOnInit(): void {\n    if (typeof this.draggableToMap === 'string') {\n      this.src = this.draggableToMap;\n    } else {\n      this.src = this.draggableToMap.src;\n      this.style = this.draggableToMap.style;\n    }\n  }\n\n  @HostListener('mousedown')\n  onMouseDown() {\n    this.iconDragService.drag(this.src, this.style);\n  }\n}\n","import { Component } from '@angular/core';\n\n@Component(\n  {\n    selector: 'ac-drag-icon',\n    template: `\n        <svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\"  x=\"0px\" y=\"0px\"  height=\"25\"  width=\"25\"\n\t viewBox=\"0 0 476.737 476.737\" style=\"enable-background:new 0 0 476.737 476.737;\" xml:space=\"preserve\">\n<g>\n\t<g>\n\t\t<path style=\"fill:#010002;\" d=\"M475.498,232.298l-3.401-5.149l-63.565-63.565c-6.198-6.198-16.304-6.198-22.47,0\n\t\t\tc-6.198,6.198-6.198,16.273,0,22.47l36.423,36.423H254.26V54.253l36.423,36.423c6.166,6.198,16.273,6.198,22.47,0\n\t\t\tc6.166-6.198,6.166-16.273,0-22.47L249.588,4.64l-0.159-0.095l-4.99-3.305L238.369,0h-0.064l-6.007,1.24l-4.99,3.305l-0.191,0.095\n\t\t\tl-63.565,63.565c-6.198,6.198-6.198,16.273,0,22.47s16.273,6.198,22.47,0l36.455-36.423v168.225H54.253l36.423-36.423\n\t\t\tc6.198-6.198,6.198-16.273,0-22.47s-16.273-6.198-22.47,0L4.64,227.149l-0.095,0.159l-3.305,4.99L0,238.369v0.064l1.24,6.007\n\t\t\tl3.305,4.958l0.095,0.191l63.565,63.565c6.198,6.198,16.273,6.198,22.47,0c6.198-6.166,6.198-16.273,0-22.47L54.253,254.26\n\t\t\th168.225v168.225l-36.423-36.423c-6.198-6.166-16.273-6.166-22.47,0c-6.198,6.198-6.198,16.304,0,22.47l63.565,63.565l5.149,3.432\n\t\t\tl6.007,1.208h0.064l6.07-1.24l5.149-3.401l63.565-63.565c6.166-6.198,6.166-16.304,0-22.47c-6.198-6.198-16.304-6.198-22.47,0\n\t\t\tl-36.423,36.423V254.26h168.225l-36.423,36.423c-6.166,6.166-6.166,16.273,0,22.47c6.198,6.166,16.304,6.166,22.47,0\n\t\t\tl63.565-63.565l3.432-5.149l1.208-6.007v-0.064L475.498,232.298z\"/>\n\t</g>\n</g>\n<g>\n</g>\n<g>\n</g>\n<g>\n</g>\n<g>\n</g>\n<g>\n</g>\n<g>\n</g>\n<g>\n</g>\n<g>\n</g>\n<g>\n</g>\n<g>\n</g>\n<g>\n</g>\n<g>\n</g>\n<g>\n</g>\n<g>\n</g>\n<g>\n</g>\n</svg>\n    `,\n    standalone: false\n}\n)\nexport class DragIconComponent {\n  constructor() {\n  }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\n/**\n * Toolbar button widget, act as a single button inside ac-toolbar component\n * Can accepts content components or passing [iconUrl]\n * configure with: `[iconUrl]`,`[buttonClass]`,`[iconClass]`,`(onClick)`\n *\n * Usage:\n * ```\n * <ac-toolbar [allowDrag]=\"true\">\n <ac-toolbar-button [iconUrl]=\"'assets/home-icon.svg'\" (onClick)=\"goHome()\">\n </ac-toolbar-button>\n <ac-toolbar-button [iconUrl]=\"'assets/explore-icon.svg'\" (onClick)=\"rangeAndBearing()\">\n </ac-toolbar-button>\n </ac-toolbar>\n * ```\n *\n */\n@Component(\n  {\n    selector: 'ac-toolbar-button',\n    template: `\n        <div (click)=\"onClick.emit()\" class=\"button-container {{buttonClass}}\">\n            <img *ngIf=\"iconUrl\" [src]=\"iconUrl\" class=\"icon {{iconClass}}\"/>\n            <ng-content></ng-content>\n        </div>\n    `,\n    styles: [`\n        .button-container {\n            border-radius: 1px;\n            background-color: rgba(255, 255, 255, 0.8);\n            height: 30px;\n            width: 30px;\n            padding: 5px;\n            transition: all 0.2s;\n            cursor: pointer;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            flex-direction: column;\n        }\n\n        .button-container:hover {\n            background-color: rgba(255, 255, 255, 0.95);\n        }\n\n        .icon {\n            height: 30px;\n            width: 30px;\n        }\n    `],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n}\n)\nexport class AcToolbarButtonComponent implements OnInit {\n\n  @Input()\n  iconUrl: string;\n\n  @Input()\n  buttonClass: string;\n\n  @Input()\n  iconClass: string;\n\n  @Output()\n  onClick = new EventEmitter();\n\n  constructor() {\n  }\n\n  ngOnInit() {\n\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  Input,\n  OnDestroy,\n  OnInit,\n  OnChanges,\n  SimpleChanges,\n  Output,\n  EventEmitter\n} from '@angular/core';\nimport { fromEvent as observableFromEvent, Subscription, Observable } from 'rxjs';\nimport { switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { CesiumService } from '../../../../angular-cesium/services/cesium/cesium.service';\n\n\n/**\n * Toolbar widget, act as a container for ac-toolbar-button components\n * allowing drag configuration and passing `toolbarClass` as attributes\n *\n * Usage:\n * ```\n * <ac-toolbar [allowDrag]=\"true\" (onDrag)=\"handleDrag($event)\">\n <ac-toolbar-button [iconUrl]=\"'assets/home-icon.svg'\" (onClick)=\"goHome()\">\n </ac-toolbar-button>\n <ac-toolbar-button [iconUrl]=\"'assets/explore-icon.svg'\" (onClick)=\"rangeAndBearing()\">\n </ac-toolbar-button>\n </ac-toolbar>\n * ```\n *\n */\n@Component(\n  {\n    selector: 'ac-toolbar',\n    template: `\n        <div class=\"{{toolbarClass}}\">\n            <div *ngIf=\"allowDrag\">\n                <ac-toolbar-button>\n                    <ac-drag-icon></ac-drag-icon>\n                </ac-toolbar-button>\n            </div>\n\n            <ng-content></ng-content>\n        </div>\n    `,\n    styles: [`\n        :host {\n            position: absolute;\n            top: 20px;\n            left: 20px;\n            width: 20px;\n            height: 20px;\n            z-index: 999;\n            -webkit-user-drag: none;\n        }\n    `],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n}\n)\nexport class AcToolbarComponent implements OnInit, OnChanges, OnDestroy {\n  @Input()\n  toolbarClass: string;\n  @Input()\n  allowDrag = true;\n  @Output()\n  onDrag = new EventEmitter<MouseEvent>();\n\n  dragStyle = {\n    'height.px': 20,\n    'width.px': 20,\n  };\n\n  private mouseDown$: Observable<MouseEvent>;\n  private mouseMove$: Observable<MouseEvent>;\n  private mouseUp$: Observable<MouseEvent>;\n  private drag$: Observable<MouseEvent>;\n  private dragSubscription: Subscription;\n\n  constructor(private element: ElementRef, private cesiumService: CesiumService) {}\n\n  ngOnInit() {\n    this.cesiumService.getMapContainer().appendChild(this.element.nativeElement);\n    if (this.allowDrag) {\n      this.listenForDragging();\n    }\n  }\n\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.allowDrag && changes.allowDrag.currentValue && !changes.allowDrag.previousValue) {\n      this.listenForDragging();\n    }\n\n    if (changes.allowDrag && !changes.allowDrag.currentValue && changes.allowDrag.previousValue) {\n      this.dragSubscription.unsubscribe();\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.dragSubscription) {\n      this.dragSubscription.unsubscribe();\n    }\n  }\n\n  private listenForDragging() {\n    this.mouseDown$ = this.mouseDown$ || observableFromEvent(this.element.nativeElement, 'mousedown');\n    this.mouseMove$ = this.mouseMove$ || observableFromEvent(document, 'mousemove') as Observable<MouseEvent>;\n    this.mouseUp$ = this.mouseUp$ || observableFromEvent(document, 'mouseup') as Observable<MouseEvent>;\n\n    this.drag$ = this.drag$ ||\n                 this.mouseDown$.pipe(\n                    switchMap(() => this.mouseMove$.pipe(\n                      tap(this.onDrag.emit),\n                      takeUntil(this.mouseUp$)\n                    ))\n                 );\n\n    this.dragSubscription = this.drag$.subscribe((event: MouseEvent) => {\n      this.element.nativeElement.style.left = `${event.x}px`;\n      this.element.nativeElement.style.top = `${event.y}px`;\n    });\n  }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { Color, Cartesian2, Cartesian3 } from 'cesium';\nimport { CoordinateConverter } from '../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { EditActions } from '../../models/edit-actions.enum';\nimport { PolylineEditorObservable } from '../../models/polyline-editor-observable';\nimport { PolylineEditOptions } from '../../models/polyline-edit-options';\nimport { LabelProps, LabelStyle } from '../../models/label-props';\nimport { PolylineEditUpdate } from '../../models/polyline-edit-update';\nimport { EditModes } from '../../models/edit-mode.enum';\nimport { PolylinesEditorService } from '../../services/entity-editors/polyline-editor/polylines-editor.service';\n\n/**\n *\n * Range and bearing component that is used to draw range and bearing on the map.\n * The inputs are used to customize the range and bearing style and behavior.\n * Create component reference and use the `create()` function to start creating R&B on the map.\n * The function receives an optional RangeAndBearingOptions object that defines the created range and bearing style and behavior\n * (on top of the default and global definitions).\n *\n * Usage:\n *\n * my-component.ts:\n *\n * ```\n * \\@ViewChild('rangeAndBearing', {static: false}) private rangeAndBearing: RangeAndBearingComponent; // Get R&B reference\n *  // ...\n * this.rangeAndBearing.create({style: { pointProps: { pixelSize: 12 } }, bearingLabelsStyle: { fillColor: Color.GREEN } });\n * ```\n *\n * my-component.html\n * ```\n * <range-and-bearing #rangeAndBearing></range-and-bearing> // Optional inputs defines global style and behavior.\n * ```\n *\n */\n@Component({\n    selector: 'range-and-bearing',\n    template: `\n    <polylines-editor></polylines-editor>\n  `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [PolylinesEditorService],\n    standalone: false\n})\nexport class RangeAndBearingComponent {\n  @Input() lineEditOptions?: PolylineEditOptions = {};\n  @Input() labelsStyle?: LabelStyle = {};\n  @Input() distanceLabelsStyle?: LabelStyle = {};\n  @Input() bearingLabelsStyle?: LabelStyle = {};\n  @Input() bearingStringFn?: (value: number) => string;\n  @Input() distanceStringFn?: (value: number) => string;\n  @Input() labelsRenderFn?: (update: PolylineEditUpdate, labels: LabelProps[]) => LabelProps[];\n\n  constructor(private polylineEditor: PolylinesEditorService, private coordinateConverter: CoordinateConverter) {\n  }\n\n  create(\n    {\n      lineEditOptions = {},\n      labelsStyle = {},\n      distanceLabelsStyle = {},\n      bearingLabelsStyle = {},\n      bearingStringFn,\n      distanceStringFn,\n      labelsRenderFn,\n    }: RangeAndBearingOptions = {lineEditOptions: {}, labelsStyle: {}, distanceLabelsStyle: {}, bearingLabelsStyle: {}},\n  ): PolylineEditorObservable {\n    const rnb = this.polylineEditor.create({\n      allowDrag: false,\n      pointProps: {\n        showVirtual: false,\n        pixelSize: 8,\n      },\n      polylineProps: {\n        width: 2,\n      },\n      ...this.lineEditOptions,\n      ...lineEditOptions,\n    });\n\n    if (labelsRenderFn) {\n      rnb.setLabelsRenderFn(labelsRenderFn);\n    } else if (this.labelsRenderFn) {\n      rnb.setLabelsRenderFn(this.labelsRenderFn);\n    } else {\n      rnb.setLabelsRenderFn(update => {\n        const positions = update.positions;\n        let totalDistance = 0;\n        if (!positions || positions.length === 0) {\n          return [];\n        }\n        return (update.editMode === EditModes.CREATE && update.editAction !== EditActions.ADD_LAST_POINT\n            ? [...positions, update.updatedPosition]\n            : positions\n        ).reduce(\n          (labels, position, index, array) => {\n            if (index !== 0) {\n              const previousPosition = array[index - 1];\n              const bearing = this.coordinateConverter.bearingToCartesian(previousPosition, position);\n              const distance = Cartesian3.distance(previousPosition, position) / 1000;\n              labels.push(\n                {\n                  text:\n                    (bearingStringFn && bearingStringFn(bearing)) ||\n                    (this.bearingStringFn && this.bearingStringFn(bearing)) ||\n                    `${bearing.toFixed(2)}°`,\n                  scale: 0.2,\n                  font: '80px Helvetica',\n                  pixelOffset: new Cartesian2(-20, -8),\n                  position: new Cartesian3(\n                    (position.x + previousPosition.x) / 2,\n                    (position.y + previousPosition.y) / 2,\n                    (position.z + previousPosition.z) / 2,\n                  ),\n                  fillColor: Color.WHITE,\n                  outlineColor: Color.WHITE,\n                  showBackground: true,\n                  ...(this.labelsStyle as any),\n                  ...(labelsStyle as any),\n                  ...(this.bearingLabelsStyle as any),\n                  ...(bearingLabelsStyle as any),\n                },\n                {\n                  text:\n                    (distanceStringFn && distanceStringFn(totalDistance + distance)) ||\n                    (this.distanceStringFn && this.distanceStringFn(totalDistance + distance)) ||\n                    `${(totalDistance + distance).toFixed(2)} Km`,\n                  scale: 0.2,\n                  font: '80px Helvetica',\n                  pixelOffset: new Cartesian2(-35, -8),\n                  position: position,\n                  fillColor: Color.WHITE,\n                  outlineColor: Color.WHITE,\n                  showBackground: true,\n                  ...(this.labelsStyle as any),\n                  ...(labelsStyle as any),\n                  ...(this.distanceLabelsStyle as any),\n                  ...(distanceLabelsStyle as any),\n                },\n              );\n\n              totalDistance += distance;\n            }\n\n            return labels;\n          },\n          [\n            {\n              text: (distanceStringFn && distanceStringFn(0)) || (this.distanceStringFn && this.distanceStringFn(0)) || `0 Km`,\n              scale: 0.2,\n              font: '80px Helvetica',\n              pixelOffset: new Cartesian2(-20, -8),\n              position: positions[0],\n              fillColor: Color.WHITE,\n              outlineColor: Color.WHITE,\n              showBackground: true,\n              ...(this.labelsStyle as any),\n              ...(labelsStyle as any),\n              ...(this.distanceLabelsStyle as any),\n              ...(distanceLabelsStyle as any),\n            },\n          ],\n        );\n      });\n    }\n\n    return rnb;\n  }\n}\n\nexport interface RangeAndBearingOptions {\n  lineEditOptions?: PolylineEditOptions;\n  labelsStyle?: LabelStyle;\n  distanceLabelsStyle?: LabelStyle;\n  bearingLabelsStyle?: LabelStyle;\n  bearingStringFn?: (value: number) => string;\n  distanceStringFn?: (value: number) => string;\n  labelsRenderFn?: (update: PolylineEditUpdate, labels: LabelProps[]) => LabelProps[];\n}\n","import { Injectable, Optional } from '@angular/core';\nimport { Cartographic, Rectangle } from 'cesium';\nimport { MapsManagerService } from '../../angular-cesium/services/maps-manager/maps-manager.service';\nimport { CameraService } from '../../angular-cesium/services/camera/camera.service';\nimport { CesiumService } from '../../angular-cesium/services/cesium/cesium.service';\nimport { AcMapComponent } from '../../angular-cesium/components/ac-map/ac-map.component';\n\ninterface ZoomData {\n  container: HTMLElement;\n  borderElement?: HTMLElement;\n  resetOnEscapePressFunc?: EventListenerOrEventListenerObject;\n}\n\n/**\n * The Service is as a \"zoom to rectangle\" tool\n *\n * example:\n * ```\n * constructor(\n *   private cameraService: CameraService,\n *   private cesiumService: CesiumService,\n *   private zoomToRectangleService: ZoomToRectangleService,\n * ) {\n *   this.zoomToRectangleService.init(cesiumService, cameraService);\n * }\n * ...\n * this.zoomToRectangleService.activate({onComplete: () => this.zoomToRectangleService.disable()});\n * ```\n *\n * `init()` - initialize the service with CameraService and CesiumService.\n * If no mapId is provided to activate() - must be called before calling `activate()`.\n *\n * `disable()` - disables the tool.\n *\n * `activate()` -\n * @param options\n * {\n *  onStart - optional - a callback that will be called when the user start drawing the rectangle\n *  onComplete - optional - a callback that will be called when the tool zoom in\n *  autoDisableOnZoom - optional - determines if the tool should auto disable after zoom - default: true\n *  animationDurationInSeconds - optional - zoom animation duration in seconds - default: 0.5\n *  borderStyle - optional - the style of the rectangle element border - default: '3px dashed #FFFFFF'\n *  backgroundColor - optional - the background color of the rectangle element - default: 'transparent'\n *  resetKeyCode - optional - the key code of the key that is used to reset the drawing of the rectangle - default: 27 (ESC key)\n *  threshold - optional - the minimum area of the screen rectangle (in pixels) that is required to perform zoom - default: 9\n *  keepRotation - optional - whether or not to keep the rotation when zooming in - default: true\n *  mouseButton - optional - sets the mouse button for drawing the rectangle - default: left mouse button (0)\n * }\n * @param mapId - optional - the mapId of the map that the tool will be used in.\n *\n */\n\nexport enum MouseButtons {\n  LEFT = 0,\n  MIDDLE = 1,\n  RIGHT = 2,\n}\n\n@Injectable()\nexport class ZoomToRectangleService {\n  constructor(\n    private mapsManager: MapsManagerService,\n    @Optional() cameraService: CameraService,\n    @Optional() cesiumService: CesiumService,\n  ) {}\n\n  private cameraService: CameraService;\n  private cesiumService: CesiumService;\n\n  private mapsZoomElements = new Map<string, ZoomData>();\n  private defaultOptions = {\n    animationDurationInSeconds: 0.5,\n    resetKeyCode: 27,\n    borderStyle: '2px solid rgba(0,0,0,0.5)',\n    backgroundColor: 'rgba(0,0,0,0.2)',\n    autoDisableOnZoom: true,\n    threshold: 9,\n    keepRotation: true,\n    mouseButton: MouseButtons.LEFT,\n  };\n\n  init(cesiumService: CesiumService, cameraService: CameraService) {\n    this.cameraService = cameraService;\n    this.cesiumService = cesiumService;\n  }\n\n  activate(\n    options: {\n      onStart?: (acMap?: AcMapComponent) => any;\n      onComplete?: (acMap?: AcMapComponent) => any;\n      mouseButton?: MouseButtons;\n      autoDisableOnZoom?: boolean;\n      animationDurationInSeconds?: number;\n      threshold?: number;\n      keepRotation?: boolean;\n      borderStyle?: string;\n      backgroundColor?: string;\n      resetKeyCode?: number;\n    } = {},\n    mapId?: string,\n  ) {\n    if ((!this.cameraService || !this.cesiumService) && !mapId) {\n      throw new Error(`The function must receive a mapId if the service wasn't initialized`);\n    }\n    const finalOptions = Object.assign({}, this.defaultOptions, options);\n    let cameraService = this.cameraService;\n    let mapContainer;\n    let map;\n    if (!mapId) {\n      map = this.mapsManager.getMap();\n      if (!map) {\n        throw new Error(`Map not found`);\n      }\n      mapId = map.getId();\n      mapContainer = this.cesiumService.getViewer().container;\n    } else {\n      map = this.mapsManager.getMap(mapId);\n      if (!map) {\n        throw new Error(`Map not found with id: ${mapId}`);\n      }\n      cameraService = map.getCameraService();\n      mapContainer = map.getCesiumViewer().container;\n    }\n\n    if (!cameraService || !mapContainer) {\n      throw new Error(`The function must receive a mapId if the service wasn't initialized`);\n    }\n    this.disable(mapId);\n    const container = document.createElement('div');\n    mapContainer.style.position = 'relative';\n    container.style.position = 'absolute';\n    container.style.width = '100%';\n    container.style.height = '100%';\n    container.style.top = '0';\n    container.style.left = '0';\n    mapContainer.appendChild(container);\n    const mapZoomData: ZoomData = { container };\n    this.mapsZoomElements.set(mapId, mapZoomData);\n    let mouse = {\n      endX: 0,\n      endY: 0,\n      startX: 0,\n      startY: 0,\n    };\n    let borderElement: HTMLElement | undefined;\n\n    container.onmousedown = e => {\n      if (e.button !== finalOptions.mouseButton) {\n        return;\n      }\n      if (!borderElement) {\n        if (options && options.onStart) {\n          options.onStart(map);\n        }\n\n        const rect = (e.currentTarget as any).getBoundingClientRect();\n        const offsetX = e.clientX - rect.left;\n        const offsetY = e.clientY - rect.top;\n        mouse.startX = offsetX;\n        mouse.startY = offsetY;\n        borderElement = document.createElement('div');\n        borderElement.className = 'zoom-to-rectangle-border';\n        borderElement.style.position = 'absolute';\n        borderElement.style.border = finalOptions.borderStyle;\n        borderElement.style.backgroundColor = finalOptions.backgroundColor;\n        borderElement.style.left = mouse.startX + 'px';\n        borderElement.style.top = mouse.startY + 'px';\n        container.appendChild(borderElement);\n        mapZoomData.borderElement = borderElement;\n      }\n    };\n\n    container.onmouseup = e => {\n      if (borderElement) {\n        let zoomApplied;\n        if (mouse && Math.abs(mouse.endX - mouse.startX) * Math.abs(mouse.endY - mouse.startY) > finalOptions.threshold) {\n          zoomApplied = this.zoomCameraToRectangle(\n            cameraService,\n            mouse,\n            finalOptions.animationDurationInSeconds,\n            finalOptions,\n          );\n        }\n        borderElement.remove();\n        borderElement = undefined;\n        mapZoomData.borderElement = undefined;\n        mouse = {\n          endX: 0,\n          endY: 0,\n          startX: 0,\n          startY: 0,\n        };\n        if (!!finalOptions.onComplete) {\n          finalOptions.onComplete(map);\n        }\n        if (finalOptions.autoDisableOnZoom && zoomApplied) {\n          this.disable(mapId);\n        }\n      }\n    };\n\n    container.onmousemove = e => {\n      if (borderElement) {\n        const rect = (e.currentTarget as any).getBoundingClientRect();\n        const offsetX = e.clientX - rect.left;\n        const offsetY = e.clientY - rect.top;\n        mouse.endX = offsetX;\n        mouse.endY = offsetY;\n        borderElement.style.width = Math.abs(mouse.endX - mouse.startX) + 'px';\n        borderElement.style.height = Math.abs(mouse.endY - mouse.startY) + 'px';\n        borderElement.style.left = Math.min(mouse.startX, mouse.endX) + 'px';\n        borderElement.style.top = Math.min(mouse.startY, mouse.endY) + 'px';\n      }\n    };\n\n    const resetOnEscapePress = e => {\n      if (e.keyCode === finalOptions.resetKeyCode && borderElement) {\n        borderElement.remove();\n        borderElement = undefined;\n        mapZoomData.borderElement = undefined;\n        mouse = {\n          endX: 0,\n          endY: 0,\n          startX: 0,\n          startY: 0,\n        };\n      }\n    };\n    document.addEventListener('keydown', resetOnEscapePress);\n    mapZoomData.resetOnEscapePressFunc = resetOnEscapePress;\n  }\n\n  public disable(mapId?: string) {\n    if (!this.mapsManager && !mapId) {\n      throw new Error('If the service was not initialized with MapsManager, mapId must be provided');\n    }\n    if (!mapId) {\n      const map = this.mapsManager.getMap();\n      mapId = map.getId();\n    }\n    const data = this.mapsZoomElements.get(mapId);\n    if (data) {\n      data.container.remove();\n      if (data.borderElement) {\n        data.borderElement.remove();\n      }\n      if (data.resetOnEscapePressFunc) {\n        document.removeEventListener('keydown', data.resetOnEscapePressFunc);\n      }\n    }\n    this.mapsZoomElements.delete(mapId);\n  }\n\n  private zoomCameraToRectangle(\n    cameraService: CameraService,\n    positions: { endX: number; endY: number; startX: number; startY: number },\n    animationDuration,\n    options,\n  ): boolean {\n    const camera = cameraService.getCamera();\n    const cartesian1 = camera.pickEllipsoid({ x: positions.startX, y: positions.startY });\n    const cartesian2 = camera.pickEllipsoid({ x: positions.endX, y: positions.endY });\n    if (!cartesian1 || !cartesian2) {\n      return false;\n    }\n    const cartographic1 = Cartographic.fromCartesian(cartesian1);\n    const cartographic2 = Cartographic.fromCartesian(cartesian2);\n    cameraService.cameraFlyTo({\n      destination: new Rectangle(\n        Math.min(cartographic1.longitude, cartographic2.longitude),\n        Math.min(cartographic1.latitude, cartographic2.latitude),\n        Math.max(cartographic1.longitude, cartographic2.longitude),\n        Math.max(cartographic1.latitude, cartographic2.latitude),\n      ),\n      orientation: options.keepRotation ? { heading: camera.heading } : undefined,\n      duration: animationDuration,\n    });\n    return true;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Cartesian3 } from 'cesium';\nimport { EditableRectangle } from '../../../models/editable-rectangle';\nimport { RectangleEditOptions } from '../../../models/rectangle-edit-options';\nimport { AcLayerComponent } from '../../../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { CoordinateConverter } from '../../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\n\n@Injectable()\nexport class RectanglesManagerService {\n  rectangles: Map<string, EditableRectangle> = new Map<string, EditableRectangle>();\n\n  createEditableRectangle(\n    id: string,\n    editRectanglesLayer: AcLayerComponent,\n    editPointsLayer: AcLayerComponent,\n    coordinateConverter: CoordinateConverter,\n    rectangleOptions?: RectangleEditOptions,\n    positions?: Cartesian3[]\n  ) {\n    const editableRectangle = new EditableRectangle(\n      id,\n      editPointsLayer,\n      editRectanglesLayer,\n      coordinateConverter,\n      rectangleOptions,\n      positions\n    );\n\n    this.rectangles.set(id, editableRectangle);\n  }\n\n  dispose(id: string) {\n    this.rectangles.get(id).dispose();\n    this.rectangles.delete(id);\n  }\n\n  get(id: string): EditableRectangle {\n    return this.rectangles.get(id);\n  }\n\n  clear() {\n    this.rectangles.forEach(rectangle => rectangle.dispose());\n    this.rectangles.clear();\n  }\n}\n\n","import { publish, tap } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { Color, ClassificationType, HeightReference, Cartesian3 } from 'cesium';\nimport { CesiumService } from '../../../../angular-cesium/services/cesium/cesium.service';\nimport { MapEventsManagerService } from '../../../../angular-cesium/services/map-events-mananger/map-events-manager';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { CesiumEvent } from '../../../../angular-cesium/services/map-events-mananger/consts/cesium-event.enum';\nimport { PickOptions } from '../../../../angular-cesium/services/map-events-mananger/consts/pickOptions.enum';\nimport { RectangleEditUpdate } from '../../../models/rectangle-edit-update';\nimport { EditModes } from '../../../models/edit-mode.enum';\nimport { EditActions } from '../../../models/edit-actions.enum';\nimport { DisposableObservable } from '../../../../angular-cesium/services/map-events-mananger/disposable-observable';\nimport { CoordinateConverter } from '../../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { EditPoint } from '../../../models/edit-point';\nimport { CameraService } from '../../../../angular-cesium/services/camera/camera.service';\nimport { RectanglesManagerService } from './rectangles-manager.service';\nimport { RectangleEditorObservable } from '../../../models/rectangle-editor-observable';\nimport { EditableRectangle } from '../../../models/editable-rectangle';\nimport { RectangleEditOptions } from '../../../models/rectangle-edit-options';\nimport { PointProps } from '../../../models/point-edit-options';\nimport { LabelProps } from '../../../models/label-props';\nimport { generateKey } from '../../utils';\n\nexport const DEFAULT_RECTANGLE_OPTIONS: RectangleEditOptions = {\n  addPointEvent: CesiumEvent.LEFT_CLICK,\n  dragPointEvent: CesiumEvent.LEFT_CLICK_DRAG,\n  dragShapeEvent: CesiumEvent.LEFT_CLICK_DRAG,\n  allowDrag: true,\n  pointProps: {\n    color: Color.WHITE,\n    outlineColor: Color.BLACK.withAlpha(0.2),\n    outlineWidth: 1,\n    pixelSize: 13,\n    virtualPointPixelSize: 8,\n    show: true,\n    showVirtual: true,\n    disableDepthTestDistance: Number.POSITIVE_INFINITY,\n  },\n  rectangleProps: {\n    height: 0,\n    extrudedHeight: 0,\n    material: Color.CORNFLOWERBLUE.withAlpha(0.4),\n    fill: true,\n    classificationType: ClassificationType.BOTH,\n    outline: true,\n    outlineColor: Color.WHITE,\n    zIndex: 0,\n  },\n  clampHeightTo3D: false,\n  clampHeightTo3DOptions: {\n    clampToTerrain: false,\n  },\n};\n\n/**\n * Service for creating editable rectangles\n *\n * You must provide `RectanglesEditorService` yourself.\n * RectanglesEditorService works together with `<rectangles-editor>` component. Therefor you need to create `<rectangles-editor>`\n * for each `RectanglesEditorService`, And of course somewhere under `<ac-map>`/\n *\n * + `create` for starting a creation of the shape over the map. Returns a extension of `RectangleEditorObservable`.\n * + `edit` for editing shape over the map starting from a given positions. Returns an extension of `RectangleEditorObservable`.\n * + To stop editing call `dsipose()` from the `RectangleEditorObservable` you get back from `create()` \\ `edit()`.\n *\n * **Labels over editted shapes**\n * Angular Cesium allows you to draw labels over a shape that is being edited with one of the editors.\n * To add label drawing logic to your editor use the function `setLabelsRenderFn()` that is defined on the\n * `RectangleEditorObservable` that is returned from calling `create()` \\ `edit()` of one of the editor services.\n * `setLabelsRenderFn()` - receives a callback that is called every time the shape is redrawn\n * (except when the shape is being dragged). The callback is called with the last shape state and with an array of the current labels.\n * The callback should return type `LabelProps[]`.\n * You can also use `updateLabels()` to pass an array of labels of type `LabelProps[]` to be drawn.\n *\n * usage:\n * ```typescript\n *  // Start creating rectangle\n *  const editing$ = rectanglesEditorService.create();\n *  this.editing$.subscribe(editResult => {\n *\t\t\t\tconsole.log(editResult.positions);\n *\t\t});\n *\n *  // Or edit rectangle from existing rectangle positions\n *  const editing$ = this.rectanglesEditorService.edit(initialPos);\n *\n * ```\n */\n@Injectable()\nexport class RectanglesEditorService {\n  private mapEventsManager: MapEventsManagerService;\n  private updateSubject = new Subject<RectangleEditUpdate>();\n  private updatePublisher = publish<RectangleEditUpdate>()(this.updateSubject); // TODO maybe not needed\n  private coordinateConverter: CoordinateConverter;\n  private cameraService: CameraService;\n  private rectanglesManager: RectanglesManagerService;\n  private observablesMap = new Map<string, DisposableObservable<any>[]>();\n  private cesiumScene: any;\n\n  init(mapEventsManager: MapEventsManagerService,\n       coordinateConverter: CoordinateConverter,\n       cameraService: CameraService,\n       rectanglesManager: RectanglesManagerService,\n       cesiumViewer: CesiumService,\n  ) {\n    this.mapEventsManager = mapEventsManager;\n    this.coordinateConverter = coordinateConverter;\n    this.cameraService = cameraService;\n    this.rectanglesManager = rectanglesManager;\n    this.updatePublisher.connect();\n\n    this.cesiumScene = cesiumViewer.getScene();\n  }\n\n  onUpdate(): Observable<RectangleEditUpdate> {\n    return this.updatePublisher;\n  }\n\n  create(options = DEFAULT_RECTANGLE_OPTIONS, priority = 100): RectangleEditorObservable {\n    const positions: Cartesian3[] = [];\n    const id = generateKey();\n    const rectangleOptions = this.setOptions(options);\n\n    const clientEditSubject = new BehaviorSubject<RectangleEditUpdate>({\n      id,\n      editAction: null,\n      editMode: EditModes.CREATE\n    });\n    let finishedCreate = false;\n\n    this.updateSubject.next({\n      id,\n      positions,\n      editMode: EditModes.CREATE,\n      editAction: EditActions.INIT,\n      rectangleOptions: rectangleOptions,\n    });\n\n    const finishCreation = () => {\n      const changeMode = {\n        id,\n        editMode: EditModes.CREATE,\n        editAction: EditActions.CHANGE_TO_EDIT,\n      };\n      this.updateSubject.next(changeMode);\n      clientEditSubject.next(changeMode);\n      if (this.observablesMap.has(id)) {\n        this.observablesMap.get(id).forEach(registration => registration.dispose());\n      }\n      this.observablesMap.delete(id);\n      this.editRectangle(id, positions, priority, clientEditSubject, rectangleOptions, editorObservable);\n      finishedCreate = true;\n      return finishedCreate;\n    };\n\n    const mouseMoveRegistration = this.mapEventsManager.register({\n      event: CesiumEvent.MOUSE_MOVE,\n      pick: PickOptions.NO_PICK,\n      pickConfig: options.pickConfiguration,\n      priority,\n    });\n    const addPointRegistration = this.mapEventsManager.register({\n      event: rectangleOptions.addPointEvent,\n      pick: PickOptions.NO_PICK,\n      pickConfig: options.pickConfiguration,\n      priority,\n    });\n\n    this.observablesMap.set(id, [mouseMoveRegistration, addPointRegistration ]);\n    const editorObservable = this.createEditorObservable(clientEditSubject, id, finishCreation);\n\n    mouseMoveRegistration.subscribe(({ movement: { endPosition } }) => {\n      const position = this.coordinateConverter.screenToCartesian3(endPosition);\n\n      if (position) {\n        this.updateSubject.next({\n          id,\n          positions: this.getPositions(id),\n          editMode: EditModes.CREATE,\n          updatedPosition: position,\n          editAction: EditActions.MOUSE_MOVE,\n        });\n      }\n    });\n\n    addPointRegistration.subscribe(({ movement: { endPosition } }) => {\n      if (finishedCreate) {\n        return;\n      }\n      const position = this.coordinateConverter.screenToCartesian3(endPosition);\n      if (!position) {\n        return;\n      }\n      const allPositions = this.getPositions(id);\n      const isFirstPoint = this.getPositions(id).length === 0;\n\n      const updateValue = {\n        id,\n        positions: allPositions,\n        editMode: EditModes.CREATE,\n        updatedPosition: position,\n        editAction: EditActions.ADD_POINT,\n      };\n      this.updateSubject.next(updateValue);\n      clientEditSubject.next({\n        ...updateValue,\n        positions: this.getPositions(id),\n        points: this.getPoints(id),\n      });\n\n      if (!isFirstPoint) {\n        finishedCreate = finishCreation();\n      }\n\n    });\n\n    return editorObservable;\n  }\n\n  edit(positions: Cartesian3[], options = DEFAULT_RECTANGLE_OPTIONS, priority = 100): RectangleEditorObservable {\n    if (positions.length !== 2) {\n      throw new Error('Rectangles editor error edit(): rectangle should have at least 2 positions');\n    }\n    const id = generateKey();\n    const rectangleOptions = this.setOptions(options);\n    const editSubject = new BehaviorSubject<RectangleEditUpdate>({\n      id,\n      editAction: null,\n      editMode: EditModes.EDIT\n    });\n    const update = {\n      id,\n      positions: positions,\n      editMode: EditModes.EDIT,\n      editAction: EditActions.INIT,\n      rectangleOptions: rectangleOptions,\n    };\n    this.updateSubject.next(update);\n    editSubject.next({\n      ...update,\n      positions: this.getPositions(id),\n      points: this.getPoints(id),\n    });\n    return this.editRectangle(\n      id,\n      positions,\n      priority,\n      editSubject,\n      rectangleOptions\n    );\n  }\n\n  private editRectangle(id: string,\n                      positions: Cartesian3[],\n                      priority: number,\n                      editSubject: Subject<RectangleEditUpdate>,\n                      options: RectangleEditOptions,\n                      editObservable?: RectangleEditorObservable): RectangleEditorObservable {\n\n    const pointDragRegistration = this.mapEventsManager.register({\n      event: options.dragPointEvent,\n      entityType: EditPoint,\n      pick: PickOptions.PICK_FIRST,\n      pickConfig: options.pickConfiguration,\n      priority,\n      pickFilter: entity => id === entity.editedEntityId,\n    });\n\n    let shapeDragRegistration;\n    if (options.allowDrag) {\n      shapeDragRegistration = this.mapEventsManager.register({\n        event: options.dragShapeEvent,\n        entityType: EditableRectangle,\n        pick: PickOptions.PICK_FIRST,\n        pickConfig: options.pickConfiguration,\n        priority,\n        pickFilter: entity => id === entity.id,\n      });\n    }\n\n    pointDragRegistration.pipe(\n      tap(({ movement: { drop } }) => this.rectanglesManager.get(id).enableEdit && this.cameraService.enableInputs(drop)))\n      .subscribe(({ movement: { endPosition, drop }, entities }) => {\n        const position = this.coordinateConverter.screenToCartesian3(endPosition);\n        if (!position) {\n          return;\n        }\n        const point: EditPoint = entities[0];\n\n        const update = {\n          id,\n          positions: this.getPositions(id),\n          editMode: EditModes.EDIT,\n          updatedPosition: position,\n          updatedPoint: point,\n          editAction: drop ? EditActions.DRAG_POINT_FINISH : EditActions.DRAG_POINT,\n        };\n        this.updateSubject.next(update);\n        editSubject.next({\n          ...update,\n          positions: this.getPositions(id),\n          points: this.getPoints(id),\n        });\n      });\n\n    if (shapeDragRegistration) {\n      shapeDragRegistration\n        .pipe(tap(({ movement: { drop } }) => this.rectanglesManager.get(id).enableEdit && this.cameraService.enableInputs(drop)))\n        .subscribe(({ movement: { startPosition, endPosition, drop }, entities }) => {\n          const endDragPosition = this.coordinateConverter.screenToCartesian3(endPosition);\n          const startDragPosition = this.coordinateConverter.screenToCartesian3(startPosition);\n          if (!endDragPosition) {\n            return;\n          }\n\n          const update = {\n            id,\n            positions: this.getPositions(id),\n            editMode: EditModes.EDIT,\n            updatedPosition: endDragPosition,\n            draggedPosition: startDragPosition,\n            editAction: drop ? EditActions.DRAG_SHAPE_FINISH : EditActions.DRAG_SHAPE,\n          };\n          this.updateSubject.next(update);\n          editSubject.next({\n            ...update,\n            positions: this.getPositions(id),\n            points: this.getPoints(id),\n          });\n        });\n    }\n\n    const observables = [pointDragRegistration];\n    if (shapeDragRegistration) {\n      observables.push(shapeDragRegistration);\n    }\n\n    this.observablesMap.set(id, observables);\n    return editObservable || this.createEditorObservable(editSubject, id);\n  }\n\n  private setOptions(options: RectangleEditOptions) {\n    const defaultClone = JSON.parse(JSON.stringify(DEFAULT_RECTANGLE_OPTIONS));\n    const rectangleOptions: RectangleEditOptions = Object.assign(defaultClone, options);\n    rectangleOptions.pointProps = Object.assign({}, DEFAULT_RECTANGLE_OPTIONS.pointProps, options.pointProps);\n    rectangleOptions.rectangleProps = Object.assign({}, DEFAULT_RECTANGLE_OPTIONS.rectangleProps, options.rectangleProps);\n\n    if (options.clampHeightTo3D) {\n      if (!this.cesiumScene.pickPositionSupported || !this.cesiumScene.clampToHeightSupported) {\n        throw new Error(`Cesium pickPosition and clampToHeight must be supported to use clampHeightTo3D`);\n      }\n\n      if (this.cesiumScene.pickTranslucentDepth) {\n        console.warn(`Cesium scene.pickTranslucentDepth must be false in order to make the editors work properly on 3D`);\n      }\n\n      if (rectangleOptions.pointProps.color.alpha === 1 || rectangleOptions.pointProps.outlineColor.alpha === 1) {\n        console.warn('Point color and outline color must have alpha in order to make the editor work properly on 3D');\n      }\n\n      rectangleOptions.pointProps.heightReference =  rectangleOptions.clampHeightTo3DOptions.clampToTerrain ?\n        HeightReference.CLAMP_TO_GROUND : HeightReference.RELATIVE_TO_GROUND;\n      rectangleOptions.pointProps.disableDepthTestDistance = Number.POSITIVE_INFINITY;\n    }\n    return rectangleOptions;\n  }\n\n\n  private createEditorObservable(observableToExtend: any, id: string, finishCreation?: () => boolean): RectangleEditorObservable {\n    observableToExtend.dispose = () => {\n      const observables = this.observablesMap.get(id);\n      if (observables) {\n        observables.forEach(obs => obs.dispose());\n      }\n      this.observablesMap.delete(id);\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.DISPOSE,\n      });\n    };\n    observableToExtend.enable = () => {\n      this.updateSubject.next({\n        id,\n        positions: this.getPositions(id),\n        editMode: EditModes.EDIT,\n        editAction: EditActions.ENABLE,\n      });\n    };\n    observableToExtend.disable = () => {\n      this.updateSubject.next({\n        id,\n        positions: this.getPositions(id),\n        editMode: EditModes.EDIT,\n        editAction: EditActions.DISABLE,\n      });\n    };\n\n    observableToExtend.setManually = (firstPosition: Cartesian3,\n                                      secondPosition: Cartesian3,\n                                      firstPointProp?: PointProps,\n                                      secondPointProp?: PointProps) => {\n      const firstP = new EditPoint(id, firstPosition, firstPointProp ? firstPointProp : DEFAULT_RECTANGLE_OPTIONS.pointProps);\n      const secP = new EditPoint(id, secondPosition, secondPointProp ? secondPointProp : DEFAULT_RECTANGLE_OPTIONS.pointProps);\n\n      const rectangle = this.rectanglesManager.get(id);\n      rectangle.setPointsManually([firstP, secP]);\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.SET_MANUALLY,\n      });\n    };\n\n    observableToExtend.setLabelsRenderFn = (callback: any) => {\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.SET_EDIT_LABELS_RENDER_CALLBACK,\n        labelsRenderFn: callback,\n      });\n    };\n\n    observableToExtend.updateLabels = (labels: LabelProps[]) => {\n      this.updateSubject.next({\n        id,\n        editMode: EditModes.CREATE_OR_EDIT,\n        editAction: EditActions.UPDATE_EDIT_LABELS,\n        updateLabels: labels,\n      });\n    };\n\n    observableToExtend.finishCreation = () => {\n      if (!finishCreation) {\n        throw new Error('Rectangles editor error edit(): cannot call finishCreation() on edit');\n      }\n\n      return finishCreation();\n    };\n\n    observableToExtend.getCurrentPoints = () => this.getPoints(id);\n\n    observableToExtend.getEditValue = () => observableToExtend.getValue();\n\n    observableToExtend.getLabels = (): LabelProps[] => this.rectanglesManager.get(id).labels;\n\n    return observableToExtend as RectangleEditorObservable;\n  }\n\n  private getPositions(id: any) {\n    const rectangle = this.rectanglesManager.get(id);\n    return rectangle.getRealPositions();\n  }\n\n  private getPoints(id: any) {\n    const rectangle = this.rectanglesManager.get(id);\n    return rectangle.getRealPoints();\n  }\n}\n\n","import { ChangeDetectionStrategy, Component, OnDestroy, ViewChild } from '@angular/core';\nimport { CesiumService } from '../../../angular-cesium/services/cesium/cesium.service';\nimport { EditModes } from '../../models/edit-mode.enum';\nimport { RectangleEditUpdate } from '../../models/rectangle-edit-update';\nimport { AcNotification } from '../../../angular-cesium/models/ac-notification';\nimport { EditActions } from '../../models/edit-actions.enum';\nimport { AcLayerComponent } from '../../../angular-cesium/components/ac-layer/ac-layer.component';\nimport { CoordinateConverter } from '../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';\nimport { MapEventsManagerService } from '../../../angular-cesium/services/map-events-mananger/map-events-manager';\nimport { Subject } from 'rxjs';\nimport { CameraService } from '../../../angular-cesium/services/camera/camera.service';\nimport { EditPoint } from '../../models/edit-point';\nimport { RectanglesManagerService } from '../../services/entity-editors/rectangles-editor/rectangles-manager.service';\nimport { RectanglesEditorService } from '../../services/entity-editors/rectangles-editor/rectangles-editor.service';\nimport { LabelProps } from '../../models/label-props';\nimport { EditableRectangle } from '../../models/editable-rectangle';\n\n@Component({\n    selector: 'rectangles-editor',\n    template: /*html*/ `\n    <ac-layer #editPointsLayer acFor=\"let point of editPoints$\" [context]=\"this\">\n      <ac-point-desc\n        props=\"{\n        position: point.getPositionCallbackProperty(),\n        pixelSize: getPointSize(point),\n        color: point.props.color,\n        outlineColor: point.props.outlineColor,\n        outlineWidth: point.props.outlineWidth,\n        show: getPointShow(point),\n        disableDepthTestDistance: point.props.disableDepthTestDistance,\n        heightReference: point.props.heightReference,\n    }\"\n      >\n      </ac-point-desc>\n    </ac-layer>\n\n    <ac-layer #editRectanglesLayer acFor=\"let rectangle of editRectangles$\" [context]=\"this\">\n      <ac-rectangle-desc\n        props=\"{\n          coordinates: rectangle.getRectangleCallbackProperty(),\n          material: rectangle.rectangleProps.material,\n          fill: rectangle.rectangleProps.fill,\n          classificationType: rectangle.rectangleProps.classificationType,\n          zIndex: rectangle.rectangleProps.zIndex,\n          outline: rectangle.rectangleProps.outline,\n          outlineColor: rectangle.rectangleProps.outlineColor,\n          height: rectangle.rectangleProps.height,\n          extrudedHeight: rectangle.rectangleProps.extrudedHeight\n        }\"\n      >\n      </ac-rectangle-desc>\n      <ac-array-desc acFor=\"let label of rectangle.labels\" [idGetter]=\"getLabelId\">\n        <ac-label-primitive-desc\n          props=\"{\n            position: label.position,\n            backgroundColor: label.backgroundColor,\n            backgroundPadding: label.backgroundPadding,\n            distanceDisplayCondition: label.distanceDisplayCondition,\n            eyeOffset: label.eyeOffset,\n            fillColor: label.fillColor,\n            font: label.font,\n            heightReference: label.heightReference,\n            horizontalOrigin: label.horizontalOrigin,\n            outlineColor: label.outlineColor,\n            outlineWidth: label.outlineWidth,\n            pixelOffset: label.pixelOffset,\n            pixelOffsetScaleByDistance: label.pixelOffsetScaleByDistance,\n            scale: label.scale,\n            scaleByDistance: label.scaleByDistance,\n            show: label.show,\n            showBackground: label.showBackground,\n            style: label.style,\n            text: label.text,\n            translucencyByDistance: label.translucencyByDistance,\n            verticalOrigin: label.verticalOrigin,\n            disableDepthTestDistance: label.disableDepthTestDistance,\n        }\"\n        >\n        </ac-label-primitive-desc>\n      </ac-array-desc>\n    </ac-layer>\n  `,\n    providers: [CoordinateConverter, RectanglesManagerService],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class RectanglesEditorComponent implements OnDestroy {\n  private editLabelsRenderFn: (update: RectangleEditUpdate, labels: LabelProps[]) => LabelProps[];\n  public editPoints$ = new Subject<AcNotification>();\n  public editRectangles$ = new Subject<AcNotification>();\n\n  @ViewChild('editRectanglesLayer') private editRectanglesLayer: AcLayerComponent;\n  @ViewChild('editPointsLayer') private editPointsLayer: AcLayerComponent;\n\n  constructor(\n    private rectanglesEditor: RectanglesEditorService,\n    private coordinateConverter: CoordinateConverter,\n    private mapEventsManager: MapEventsManagerService,\n    private cameraService: CameraService,\n    private rectanglesManager: RectanglesManagerService,\n    private cesiumService: CesiumService\n  ) {\n    this.rectanglesEditor.init(\n      this.mapEventsManager,\n      this.coordinateConverter,\n      this.cameraService,\n      this.rectanglesManager,\n      this.cesiumService\n    );\n    this.startListeningToEditorUpdates();\n  }\n\n  private startListeningToEditorUpdates() {\n    this.rectanglesEditor.onUpdate().subscribe((update: RectangleEditUpdate) => {\n      if (update.editMode === EditModes.CREATE || update.editMode === EditModes.CREATE_OR_EDIT) {\n        this.handleCreateUpdates(update);\n      } else if (update.editMode === EditModes.EDIT) {\n        this.handleEditUpdates(update);\n      }\n    });\n  }\n\n  getLabelId(element: any, index: number): string {\n    return index.toString();\n  }\n\n  renderEditLabels(rectangle: EditableRectangle, update: RectangleEditUpdate, labels?: LabelProps[]) {\n    update.positions = rectangle.getRealPositions();\n    update.points = rectangle.getRealPoints();\n\n    if (labels) {\n      rectangle.labels = labels;\n      this.editRectanglesLayer.update(rectangle, rectangle.getId());\n      return;\n    }\n\n    if (!this.editLabelsRenderFn) {\n      return;\n    }\n\n    rectangle.labels = this.editLabelsRenderFn(update, rectangle.labels);\n    this.editRectanglesLayer.update(rectangle, rectangle.getId());\n  }\n\n  removeEditLabels(rectangle: EditableRectangle) {\n    rectangle.labels = [];\n    this.editRectanglesLayer.update(rectangle, rectangle.getId());\n  }\n\n  handleCreateUpdates(update: RectangleEditUpdate) {\n    switch (update.editAction) {\n      case EditActions.INIT: {\n        this.rectanglesManager.createEditableRectangle(\n          update.id,\n          this.editRectanglesLayer,\n          this.editPointsLayer,\n          this.coordinateConverter,\n          update.rectangleOptions,\n        );\n        break;\n      }\n      case EditActions.MOUSE_MOVE: {\n        const rectangle = this.rectanglesManager.get(update.id);\n        if (update.updatedPosition) {\n          rectangle.moveTempMovingPoint(update.updatedPosition);\n          this.renderEditLabels(rectangle, update);\n        }\n        break;\n      }\n      case EditActions.ADD_POINT: {\n        const rectangle = this.rectanglesManager.get(update.id);\n        if (update.updatedPosition) {\n          rectangle.moveTempMovingPoint(update.updatedPosition);\n          rectangle.addPoint(update.updatedPosition);\n          this.renderEditLabels(rectangle, update);\n        }\n        break;\n      }\n      case EditActions.ADD_LAST_POINT: {\n        const rectangle = this.rectanglesManager.get(update.id);\n        if (update.updatedPosition) {\n          rectangle.addLastPoint(update.updatedPosition);\n          this.renderEditLabels(rectangle, update);\n        }\n        break;\n      }\n      case EditActions.DISPOSE: {\n        const rectangle = this.rectanglesManager.get(update.id);\n        if (rectangle) {\n          this.removeEditLabels(rectangle);\n          rectangle.dispose();\n        }\n        this.editLabelsRenderFn = undefined;\n        break;\n      }\n      case EditActions.SET_EDIT_LABELS_RENDER_CALLBACK: {\n        const rectangle = this.rectanglesManager.get(update.id);\n        this.editLabelsRenderFn = update.labelsRenderFn;\n        this.renderEditLabels(rectangle, update);\n        break;\n      }\n      case EditActions.UPDATE_EDIT_LABELS: {\n        const rectangle = this.rectanglesManager.get(update.id);\n        this.renderEditLabels(rectangle, update, update.updateLabels);\n        break;\n      }\n      case EditActions.SET_MANUALLY: {\n        const rectangle = this.rectanglesManager.get(update.id);\n        this.renderEditLabels(rectangle, update, update.updateLabels);\n        break;\n      }\n      default: {\n        return;\n      }\n    }\n  }\n\n  handleEditUpdates(update: RectangleEditUpdate) {\n    switch (update.editAction) {\n      case EditActions.INIT: {\n        this.rectanglesManager.createEditableRectangle(\n          update.id,\n          this.editRectanglesLayer,\n          this.editPointsLayer,\n          this.coordinateConverter,\n          update.rectangleOptions,\n          update.positions,\n        );\n        break;\n      }\n      case EditActions.DRAG_POINT: {\n        const rectangle = this.rectanglesManager.get(update.id);\n        if (rectangle && rectangle.enableEdit) {\n          rectangle.movePoint(update.updatedPosition, update.updatedPoint);\n          this.renderEditLabels(rectangle, update);\n        }\n        break;\n      }\n      case EditActions.DRAG_POINT_FINISH: {\n        const rectangle = this.rectanglesManager.get(update.id);\n        if (rectangle && rectangle.enableEdit) {\n          rectangle.endMovePoint();\n          this.renderEditLabels(rectangle, update);\n        }\n        break;\n      }\n      case EditActions.DISABLE: {\n        const rectangle = this.rectanglesManager.get(update.id);\n        if (rectangle) {\n          rectangle.enableEdit = false;\n          this.renderEditLabels(rectangle, update);\n        }\n        break;\n      }\n      case EditActions.ENABLE: {\n        const rectangle = this.rectanglesManager.get(update.id);\n        if (rectangle) {\n          rectangle.enableEdit = true;\n          this.renderEditLabels(rectangle, update);\n        }\n        break;\n      }\n      case EditActions.DRAG_SHAPE: {\n        const rectangle = this.rectanglesManager.get(update.id);\n        if (rectangle && rectangle.enableEdit) {\n          rectangle.moveShape(update.draggedPosition, update.updatedPosition);\n          this.renderEditLabels(rectangle, update);\n        }\n        break;\n      }\n\n      case EditActions.DRAG_SHAPE_FINISH: {\n        const rectangle = this.rectanglesManager.get(update.id);\n        if (rectangle && rectangle.enableEdit) {\n          rectangle.endMoveShape();\n          this.renderEditLabels(rectangle, update);\n        }\n        break;\n      }\n      default: {\n        return;\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.rectanglesManager.clear();\n  }\n\n  getPointSize(point: EditPoint) {\n    return point.isVirtualEditPoint() ? point.props.virtualPointPixelSize : point.props.pixelSize;\n  }\n\n  getPointShow(point: EditPoint) {\n    return point.show && (point.isVirtualEditPoint() ? point.props.showVirtual : point.props.show);\n  }\n}\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AngularCesiumModule } from '../angular-cesium/angular-cesium.module';\nimport { PointsEditorComponent } from './components/points-editor/points-editor.component';\nimport { PolygonsEditorComponent } from './components/polygons-editor/polygons-editor.component';\nimport { CirclesEditorComponent } from './components/circles-editor/circles-editor.component';\nimport { EllipsesEditorComponent } from './components/ellipses-editor/ellipses-editor.component';\nimport { PolylinesEditorComponent } from './components/polylines-editor/polylines-editor.component';\nimport { HippodromeEditorComponent } from './components/hippodrome-editor/hippodrome-editor.component';\nimport { DraggableToMapDirective } from './directives/draggable-to-map.directive';\nimport { DraggableToMapService } from './services/draggable-to-map.service';\nimport { AcToolbarComponent } from './components/toolbar/ac-toolbar/ac-toolbar.component';\nimport { DragIconComponent } from './components/toolbar/ac-toolbar/drag-icon.component';\nimport { AcToolbarButtonComponent } from './components/toolbar/ac-toolbar-button/ac-toolbar-button.component';\nimport { RangeAndBearingComponent } from './components/range-and-bearing/range-and-bearing.component';\nimport { ZoomToRectangleService } from './services/zoom-to-rectangle.service';\nimport { RectanglesEditorComponent } from './components/rectangles-editor/rectangles-editor.component';\n\n@NgModule({\n  imports: [CommonModule, AngularCesiumModule],\n  declarations: [\n    PointsEditorComponent,\n    HippodromeEditorComponent,\n    PolygonsEditorComponent,\n    RectanglesEditorComponent,\n    CirclesEditorComponent,\n    EllipsesEditorComponent,\n    PolylinesEditorComponent,\n    DraggableToMapDirective,\n    DragIconComponent,\n    AcToolbarComponent,\n    AcToolbarButtonComponent,\n    RangeAndBearingComponent,\n  ],\n  exports: [\n    PointsEditorComponent,\n    HippodromeEditorComponent,\n    PolygonsEditorComponent,\n    RectanglesEditorComponent,\n    CirclesEditorComponent,\n    EllipsesEditorComponent,\n    PolylinesEditorComponent,\n    DraggableToMapDirective,\n    AcToolbarComponent,\n    AcToolbarButtonComponent,\n    RangeAndBearingComponent,\n  ],\n  providers: [\n    DraggableToMapService,\n    ZoomToRectangleService,\n  ]\n})\nexport class AngularCesiumWidgetsModule {\n}\n","/*\n * Public API Surface of angular-cesium\n */\n\nexport * from './lib/angular-cesium/index';\n// export * from './lib/heatmap/cesium-heatmap-material-creator';\nexport * from './lib/angular-cesium-widgets/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.ViewerFactory","i2.ViewerConfiguration","cMath","i1.CesiumService","Cesium","observableOf","i2.CesiumEventBuilder","i3.PlonterService","SceneMode","i1.PlonterService","i2.CoordinateConverter","i4.AcHtmlComponent","i1.ContextMenuService","i2","i3.AcHtmlComponent","i3.MapsManagerService","i4.BillboardDrawerService","i5.LabelDrawerService","i6.EllipseDrawerService","i7.PolylineDrawerService","i8.PolygonDrawerService","i9.ArcDrawerService","i10.PointDrawerService","i11.CzmlDrawerService","i12.MapEventsManagerService","i13.KeyboardControlService","i14.MapLayersService","i15.ScreenshotService","i16.ContextMenuService","i17.CoordinateConverter","i18","i19.AcDefaultPlonterComponent","i20.AcContextMenuWrapperComponent","observableMerge","observableFrom","i1.LayerService","i2.ComputationCache","i3.MapLayersService","i11.ModelDrawerService","i12.BoxDrawerService","i13.CorridorDrawerService","i14.CylinderDrawerService","i15.EllipsoidDrawerService","i16.PolylineVolumeDrawerService","i17.WallDrawerService","i18.RectangleDrawerService","i19.DynamicEllipseDrawerService","i20.DynamicPolylineDrawerService","i21.StaticCircleDrawerService","i22.StaticPolylineDrawerService","i23.StaticPolygonDrawerService","i24.StaticEllipseDrawerService","i25.PolylinePrimitiveDrawerService","i26.LabelPrimitiveDrawerService","i27.BillboardPrimitiveDrawerService","i28.PointPrimitiveDrawerService","i29.HtmlDrawerService","i30.CzmlDrawerService","i1.BasicDrawerService","i2.MapLayersService","i1.BillboardDrawerService","i2.JsonMapper","i2.LayerService","i3.ComputationCache","i4.CesiumProperties","i1.EllipseDrawerService","i1.PolylineDrawerService","i1.LabelDrawerService","i1.ArcDrawerService","i1.PointDrawerService","i1.PolygonDrawerService","i1.StaticPrimitiveDrawer","i1.StaticEllipseDrawerService","i1.DynamicEllipseDrawerService","i1.DynamicPolylineDrawerService","i1.StaticPolygonDrawerService","i1.StaticCircleDrawerService","i1.StaticPolylineDrawerService","i1.ModelDrawerService","i1.BoxDrawerService","i1.CylinderDrawerService","i1.CorridorDrawerService","i1.EllipsoidDrawerService","i1.PolylineVolumeDrawerService","i1.WallDrawerService","i1.RectangleDrawerService","i1.BillboardPrimitiveDrawerService","i1.LabelPrimitiveDrawerService","i1.PolylinePrimitiveDrawerService","i2.AcHtmlManager","i1.AcHtmlManager","i1.HtmlDrawerService","i5","i6.AcHtmlDirective","i7.AcHtmlContainerDirective","i2.AcLayerComponent","i1.PointPrimitiveDrawerService","i1.CzmlDrawerService","i1.MapsManagerService","cLabelStyle","i1.PointsEditorService","i3.MapEventsManagerService","i4.CameraService","i5.PointsManagerService","i6.CesiumService","i7.AcLabelPrimitiveDescComponent","i8.AcLayerComponent","i9.AcPointDescComponent","i10.AcArrayDescComponent","i1.PolygonsEditorService","i5.PolygonsManagerService","i8.AcPolylineDescComponent","i9.AcLayerComponent","i10.AcPointDescComponent","i11.AcPolygonDescComponent","i12.AcArrayDescComponent","i1.CirclesEditorService","i5.CirclesManagerService","i6.AcLabelPrimitiveDescComponent","i7.AcEllipseDescComponent","i9.AcArcDescComponent","i11.AcArrayDescComponent","i1.EllipsesEditorService","i5.EllipsesManagerService","i8.AcEllipseDescComponent","i1.PolylinesEditorService","i5.PolylinesManagerService","i1.HippodromeEditorService","i5.HippodromeManagerService","i7.AcLayerComponent","i8.AcPointDescComponent","i9.AcCorridorDescComponent","observableFromEvent","merge","i1.DraggableToMapService","i1","i3.DragIconComponent","i4.AcToolbarButtonComponent","i3.PolylinesEditorComponent","i2.CameraService","i3.CesiumService","i1.RectanglesEditorService","i5.RectanglesManagerService","i10.AcRectangleDescComponent"],"mappings":"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"}