@eliorar/angular-cesium
Version:
Angular library for working with Cesium.
1 lines • 1.07 MB
Source Map (JSON)
{"version":3,"file":"eliorar-angular-cesium.mjs","sources":["../../../projects/angular-cesium/src/lib/angular-cesium/services/viewer-factory/viewer-factory.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/viewer-configuration/viewer-configuration.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/cesium/cesium.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/models/scene-mode.enum.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/camera/camera.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/map-events-mananger/consts/cesium-event.enum.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/map-events-mananger/consts/pickOptions.enum.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/context-menu/context-menu.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/coordinate-converter/coordinate-converter.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/basic-drawer/basic-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/primitives-drawer/primitives-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/geo-utils/geo-utils.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/arc-drawer/arc-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/entities-drawer/enums/graphics-type.enum.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/entities-drawer/optimized-entity-collection.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/entities-drawer/entities-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/billboard-drawer/billboard-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/czml-drawer/czml-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/ellipse-drawer/ellipse-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/label-drawer/label-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/point-drawer/point-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/polygon-drawer/polygon-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/polyline-drawer/polyline-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/polyline-primitive-drawer/polyline-primitive-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/models/ac-keyboard-action.enum.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/keyboard-control/predefined-actions.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/keyboard-control/keyboard-control.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/map-events-mananger/event-observers/cesium-pure-event-observer.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/map-events-mananger/event-observers/cesium-long-press-observer.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/map-events-mananger/cesium-event-builder.ts","../../../projects/angular-cesium/src/lib/angular-cesium/utils/utils.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/map-events-mananger/event-observers/cesium-drag-drop-helper.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/plonter/plonter.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/map-events-mananger/map-events-manager.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/map-layers/map-layers.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/screenshot/screenshot.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/maps-manager/maps-manager.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-html/ac-html.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-default-plonter/ac-default-plonter.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-context-menu-wrapper/ac-context-menu-wrapper.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-map/ac-map.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/layer-service/layer-service.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/models/action-type.enum.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/computation-cache/computation-cache.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/utils/checker.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/static-dynamic/ellipse-drawer/dynamic-ellipse-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/static-dynamic/dynamic-polyline-drawer/dynamic-polyline-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/static-dynamic/static-primitive-drawer/static-primitive-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/static-dynamic/static-circle-drawer/static-circle-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/static-dynamic/static-polyline-drawer/static-polyline-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/static-dynamic/static-polygon-drawer/polygon-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/static-dynamic/ellipse-drawer/ellipse-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/model-drawer/model-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/box-dawer/box-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/corridor-dawer/corridor-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/cylinder-dawer/cylinder-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/ellipoid-drawer/ellipsoid-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/polyline-volume-dawer/polyline-volume-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/wall-dawer/wall-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/rectangle-dawer/rectangle-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/label-primitive-drawer/label-primitive-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/billboard-primitive-drawer/billboard-primitive-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/point-primitive-drawer/point-primitive-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/drawers/html-drawer/html-drawer.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-layer/ac-layer.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/entity-on-map/entity-on-map.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-billboard/ac-billboard.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/smart-assigner/smart-assigner.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/json-mapper/json-mapper.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/cesium-properties/cesium-properties.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/basic-desc/basic-desc.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-billborad-desc/ac-billborad-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-ellipse-desc/ac-ellipse-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-polyline-desc/ac-polyline-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/pipes/pixel-offset/pixel-offset.pipe.ts","../../../projects/angular-cesium/src/lib/angular-cesium/pipes/radians-to-degrees/radians-to-degrees.pipe.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-label-desc/ac-label-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/utils/utils.module.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-circle-desc/ac-circle-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-arc-desc/ac-arc-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/models/ac-entity.ts","../../../projects/angular-cesium/src/lib/angular-cesium/models/ac-notification.ts","../../../projects/angular-cesium/src/lib/angular-cesium/models/map-layer-provider-options.enum.ts","../../../projects/angular-cesium/src/lib/angular-cesium/models/map-terrain-provider-options.enum.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-map-layer-provider/ac-map-layer-provider.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-map-terrain-provider/ac-map-terrain-provider.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-point-desc/ac-point-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-label/ac-label.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-polyline/ac-polyline.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-ellipse/ac-ellipse.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-point/ac-point.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-circle/ac-circle.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-arc/ac-arc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-polygon-desc/ac-polygon-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-polygon/ac-polygon.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/basic-primitive-desc/basic-static-primitive-desc.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/static-dynamic/ac-static-ellipse-desc/ac-static-ellipse-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/static-dynamic/ac-dynamic-ellipse-desc/ac-dynamic-ellipse-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/static-dynamic/ac-dynamic-polyline-desc/ac-dynamic-polyline-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/static-dynamic/ac-static-polygon-desc/ac-static-polygon-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/static-dynamic/ac-static-circle-desc/ac-static-circle-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/static-dynamic/ac-dynamic-circle-desc/ac-dynamic-circle-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/static-dynamic/ac-static-polyline-desc/ac-static-polyline-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-model-desc/ac-model-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-3d-tileset/ac-tileset-3d.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-box-desc/ac-box-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-cylinder-desc/ac-cylinder-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-corridor-desc/ac-corridor-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-ellipsoid-desc/ac-ellipsoid-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-polyline-volume-desc/ac-polyline-volume-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-wall-desc/ac-wall-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-rectangle-desc/ac-rectangle-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-billboard-primitive-desc/ac-billboard-primitive-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-label-primitive-desc/ac-label-primitive-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-polyline-primitive-desc/ac-polyline-primitive-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/cesium-enhancements/StaticGeometryColorBatch.ts","../../../projects/angular-cesium/src/lib/angular-cesium/cesium-enhancements/ConfigurationService.ts","../../../projects/angular-cesium/src/lib/cesium-extender/primitives/html.ts","../../../projects/angular-cesium/src/lib/cesium-extender/collections/html.ts","../../../projects/angular-cesium/src/lib/cesium-extender/extender.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/ac-html-manager/ac-html-manager.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/directives/ac-html/ac-html.directive.ts","../../../projects/angular-cesium/src/lib/angular-cesium/directives/ac-html-container/ac-html-container.directive.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-html-desc/ac-html-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-array-desc/ac-array-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-point-primitive-desc/ac-point-primitive-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-primitive-polyline/ac-primitive-polyline.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/pipes/pipe-config-map.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-czml-desc/ac-czml-desc.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/components/ac-rectangle/ac-rectangle.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium/angular-cesium.module.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/map-events-mananger/disposable-observable.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/map-events-mananger/consts/cesium-event-modifier.enum.ts","../../../projects/angular-cesium/src/lib/angular-cesium/services/selection-manager/selection-manager.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium/index.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/edit-mode.enum.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/edit-actions.enum.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/edit-point.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/label-props.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/editable-point.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/entity-editors/points-editor/points-manager.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/utils.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/entity-editors/points-editor/points-editor.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/components/points-editor/points-editor.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/edit-polyline.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/editable-polygon.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/entity-editors/polygons-editor/polygons-manager.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/entity-editors/polygons-editor/polygons-editor.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/components/polygons-editor/polygons-editor.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/edit-arc.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/editable-circle.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/entity-editors/circles-editor/circles-manager.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/entity-editors/circles-editor/circles-editor.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/components/circles-editor/circles-editor.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/editable-ellipse.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/entity-editors/ellipses-editor/ellipses-manager.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/entity-editors/ellipses-editor/ellipses-editor.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/components/ellipses-editor/ellipses-editor.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/editable-polyline.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/entity-editors/polyline-editor/polylines-manager.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/editable-rectangle.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/editor-observable.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/point-editor-observable.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/polyline-editor-observable.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/polygon-editor-observable.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/rectangle-editor-observable.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/circle-editor-observable.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/ellipse-editor-observable.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/hippodrome-editor-oboservable.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/models/editable-hippodrome.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/entity-editors/polyline-editor/polylines-editor.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/components/polylines-editor/polylines-editor.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/entity-editors/hippodrome-editor/hippodrome-manager.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/entity-editors/hippodrome-editor/hippodrome-editor.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/components/hippodrome-editor/hippodrome-editor.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/draggable-to-map.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/directives/draggable-to-map.directive.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/components/toolbar/ac-toolbar/drag-icon.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/components/toolbar/ac-toolbar-button/ac-toolbar-button.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/components/toolbar/ac-toolbar/ac-toolbar.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/components/range-and-bearing/range-and-bearing.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/zoom-to-rectangle.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/entity-editors/rectangles-editor/rectangles-manager.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/services/entity-editors/rectangles-editor/rectangles-editor.service.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/components/rectangles-editor/rectangles-editor.component.ts","../../../projects/angular-cesium/src/lib/angular-cesium-widgets/angular-cesium-widgets.module.ts","../../../projects/angular-cesium/src/public_api.ts","../../../projects/angular-cesium/src/eliorar-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 = m