{"version":3,"file":"MeasureUnits.mjs","sources":["../../../../../packages/shared/src/MeasureUnits.ts"],"sourcesContent":["import { defaultValue } from '@vue-cesium/utils/util'\n\nconst DistanceUnits = Object.freeze({\n  METERS: 'METERS',\n  CENTIMETERS: 'CENTIMETERS',\n  KILOMETERS: 'KILOMETERS',\n  FEET: 'FEET',\n  US_SURVEY_FEET: 'US_SURVEY_FEET',\n  INCHES: 'INCHES',\n  YARDS: 'YARDS',\n  MILES: 'MILES'\n})\n\nconst AreaUnits = Object.freeze({\n  SQUARE_METERS: 'SQUARE_METERS',\n  SQUARE_CENTIMETERS: 'SQUARE_CENTIMETERS',\n  SQUARE_KILOMETERS: 'SQUARE_KILOMETERS',\n  SQUARE_FEET: 'SQUARE_FEET',\n  SQUARE_INCHES: 'SQUARE_INCHES',\n  SQUARE_YARDS: 'SQUARE_YARDS',\n  SQUARE_MILES: 'SQUARE_MILES',\n  ACRES: 'ACRES',\n  HECTARES: 'HECTARES'\n})\n\nconst VolumeUnits = Object.freeze({\n  CUBIC_METERS: 'CUBIC_METERS',\n  CUBIC_CENTIMETERS: 'CUBIC_CENTIMETERS',\n  CUBIC_KILOMETERS: 'CUBIC_KILOMETERS',\n  CUBIC_FEET: 'CUBIC_FEET',\n  CUBIC_INCHES: 'CUBIC_INCHES',\n  CUBIC_YARDS: 'CUBIC_YARDS',\n  CUBIC_MILES: 'CUBIC_MILES'\n})\n\nconst AngleUnits = Object.freeze({\n  DEGREES: 'DEGREES',\n  RADIANS: 'RADIANS',\n  DEGREES_MINUTES_SECONDS: 'DEGREES_MINUTES_SECONDS',\n  GRADE: 'GRADE',\n  RATIO: 'RATIO'\n})\n\nclass MeasureUnits {\n  distanceUnits: string\n  areaUnits: string\n  volumeUnits: string\n  angleUnits: string\n  slopeUnits: string\n\n  constructor(options?) {\n    options = defaultValue(options, {})\n    this.distanceUnits = defaultValue(options.distanceUnits, DistanceUnits.METERS)\n    this.areaUnits = defaultValue(options.areaUnits, AreaUnits.SQUARE_METERS)\n    this.volumeUnits = defaultValue(options.volumeUnits, VolumeUnits.CUBIC_METERS)\n    this.angleUnits = defaultValue(options.angleUnits, AngleUnits.DEGREES)\n    this.slopeUnits = defaultValue(options.slopeUnits, AngleUnits.DEGREES)\n  }\n\n  static numberToString = function (number, locale, decimals) {\n    return numberToFormattedString(number, locale, decimals)\n  }\n\n  static distanceToString(distance: number, distanceUnits: string, locale?, decimals?) {\n    distance = MeasureUnits.convertDistance(distance, DistanceUnits.METERS, distanceUnits)\n    return (\n      numberToFormattedString(distance, locale, decimals) +\n      MeasureUnits.getDistanceUnitSpacing(distanceUnits) +\n      MeasureUnits.getDistanceUnitSymbol(distanceUnits)\n    )\n  }\n\n  static areaToString(area: number, areaUnits: string, locale?, decimals?) {\n    area = MeasureUnits.convertArea(area, AreaUnits.SQUARE_METERS, areaUnits)\n    return numberToFormattedString(area, locale, decimals) + MeasureUnits.getAreaUnitSpacing(areaUnits) + MeasureUnits.getAreaUnitSymbol(areaUnits)\n  }\n\n  static angleToString(angle: number, angleUnits: string, locale?, decimals?) {\n    const { Math: CesiumMath } = Cesium\n    if (angleUnits === AngleUnits.DEGREES || angleUnits === AngleUnits.RADIANS || angleUnits === AngleUnits.GRADE) {\n      angle = convertAngleFromRadians(angle, angleUnits)\n\n      return (\n        numberToFormattedString(angle, locale, decimals) + MeasureUnits.getAngleUnitSpacing(angleUnits) + MeasureUnits.getAngleUnitSymbol(angleUnits)\n      )\n    }\n\n    if (angleUnits === AngleUnits.DEGREES_MINUTES_SECONDS) {\n      const angleDegrees = CesiumMath.toDegrees(angle)\n      const prefix = angleDegrees < 0 ? '-' : ''\n      const degrees = Math.floor(angleDegrees)\n      const minutes = 60 * (angleDegrees - degrees)\n      const seconds = Math.floor(minutes)\n      return prefix + degrees + '° ' + seconds + \"' \" + numberToFormattedString(60 * (minutes - seconds), void 0, decimals) + '\"'\n    }\n    if (angleUnits === AngleUnits.RATIO) {\n      //\n    }\n  }\n\n  static volumeToString(volume: number, volumeUnits: string, locale?, decimals?) {\n    volume = MeasureUnits.convertArea(volume, VolumeUnits.CUBIC_METERS, volumeUnits)\n    return (\n      numberToFormattedString(volume, locale, decimals) +\n      MeasureUnits.getVolumeUnitSpacing(volumeUnits) +\n      MeasureUnits.getVolumeUnitSymbol(volumeUnits)\n    )\n  }\n\n  static getDistanceUnitSpacing(distanceUnits: string) {\n    return ' '\n  }\n\n  static getAreaUnitSpacing(distanceUnits: string) {\n    return ' '\n  }\n\n  static getAngleUnitSpacing(angleUnits: string) {\n    return angleUnits === AngleUnits.RADIANS ? ' ' : ''\n  }\n\n  static getVolumeUnitSpacing(distanceUnits: string) {\n    return ' '\n  }\n\n  static getDistanceUnitSymbol(distanceUnits: string) {\n    switch (distanceUnits) {\n      case DistanceUnits.METERS:\n        return 'm'\n      case DistanceUnits.CENTIMETERS:\n        return 'cm'\n      case DistanceUnits.KILOMETERS:\n        return 'km'\n      case DistanceUnits.FEET:\n      case DistanceUnits.US_SURVEY_FEET:\n        return 'ft'\n      case DistanceUnits.INCHES:\n        return 'in'\n      case DistanceUnits.YARDS:\n        return 'yd'\n      case DistanceUnits.MILES:\n        return 'mi'\n      default:\n        return void 0\n    }\n  }\n\n  static getAreaUnitSymbol(areaUnits: string) {\n    switch (areaUnits) {\n      case AreaUnits.SQUARE_METERS:\n        return 'm²'\n      case AreaUnits.SQUARE_CENTIMETERS:\n        return 'cm²'\n      case AreaUnits.SQUARE_KILOMETERS:\n        return 'km²'\n      case AreaUnits.SQUARE_FEET:\n        return 'sq ft'\n      case AreaUnits.SQUARE_INCHES:\n        return 'sq in'\n      case AreaUnits.SQUARE_YARDS:\n        return 'sq yd'\n      case AreaUnits.SQUARE_MILES:\n        return 'sq mi'\n      case AreaUnits.ACRES:\n        return 'ac'\n      case AreaUnits.HECTARES:\n        return 'ha'\n      default:\n        return void 0\n    }\n  }\n\n  static getVolumeUnitSymbol(volumeUnits) {\n    switch (volumeUnits) {\n      case VolumeUnits.CUBIC_METERS:\n        return 'm³'\n      case VolumeUnits.CUBIC_CENTIMETERS:\n        return 'cm³'\n      case VolumeUnits.CUBIC_KILOMETERS:\n        return 'km³'\n      case VolumeUnits.CUBIC_FEET:\n        return 'cu ft'\n      case VolumeUnits.CUBIC_INCHES:\n        return 'cu in'\n      case VolumeUnits.CUBIC_YARDS:\n        return 'cu yd'\n      case VolumeUnits.CUBIC_MILES:\n        return 'cu mi'\n      default:\n        return void 0\n    }\n  }\n\n  static getAngleUnitSymbol(angleUnits) {\n    return angleUnits === AngleUnits.DEGREES ? '°' : angleUnits === AngleUnits.RADIANS ? 'rad' : angleUnits === AngleUnits.GRADE ? '%' : void 0\n  }\n\n  static convertDistance(distance: number, distanceUnitsFrom: string, distanceUnitsTo: string) {\n    return distanceUnitsFrom === distanceUnitsTo\n      ? distance\n      : distance * getDistanceUnitConversion(distanceUnitsFrom) * (1 / getDistanceUnitConversion(distanceUnitsTo))\n  }\n\n  static convertArea(area: number, areaUnitsFrom: string, areaUnitsTo: string) {\n    return areaUnitsFrom === areaUnitsTo ? area : area * getAreaUnitConversion(areaUnitsFrom) * (1 / getAreaUnitConversion(areaUnitsTo))\n  }\n\n  static convertVolume(volume: number, volumeUnitsFrom: string, volumeUnitsTo: string) {\n    return volumeUnitsFrom === volumeUnitsTo\n      ? volume\n      : volume * getVolumeUnitConversion(volumeUnitsFrom) * (1 / getVolumeUnitConversion(volumeUnitsTo))\n  }\n\n  static convertAngle(angle: number, angleUnitsFrom: string, angleUnitsTo: string) {\n    return angleUnitsFrom === angleUnitsTo ? angle : convertAngleFromRadians(convertAngleToRadians(angle, angleUnitsFrom), angleUnitsTo)\n  }\n\n  static longitudeToString(longitude, angleUnits, locale, decimals) {\n    return MeasureUnits.angleToString(Math.abs(longitude), angleUnits, locale, decimals) + ' ' + (longitude < 0 ? 'W' : 'E')\n  }\n\n  static latitudeToString(latitude, angleUnits, locale, decimals) {\n    return MeasureUnits.angleToString(Math.abs(latitude), angleUnits, locale, decimals) + ' ' + (latitude < 0 ? 'S' : 'N')\n  }\n}\n\nfunction getDistanceUnitConversion(distanceUnits: string) {\n  switch (distanceUnits) {\n    case DistanceUnits.METERS:\n      return 1\n    case DistanceUnits.CENTIMETERS:\n      return 0.01\n    case DistanceUnits.KILOMETERS:\n      return 1000\n    case DistanceUnits.FEET:\n      return 0.3048\n    case DistanceUnits.US_SURVEY_FEET:\n      return 1200 / 3937\n    case DistanceUnits.INCHES:\n      return 0.254\n    case DistanceUnits.YARDS:\n      return 0.9144\n    case DistanceUnits.MILES:\n      return 1609.344\n    default:\n      return 1\n  }\n}\n\nfunction getAreaUnitConversion(areaUnits: string) {\n  switch (areaUnits) {\n    case AreaUnits.SQUARE_METERS:\n      return 1\n    case AreaUnits.SQUARE_CENTIMETERS:\n      return 0.0001\n    case AreaUnits.SQUARE_KILOMETERS:\n      return 1000000\n    case AreaUnits.SQUARE_FEET:\n      return 0.09290304\n    case AreaUnits.SQUARE_INCHES:\n      return 64516e-8\n    case AreaUnits.SQUARE_YARDS:\n      return 0.83612736\n    case AreaUnits.SQUARE_MILES:\n      return 2589988.110336\n    case AreaUnits.ACRES:\n      return 4046.85642232\n    case AreaUnits.HECTARES:\n      return 10000\n    default:\n      return 1\n  }\n}\n\nfunction getVolumeUnitConversion(volumeUnits: string) {\n  switch (volumeUnits) {\n    case VolumeUnits.CUBIC_METERS:\n      return 1\n    case VolumeUnits.CUBIC_CENTIMETERS:\n      return 1e-6\n    case VolumeUnits.CUBIC_KILOMETERS:\n      return 1e9\n    case VolumeUnits.CUBIC_FEET:\n      return 0.09290304 * 0.3048\n    case VolumeUnits.CUBIC_INCHES:\n      return 16387064e-12\n    case VolumeUnits.CUBIC_YARDS:\n      return 0.764554857984\n    case VolumeUnits.CUBIC_MILES:\n      return 4168181825.44058\n    default:\n      return 1\n  }\n}\n\nfunction convertAngleToRadians(angle, angleUnits) {\n  const { defined, Math: CesiumMath, RuntimeError } = Cesium\n  if (angleUnits === AngleUnits.RADIANS) return angle\n  if (angleUnits === AngleUnits.DEGREES) return CesiumMath.toRadians(angle)\n  if (angleUnits === AngleUnits.GRADE) return angle === Number.POSITIVE_INFINITY ? CesiumMath.PI_OVER_TWO : Math.atan(angle / 100)\n  if (angleUnits === AngleUnits.RATIO) return Math.atan(angle)\n  if (angleUnits === AngleUnits.DEGREES_MINUTES_SECONDS) {\n    const degreesMinutesSecondsRegex = /(-?)(\\d+)\\s*°\\s*(\\d+)\\s*'\\s*([\\d.,]+)\"\\s*([WENS]?)/i\n    const result = degreesMinutesSecondsRegex.exec(angle) || []\n    if (!defined(result)) throw new RuntimeError('Could not convert angle to radians: ' + angle)\n    let r = 0 < result[1].length ? -1 : 1\n    const degrees = parseInt(result[2])\n    const minutes = parseInt(result[3])\n    const seconds = parseFloat(result[4])\n    let s = result[5]\n    1 === s.length && (('W' !== (s = s.toUpperCase()) && 'S' !== s) || (r *= -1))\n    const l = r * (degrees + minutes / 60 + seconds / 3600)\n    return CesiumMath.toRadians(l)\n  }\n}\n\nfunction convertAngleFromRadians(angle, angleUnits) {\n  const { Math: CesiumMath } = Cesium\n  if (angleUnits === AngleUnits.RADIANS) {\n    return angle\n  } else if (angleUnits === AngleUnits.DEGREES) {\n    return CesiumMath.toDegrees(angle)\n  } else if (angleUnits === AngleUnits.GRADE) {\n    if (CesiumMath.clamp(angle, 0, CesiumMath.PI_OVER_TWO) === CesiumMath.PI_OVER_TWO) {\n      return Number.POSITIVE_INFINITY\n    } else {\n      return 100 * Math.tan(angle)\n    }\n  } else if (angleUnits === AngleUnits.RATIO) {\n    return Math.sin(angle) / Math.cos(angle)\n  }\n\n  return void 0\n}\n\nfunction numberToFormattedString(number, locale, decimals) {\n  const options = getLocaleFormatStringOptions(decimals, number, locale)\n  const strLocale = number.toLocaleString(locale, options)\n  const negativeZero = -0\n  const positiveZero = 0\n  return strLocale === negativeZero.toLocaleString(locale, options) ? positiveZero.toLocaleString(locale, options) : strLocale\n}\n\nfunction getLocaleFormatStringOptions(decimals, number?, locale?) {\n  let numberFormatter = {\n    minimumFractionDigits: 0,\n    maximumFractionDigits: 0\n  }\n  decimals = Cesium.defaultValue(decimals, 2)\n  if (typeof decimals === 'number') {\n    numberFormatter.minimumFractionDigits = decimals\n    numberFormatter.maximumFractionDigits = decimals\n  } else {\n    numberFormatter = typeof decimals === 'function' ? decimals(number, locale) : decimals\n  }\n  return numberFormatter\n}\n\nexport default MeasureUnits\n\nexport { DistanceUnits, AreaUnits, VolumeUnits, AngleUnits }\n"],"names":[],"mappings":"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"}