{"version":3,"file":"hslayers-ng-components-measure.mjs","sources":["../../../projects/hslayers/components/measure/measure.service.ts","../../../projects/hslayers/components/measure/measure.component.ts","../../../projects/hslayers/components/measure/measure.component.html","../../../projects/hslayers/components/measure/measure-toolbar.component.ts","../../../projects/hslayers/components/measure/measure.module.ts","../../../projects/hslayers/components/measure/hslayers-ng-components-measure.ts"],"sourcesContent":["import {Injectable, inject} from '@angular/core';\n\nimport {Draw} from 'ol/interaction';\nimport {Feature} from 'ol';\nimport {Fill, Stroke, Style} from 'ol/style';\nimport {Geometry, LineString, Polygon} from 'ol/geom';\nimport {Vector as VectorLayer} from 'ol/layer';\nimport {Vector as VectorSource} from 'ol/source';\n\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {formatLength, formatArea, instOf} from 'hslayers-ng/services/utils';\nimport {setTitle} from 'hslayers-ng/common/extensions';\nimport {Measurement} from 'hslayers-ng/types';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsMeasureService {\n  hsMapService = inject(HsMapService);\n  hsEventBusService = inject(HsEventBusService);\n\n  draw: Draw;\n  data = {\n    measurements: [],\n    multipleShapeMode: false,\n  };\n  /**\n   * sketches Array of measure sketches\n   */\n  sketches: Feature<Geometry>[] = [];\n  lastMeasurementId: number;\n  measureVector: VectorLayer<VectorSource<Feature>>;\n  measuringActivated = false;\n\n  constructor() {\n    this.setMeasureLayer();\n    setTitle(this.measureVector, 'Measurement sketches');\n  }\n\n  /**\n   * Enable/disable multiple shape mode for measuring (switch without parameter)\n   * @param mode - Optional parameter if multiple shape mode should be enabled\n   */\n  switchMultipleMode(mode?: boolean): void {\n    if (mode !== undefined) {\n      this.data.multipleShapeMode = mode;\n    } else {\n      this.data.multipleShapeMode = !this.data.multipleShapeMode;\n    }\n  }\n\n  /**\n   * Set new measure vector layer\n   */\n  setMeasureLayer(): void {\n    this.measureVector = new VectorLayer({\n      source: new VectorSource(),\n      style: new Style({\n        fill: new Fill({\n          color: 'rgba(255, 255, 255, 0.2)',\n        }),\n        stroke: new Stroke({\n          color: '#ffcc33',\n          width: 2,\n        }),\n      }),\n    });\n  }\n\n  /**\n   * Change geometry type of measurement without deleting of old ones\n   * @param type - Geometry type of measurement ('area' for polygon, 'line' for linestring)\n   */\n  changeMeasureParams(type: string): void {\n    this.hsMapService.getMap().removeInteraction(this.draw);\n    this.sketches = [];\n    this.addInteraction(type);\n  }\n\n  /**\n   * Clear all measurements and restart measuring\n   */\n  clearMeasurement(): void {\n    this.draw.setActive(false);\n    this.data.measurements = [];\n    this.measureVector.getSource().clear();\n    this.sketches = [];\n    this.draw.setActive(true);\n  }\n\n  /**\n   * Start measuring interaction in app\n   */\n  activateMeasuring(type: string): void {\n    if (this.measuringActivated) {\n      return;\n    }\n    const map = this.hsMapService.getMap();\n    if (!map) {\n      setTimeout(() => {\n        this.activateMeasuring(type);\n      }, 500);\n      return;\n    }\n    map.addLayer(this.measureVector);\n    map.getViewport().addEventListener('mousemove', (evt) => {\n      this.mouseMoveHandler(evt);\n    });\n    map.getViewport().addEventListener('touchmove', (evt) => {\n      this.mouseMoveHandler(evt);\n    });\n    map.getViewport().addEventListener('touchend', (evt) => {\n      this.mouseMoveHandler(evt);\n    });\n\n    this.addInteraction(type);\n    this.measuringActivated = true;\n  }\n\n  /**\n   * Stop measuring interaction in app\n   */\n  deactivateMeasuring(): void {\n    this.hsMapService.loaded().then((map) => {\n      map.getViewport().removeEventListener('mousemove', (evt) => {\n        this.mouseMoveHandler(evt);\n      });\n      map.getViewport().removeEventListener('touchmove', (evt) => {\n        this.mouseMoveHandler(evt);\n      });\n      map.getViewport().removeEventListener('touchend', (evt) => {\n        this.mouseMoveHandler(evt);\n      });\n\n      map.removeInteraction(this.draw);\n      map.removeLayer(this.measureVector);\n    });\n    this.measuringActivated = false;\n    this.hsEventBusService.measurementEnds.next(); //better emit drawingEnds here\n  }\n\n  /**\n   * Callback for mouse and touch move event, compute live measurement results\n   * @param evt - Callback param for mouse move event\n   */\n  mouseMoveHandler(evt): void {\n    if (this.sketches.length > 0) {\n      let output: Measurement;\n\n      for (const sketch of this.sketches) {\n        const geom = sketch.getGeometry();\n        if (instOf(geom, Polygon)) {\n          output = this.addMultiple(\n            formatArea(geom as Polygon, this.hsMapService.getCurrentProj()),\n            output,\n          );\n        } else if (instOf(geom, LineString)) {\n          output = this.addMultiple(\n            formatLength(\n              geom as LineString,\n              this.hsMapService.getCurrentProj(),\n            ),\n            output,\n          );\n        }\n      }\n      //output.geom = this.sketch;\n      setTimeout(() => {\n        this.data.measurements[this.lastMeasurementId] = output;\n      }, 0);\n    }\n  }\n\n  /**\n   * Adds two measure results for multiple shape mode to display joined result\n   * @param val1 - Output of new object\n   * @param val2 - Old value\n   */\n  addMultiple(val1: Measurement, val2: Measurement): Measurement {\n    if (val2 == undefined) {\n      return val1;\n    }\n    let unit = val1.unit;\n    const type = val1.type;\n    let value: number;\n    if (val1.unit == val2.unit) {\n      value = Math.round((val1.size + val2.size) * 100) / 100;\n      if (unit == 'm' && type == 'length' && value > 1000) {\n        value = Math.round((value / 1000) * 100) / 100;\n        unit = 'km';\n      } else if (unit == 'm' && type == 'area' && value > 10000) {\n        value = Math.round((value / 1000000) * 100) / 100;\n        unit = 'km';\n      }\n    } else {\n      const arr = [val1, val2];\n      for (let i = 0; i < arr.length; i++) {\n        if (arr[i].unit == 'm') {\n          if (type == 'length') {\n            arr[i].size /= 1000;\n          } else {\n            arr[i].size /= 1000000;\n          }\n        }\n      }\n      value = Math.round((arr[0].size + arr[1].size) * 100) / 100;\n      unit = 'km';\n    }\n    return {\n      size: value,\n      type: type,\n      unit: unit,\n    };\n  }\n\n  /**\n   * Initialize draw interaction on Ol.map and event handlers for handling start and end of drawing\n   * @param type - Geometry type\n   */\n  addInteraction(type: string): void {\n    const drawType = type == 'area' ? 'Polygon' : 'LineString';\n    this.draw = new Draw({\n      source: this.measureVector.getSource(),\n      type: drawType,\n      dragVertexDelay: 150,\n    });\n    this.hsMapService.getMap().addInteraction(this.draw);\n\n    this.draw.on('drawstart', (evt) => {\n      this.hsEventBusService.measurementStarts.next();\n      if (this.data.multipleShapeMode) {\n        if (!Array.isArray(this.sketches)) {\n          this.sketches = [];\n          this.data.measurements.push({\n            size: 0,\n            unit: '',\n          });\n        }\n        this.sketches.push(evt.feature);\n      } else {\n        this.sketches = [evt.feature];\n        this.data.measurements.push({\n          size: 0,\n          unit: '',\n        });\n      }\n      this.lastMeasurementId = this.data.measurements.length - 1;\n    });\n\n    this.draw.on('drawend', (evt) => {\n      this.hsEventBusService.measurementEnds.next();\n    });\n  }\n}\n","import {Component, OnInit, PLATFORM_ID, inject} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsMeasureService} from './measure.service';\nimport {HsPanelBaseComponent} from 'hslayers-ng/common/panels';\n\n@Component({\n  selector: 'hs-measure',\n  templateUrl: './measure.component.html',\n  standalone: false,\n})\nexport class HsMeasureComponent extends HsPanelBaseComponent implements OnInit {\n  private hsEventBusService = inject(HsEventBusService);\n  hsMeasureService = inject(HsMeasureService);\n  private platformId = inject(PLATFORM_ID);\n\n  type: string;\n  name = 'measure';\n\n  ngOnInit() {\n    super.ngOnInit();\n    this.type = 'distance';\n    if (isPlatformBrowser(this.platformId)) {\n      document.addEventListener('keyup', (e) => {\n        if (e.key == 'Control') {\n          //ControlLeft\n          setTimeout(() => {\n            this.hsMeasureService.switchMultipleMode();\n          }, 0);\n        }\n      });\n    }\n    this.hsEventBusService.measurementStarts\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        this.hsLayoutService.panelEnabled('toolbar', false);\n      });\n\n    this.hsEventBusService.measurementEnds\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        this.hsLayoutService.panelEnabled('toolbar', true);\n      });\n\n    this.hsLayoutService.mainpanel$\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((which) => {\n        if (this.hsLayoutService.mainpanel == 'measure') {\n          this.hsMeasureService.activateMeasuring(this.type);\n        } else {\n          this.hsMeasureService.deactivateMeasuring();\n        }\n      });\n\n    //Temporary fix when measure panel is loaded as default (e.g. reloading page with parameters in link)\n    if (this.hsLayoutService.mainpanel == 'measure') {\n      this.hsMeasureService.activateMeasuring(this.type);\n    }\n  }\n\n  /**\n   * Change geometry type of measurement without deleting of old ones\n   */\n  changeMeasureParams(): void {\n    if (this.hsLayoutService.mainpanel != 'measure') {\n      return;\n    }\n    this.hsMeasureService.changeMeasureParams(this.type);\n  }\n\n  /**\n   * Reset sketch and all measurements to start new drawing\n   */\n  clearAll(): void {\n    this.hsMeasureService.clearMeasurement();\n  }\n}\n","@if (isVisible$ | async) {\n  <div class=\"card hs-main-panel\">\n    <hs-panel-header name=\"measure\" [panelTabs]=\"'MEASURE'\">\n    </hs-panel-header>\n    <div class=\"card-body p-2\">\n      <div class=\"mb-2\">\n        {{'MEASURE.multipleShapes' | translate }}\n        <div class=\"btn-group btn-group-toggle\">\n          <label class=\"btn btn-sm btn-secondary\" [ngClass]=\"{'active': hsMeasureService.data.multipleShapeMode === true}\"\n            for=\"hs-measure-multiple-true\">\n            {{'COMMON.on' | translate | uppercase}}\n            <input type=\"radio\" name=\"multiple\" id=\"hs-measure-multiple-true\" [value]=\"true\"\n              [(ngModel)]=\"hsMeasureService.data.multipleShapeMode\">\n          </label>\n          <label class=\"btn btn-sm btn-secondary\"\n            [ngClass]=\"{'active': hsMeasureService.data.multipleShapeMode === false}\" for=\"hs-measure-multiple-false\">\n            {{'COMMON.off' | translate | uppercase}}\n            <input type=\"radio\" name=\"multiple\" id=\"hs-measure-multiple-false\" [value]=\"false\"\n              [(ngModel)]=\"hsMeasureService.data.multipleShapeMode\">\n          </label>\n        </div>\n      </div>\n      <div class=\"btn-group btn-group-toggle mb-2\">\n        <label class=\"btn btn-secondary\" [ngClass]=\"{'active': type === 'distance'}\" for=\"hs-measure-distance\">\n          {{'COMMON.distance' | translate }}\n          <input type=\"radio\" name=\"type\" id=\"hs-measure-distance\" value=\"distance\" [(ngModel)]=\"type\"\n            (ngModelChange)=\"changeMeasureParams()\">\n        </label>\n        <label class=\"btn btn-secondary\" [ngClass]=\"{'active': type === 'area'}\" for=\"hs-measure-area\">\n          {{'COMMON.area' | translate }}\n          <input type=\"radio\" name=\"type\" id=\"hs-measure-area\" value=\"area\" [(ngModel)]=\"type\"\n            (ngModelChange)=\"changeMeasureParams()\">\n        </label>\n      </div>\n      <button class=\"btn btn-secondary float-end\" (click)=\"clearAll()\">{{'COMMON.clear' | translate\n      }}</button>\n      <ul class=\"list-group\">\n        @for (measurement of hsMeasureService.data.measurements; track measurement) {\n          <li class=\"list-group-item\">\n            {{measurement?.size}}&nbsp;{{measurement?.unit}}@if (measurement?.type === 'Area') {\n            <span><sup>2</sup></span>\n          }\n        </li>\n      }\n    </ul>\n  </div>\n</div>\n}\n","import {AsyncPipe} from '@angular/common';\nimport {Component} from '@angular/core';\nimport {of} from 'rxjs';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {HsGuiOverlayBaseComponent} from 'hslayers-ng/common/panels';\n\n@Component({\n  selector: 'hs-measure-toolbar',\n  template: `\n    <div class=\"nav-item\" [hidden]=\"(isVisible$ | async) === false\">\n      <button\n        class=\"btn hs-toolbar-button btn-light text-secondary\"\n        [title]=\"'TOOLBAR.measureLinesAndPolygon' | translate\"\n        (click)=\"measureButtonClicked()\"\n      >\n        <i class=\"fa-solid fa-ruler\"></i>\n      </button>\n    </div>\n  `,\n  imports: [TranslatePipe, AsyncPipe],\n})\nexport class HsMeasureToolbarComponent extends HsGuiOverlayBaseComponent {\n  constructor() {\n    super();\n  }\n  name = 'measureToolbar';\n\n  measureButtonClicked(): void {\n    this.hsLayoutService.setMainPanel('measure', true);\n  }\n\n  /**\n   * Override parent class componentEnabled. Used to determine isVisible$ value\n   */\n  componentEnabled() {\n    return of(\n      this.hsLayoutService.panelEnabled('measure') &&\n        this.hsLayoutService.componentEnabled(this.name) &&\n        this.hsLayoutService.componentEnabled('guiOverlay'),\n    );\n  }\n}\n","import {CUSTOM_ELEMENTS_SCHEMA, NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {NgbDropdownModule} from '@ng-bootstrap/ng-bootstrap';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {HsMeasureComponent} from './measure.component';\nimport {HsMeasureToolbarComponent} from './measure-toolbar.component';\nimport {\n  HsPanelHeaderComponent,\n  HsPanelHelpersModule,\n} from 'hslayers-ng/common/panels';\n\n@NgModule({\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  declarations: [HsMeasureComponent],\n  imports: [\n    CommonModule,\n    FormsModule,\n    HsPanelHelpersModule,\n    NgbDropdownModule,\n    TranslatePipe,\n    HsPanelHeaderComponent,\n    HsMeasureToolbarComponent,\n  ],\n  exports: [HsMeasureComponent, HsMeasureToolbarComponent],\n})\nexport class HsMeasureModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["VectorLayer","VectorSource"],"mappings":"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"}