geolocation-8.x-3.x-dev/js/MapFeature/ClientLocationIndicator.js

js/MapFeature/ClientLocationIndicator.js
import { GeolocationMapFeature } from "./GeolocationMapFeature.js";
import { GeolocationCoordinates } from "../Base/GeolocationCoordinates.js";

/**
 * @prop {String} settings.icon_path
 */
export default class ClientLocationIndicator extends GeolocationMapFeature {
  constructor(settings, map) {
    super(settings, map);

    if (!navigator.geolocation) {
      return;
    }

    /** @type {GeolocationMapMarker} */
    let clientLocationMarker;

    /** @type {GeolocationCircle} */
    let indicatorCircle;

    /** @type {GeolocationCoordinates} */
    let currentCoordinates;

    setInterval(() => {
      navigator.geolocation.getCurrentPosition((currentPosition) => {
        currentCoordinates = new GeolocationCoordinates(currentPosition.coords.latitude, currentPosition.coords.longitude);

        if (!clientLocationMarker) {
          clientLocationMarker = this.map.createMarker(currentCoordinates, {
            id: "current-location",
            title: Drupal.t("Current location"),
            icon: drupalSettings.path.baseUrl + settings.icon_path,
          });
        } else {
          clientLocationMarker.update(currentCoordinates);
        }

        if (indicatorCircle) {
          indicatorCircle.update(currentCoordinates, parseInt(currentPosition.coords.accuracy.toString()));
        } else {
          indicatorCircle = this.map.createCircle(currentCoordinates, parseInt(currentPosition.coords.accuracy.toString()));
        }
      });
    }, 20000);
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc