{"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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"}