{"version":3,"file":"hslayers-ng-components-geolocation.mjs","sources":["../../../projects/hslayers/components/geolocation/geolocation.service.ts","../../../projects/hslayers/components/geolocation/geolocation.component.ts","../../../projects/hslayers/components/geolocation/geolocation.component.html","../../../projects/hslayers/components/geolocation/geolocation.module.ts","../../../projects/hslayers/components/geolocation/hslayers-ng-components-geolocation.ts"],"sourcesContent":["import {Injectable, inject} from '@angular/core';\n\nimport {Circle, Fill, Stroke, Style} from 'ol/style';\nimport {Circle as CircleGeom, Point} from 'ol/geom';\nimport {Feature, Geolocation} from 'ol';\nimport {Rotate} from 'ol/control';\nimport {Vector} from 'ol/source';\nimport {Vector as VectorLayer} from 'ol/layer';\n\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {\n  setRemovable,\n  setShowInLayerManager,\n  setTitle,\n} from 'hslayers-ng/common/extensions';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsGeolocationService {\n  private hsMapService = inject(HsMapService);\n  private hsLayoutService = inject(HsLayoutService);\n\n  /**\n   * Represents geolocation state (on/off)\n   */\n  centering: boolean;\n  accuracyFeature: Feature<CircleGeom>;\n  geolocation: any;\n  clicked: any;\n  cancelClick: boolean;\n  style: any;\n  position_layer: any;\n\n  localization = false;\n\n  trackOrientation = false;\n  orientationListener: EventListenerObject;\n  /**\n   * Represents geolocation tracking option (on/off).\n   * Used to determine state of tracking in directive's html\n   */\n  following = false;\n  gn: any;\n  positionFeature: Feature<Point>;\n  /**\n   * Turns off position centering while 'following'.\n   */\n  constructor() {\n    this.setAccuracyFeature();\n    this.setPositionFeature();\n    this.setStyle();\n\n    this.hsMapService.loaded().then((map) => {\n      this.geolocation = new Geolocation({\n        projection: this.hsMapService.getCurrentProj(),\n        trackingOptions: {\n          enableHighAccuracy: true,\n        },\n      });\n\n      this.accuracyFeature.setStyle(this.style);\n      this.positionFeature.setStyle(this.style);\n\n      this.position_layer = new VectorLayer({\n        source: new Vector(),\n      });\n      setTitle(this.position_layer, 'Position');\n      setShowInLayerManager(this.position_layer, false);\n      setRemovable(this.position_layer, false);\n      const src = this.position_layer.getSource();\n\n      src.addFeature(this.accuracyFeature);\n      src.addFeature(this.positionFeature);\n\n      map.addControl(\n        new Rotate({\n          resetNorth: this.toggleOrientation.bind(this),\n          className: 'ol-rotate hidden',\n          autoHide: false,\n        }),\n      );\n    });\n  }\n\n  /**\n   * Reset all geolocation parameters concerning position tracking\n   */\n  stopTracking(): void {\n    this.following = false;\n    const rotate = this.getRotate();\n    rotate.element.classList.add('hidden');\n    this.geolocation.setTracking(false);\n    this.hsMapService.getMap().getView().setRotation(0);\n  }\n\n  /**\n   * Toggles tracking/following\n   * Takes care of the distinction between click and double-click on mobile\n   */\n  async toggleTracking(): Promise<void> {\n    if (this.clicked) {\n      this.cancelClick = true;\n      if (this.hsLayoutService.sidebarPosition$.getValue() == 'bottom') {\n        this.hsLayoutService.contentWrapper\n          .querySelector('.hs-locationButton')\n          .dispatchEvent(new Event('dblclick'));\n      }\n      return;\n    }\n    this.clicked = true;\n    setTimeout(() => {\n      if (this.cancelClick) {\n        this.cancelClick = false;\n        this.clicked = false;\n        return;\n      }\n      if (this.isCentered()) {\n        if (!this.following) {\n          //position\n          this.geolocation.on('change:position', () => this.setNewPosition());\n          this.geolocation.setTracking(true);\n          this.following = true;\n\n          //rotation\n          this.toggleOrientation();\n        } else {\n          this.stopTracking();\n          this.toggleOrientation();\n        }\n      } else {\n        const position = this.geolocation.getPosition();\n        if (position) {\n          this.hsMapService.getMap().getView().setCenter(position);\n        }\n      }\n\n      //clean up\n      this.cancelClick = false;\n      this.clicked = false;\n    }, 500);\n  }\n\n  /**\n   * Reset all geolocation parameters\n   */\n  stopLocalization(): void {\n    this.localization = false;\n    this.hsMapService.getMap().removeLayer(this.position_layer);\n    this.stopTracking();\n    if (this.trackOrientation) {\n      this.toggleOrientation();\n    }\n  }\n\n  /**\n   * Display current position by querying geolocation, once\n   */\n  startLocalization(): void {\n    if (!this.localization) {\n      this.geolocation.setTracking(true);\n      this.localization = true;\n      this.geolocation.once('change:position', () => {\n        this.setNewPosition();\n        this.hsMapService\n          .getMap()\n          .getView()\n          .setCenter(this.geolocation.getPosition());\n        this.hsMapService.getMap().addLayer(this.position_layer);\n        this.position_layer.setZIndex(99);\n\n        //stop tracking position\n        this.geolocation.setTracking(false);\n      });\n    }\n  }\n\n  /**\n   * Function which determines whether map is centered on current position or not\n   */\n  isCentered(): any {\n    return (\n      JSON.stringify(this.hsMapService.getMap().getView().getCenter()) ===\n      JSON.stringify(this.positionFeature.getGeometry().getCoordinates())\n    );\n  }\n\n  /**\n   * Callback function handling geolocation change:position event\n   */\n  setNewPosition(): void {\n    const position = this.geolocation.getPosition();\n    this.positionFeature.getGeometry().setCoordinates(position);\n    this.accuracyFeature\n      .getGeometry()\n      .setCenterAndRadius(position, this.geolocation.getAccuracy());\n    this.hsMapService.getMap().getView().setCenter(position);\n  }\n\n  toggleOrientation(): void {\n    this.trackOrientation = !this.trackOrientation;\n    this.hsLayoutService.contentWrapper\n      .querySelector('button.ol-rotate')\n      .classList.toggle('active');\n\n    if (this.trackOrientation) {\n      const rotate = this.getRotate();\n      rotate.element.classList.remove('hidden');\n\n      this.orientationListener = this.handleOrientation.bind(this);\n      window.addEventListener('deviceorientation', this.orientationListener);\n    } else {\n      window.removeEventListener('deviceorientation', this.orientationListener);\n      const view = this.hsMapService.getMap().getView();\n      view.setRotation(0);\n    }\n  }\n\n  /**\n   * Orientation change handler\n   */\n  handleOrientation(event: DeviceOrientationEvent) {\n    const alpha = event.alpha ?? 0;\n    this.hsMapService\n      .getMap()\n      .getView()\n      .setRotation((360 - alpha) * (Math.PI / 180));\n  }\n\n  /**\n   * Get map rotate control\n   */\n  private getRotate(): any {\n    for (const control of this.hsMapService.getMap().getControls().getArray()) {\n      if (control instanceof Rotate) {\n        return control;\n      }\n    }\n  }\n\n  /**\n   * Set accuracy feature\n   */\n  private setAccuracyFeature(): void {\n    this.accuracyFeature = new Feature({\n      known: false,\n      geometry: new CircleGeom([0, 0], 1),\n    }) as Feature<CircleGeom>;\n  }\n\n  /**\n   * Set position feature\n   */\n  private setPositionFeature(): void {\n    this.positionFeature = new Feature({\n      known: false,\n      geometry: new Point([0, 0]),\n    }) as Feature<Point>;\n  }\n\n  /**\n   * Set feature style\n   */\n  private setStyle(): void {\n    this.style = new Style({\n      image: new Circle({\n        fill: new Fill({\n          color: [242, 121, 0, 0.7],\n        }),\n        stroke: new Stroke({\n          color: [0xbb, 0x33, 0x33, 0.7],\n        }),\n        radius: 5,\n      }),\n      fill: new Fill({\n        color: [0xbb, 0xbb, 0xbb, 0.2],\n      }),\n      stroke: new Stroke({\n        color: [0x66, 0x66, 0x00, 0.8],\n      }),\n    });\n  }\n}\n","import { Component, OnInit, inject } from '@angular/core';\n\nimport {HsGeolocationService} from './geolocation.service';\nimport {HsGuiOverlayBaseComponent} from 'hslayers-ng/common/panels';\n@Component({\n  selector: 'hs-geolocation',\n  templateUrl: './geolocation.component.html',\n  standalone: false,\n})\nexport class HsGeolocationComponent\n  extends HsGuiOverlayBaseComponent\n  implements OnInit\n{\n  private hsGeolocationService = inject(HsGeolocationService);\n\n  collapsed: boolean;\n\n  name = 'geolocationButton';\n  ngOnInit(): void {\n    this.collapsed = true;\n    super.ngOnInit();\n  }\n  isVisible(): boolean {\n    return (\n      this.hsLayoutService.componentEnabled('geolocationButton') &&\n      this.hsLayoutService.componentEnabled('guiOverlay')\n    );\n  }\n\n  /**\n   * Start localization\n   */\n  startLocalization(): void {\n    this.hsGeolocationService.startLocalization();\n  }\n\n  /**\n   * Stop localization\n   */\n  stopLocalization(): void {\n    this.hsGeolocationService.stopLocalization();\n  }\n\n  /**\n   * Get localization\n   */\n  getLocalization(): boolean {\n    return this.hsGeolocationService.localization;\n  }\n\n  /**\n   * Toggle tracking\n   */\n  toggleTracking(): void {\n    this.hsGeolocationService.toggleTracking();\n  }\n\n  /**\n   * Determine state of tracking\n   */\n  isFollowing(): boolean {\n    return this.hsGeolocationService.following;\n  }\n}\n","<div class=\"hs-locate ol-unselectable ol-control hs-locateToggler\" [hidden]=\"(isVisible$ | async) === false\"\n  [ngClass]=\"{'ol-collapsed': collapsed}\">\n  @if (!getLocalization()) {\n    <button class=\"ol-has-tooltip blocate hs-locateToggler\" [title]=\"'GEOLOCATION.locateMe' | translate\"\n      type=\"button\" (click)=\"startLocalization()\">\n      <i class=\"fa-solid fa-crosshairs hs-locateToggler\"></i>\n    </button>\n  }\n  @if (getLocalization()) {\n    <button class=\"ol-has-tooltip blocate hs-locateToggler hs-locationButton\" type=\"button\"\n      (click)=\"toggleTracking()\" [title]=\"'GEOLOCATION.locateMe' | translate\" (dblclick)=\"stopLocalization()\">\n      <i class=\"fa-solid fa-crosshairs hs-locateToggler\"\n      [ngClass]=\"(isFollowing() && getLocalization()) ? 'fa-location-arrow' : 'location-crosshairs'\"></i>\n    </button>\n  }\n</div>\n","import {CUSTOM_ELEMENTS_SCHEMA, NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {HsGeolocationComponent} from './geolocation.component';\nimport {HsPanelHelpersModule} from 'hslayers-ng/common/panels';\n\n@NgModule({\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  declarations: [HsGeolocationComponent],\n  imports: [FormsModule, CommonModule, HsPanelHelpersModule, TranslatePipe],\n  exports: [HsGeolocationComponent],\n})\nexport class HsGeolocationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["VectorLayer","Vector","CircleGeom","Circle"],"mappings":"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"}