static ddToDms(lat: number, lng: number): string {
 
    let latResult: string;
 
    let lngResult: string;
 
    let dmsResult: string;
 
    latResult = (lat >= 0) ? 'N' : 'S';
 
    lngResult = (lng >= 0) ? 'E' : 'W';
 
    const latitude = this.getDms(lat).latLong + latResult;
 
    const long = this.getDms(lng).latLong + lngResult;
 
    // Joining both variables and separate them with a space.
 
    dmsResult = `<span class="grey">Lat  </span><span>${latitude}, </span><span class="grey">Long </span><span> ${long}</span>`;
 
  
 
    // Return the resultant string
 
    return dmsResult;
 
  }
 
  
 
  static ddToDmsRaw(lat: number, lng: number): string {
 
    let latResult: string;
 
    let lngResult: string;
 
    let dmsResult: string;
 
    latResult = (lat >= 0) ? 'N' : 'S';
 
    lngResult = (lng >= 0) ? 'E' : 'W';
 
    const latitude = this.getDms(lat).latLong + latResult;
 
    const long = this.getDms(lng).latLong + lngResult;
 
    dmsResult = `${latitude}, ${long}`;
 
    return dmsResult;
 
  }
 
  static getTimeWithSuffix(valueInSeconds, duration): string {
 
    const minuteSeconds = 60;
 
    const hourMinutes = 60 * minuteSeconds;
 
    const dayMinutes = (hourMinutes * 24);
 
    const weekMinutes = (dayMinutes * 7);
 
    const monthMinutes = (dayMinutes * 30);
 
    const yearMinutes = (dayMinutes * 365);
 
    const maxAllowedMinutes = (60 * 200000);
 
  
 
    switch (true) {
 
      case valueInSeconds < minuteSeconds:
 
        duration = valueInSeconds + (valueInSeconds === 1 ? ' sec' : ' seconds');
 
        break;
 
      case valueInSeconds < hourMinutes: {
 
        const min = Math.round(valueInSeconds / 60);
 
        duration = min + (min === 1 ? ' min' : ' mins');
 
        break;
 
      }
 
      case valueInSeconds < dayMinutes: {
 
        const hr = Math.round(valueInSeconds / hourMinutes);
 
        duration = hr + (hr === 1 ? ' hr' : ' hrs');
 
        break;
 
      }
 
      case valueInSeconds < weekMinutes: {
 
        const day = Math.round(valueInSeconds / dayMinutes);
 
        duration = day + (day === 1 ? ' day' : ' days');
 
        break;
 
      }
 
      case valueInSeconds < monthMinutes: {
 
        const week = Math.round(valueInSeconds / weekMinutes);
 
        duration = week + (week === 1 ? ' week' : ' weeks');
 
        break;
 
      }
 
      case valueInSeconds < yearMinutes: {
 
        const month = Math.round(valueInSeconds / monthMinutes);
 
        duration = month + (month === 1 ? ' month' : ' months');
 
        break;
 
      }
 
      case valueInSeconds < maxAllowedMinutes: {
 
        const year = Math.round(valueInSeconds / yearMinutes);
 
        duration = year + (year === 1 ? ' year' : ' years');
 
        break;
 
      }
 
      case valueInSeconds > maxAllowedMinutes:
 
        duration = 'N/A';
 
        break;
 
      default:
 
        duration = 'few sec';
 
    }
 
    return duration;
 
  }
 
  
 
  static calculateTimeRemaining(dateIso: string): string {
 
    let duration: string = 'No data';
 
    let date = new Date(dateIso);
 
    let timeInSeconds = date.getTime();
 
    let valueInSeconds = (Date.now() - timeInSeconds);
 
    valueInSeconds = Math.floor(Math.abs(valueInSeconds / 1000));
 
    if (isNaN(valueInSeconds)) {
 
      return duration;
 
    }
 
    if (valueInSeconds < 0) {
 
      return '0';
 
    }
 
    duration = this.getTimeWithSuffix(valueInSeconds, duration);
 
    return duration;
 
  }
 
  static calculateLastCompute(dateIso: number, agoSuffix: boolean = false, addLastUpdatedLabel: boolean = true): string {
 
    let duration: string = 'No data';
 
    let date = new Date(dateIso);
 
    let timeInSeconds = date.getTime();
 
    let valueInSeconds = (Date.now() - timeInSeconds);
 
    valueInSeconds = Math.floor(Math.abs(valueInSeconds / 1000));
 
    if (isNaN(valueInSeconds)) {
 
      return duration;
 
    }
 
    if (valueInSeconds < 0) {
 
      return '0';
 
    }
 
    duration = this.getTimeWithSuffix(valueInSeconds, duration);
 
    if (valueInSeconds === 0) {
 
      duration = 'Just now.';
 
    }
 
    if (agoSuffix === true && valueInSeconds !== 0 && duration !== 'N/A') {
 
      duration = duration + ' ago';
 
    }
 
    if (!addLastUpdatedLabel) {
 
      return `${duration}`;
 
    }
 
    return `${duration} ago`;
 
  }
 
  
 
  static getDms(latlang: number): { latLong: string, courseDegree: number, latLongSeconds: string } {
 
    const dmsObject: { latLong: string, courseDegree: number, latLongSeconds: string } = {
 
      latLong: '',
 
      courseDegree: 0,
 
      latLongSeconds: ''
 
    };
 
  
 
    let courseDegree: string | number;
 
    let min: string | number;
 
    let latLongValue: string;
 
    let latLongSecondsValue: string;
 
    let seconds: number;
 
    latlang = Math.abs(latlang);
 
  
 
    courseDegree = Math.floor(latlang);
 
    latLongValue = courseDegree + '°';
 
  
 
    min = Math.floor((latlang - courseDegree) * 60);
 
    latLongValue += min + '\'';
 
  
 
    latLongSecondsValue = latLongValue;
 
  
 
    seconds = Math.round((latlang - courseDegree - min / 60) * 3600 * 1000) / 1000;
 
    latLongSecondsValue += seconds + '"';
 
  
 
    dmsObject.latLong = latLongValue;
 
    dmsObject.courseDegree = courseDegree;
 
    dmsObject.latLongSeconds = latLongSecondsValue;
 
    return dmsObject;
 
  }
 
  
 
  public static generateMarkerCss(group: string, vessel: IVesselsByState): string {
 
    const nameOfClass: string = group.trim().toLowerCase().split(' ').join('');
 
    (vessel as any).class = 'border_' + nameOfClass;
 
    return nameOfClass;
 
  }
 
  
 
  public static formatDateInFormat(date) {
 
    let month = (date.getMonth() + 1).toString().padStart(2, '0');
 
    let day = date.getDate().toString().padStart(2, '0');
 
    let year = date.getFullYear().toString();
 
    return `${day}-${month}-${year}`;
 
  }
 
  
 
  public static formatDate(date: Date | string): string {
 
    if (!date || isNaN(new Date(date).getTime())) {
 
      return 'Invalid Date';
 
    }
 
    return MapUtility.formatDateInFormat(new Date(date)) + ' ' + new Date(date).toLocaleTimeString(this.dateFormat).substring(0, 5);
 
  }