using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using System.IO;
using System.Diagnostics;
namespace GeoSigma.SigmaDrawerUtil
{
public class Unit
{
public enum EType
{
UNIT_KM = 0, //公里 kilometres
UNIT_M = 1, //米 metre
UNIT_DM = 2, //分米 decimeter
UNIT_CM = 3, //厘米 centimeter
UNIT_MM = 4, //毫米 millimetres
UNIT_SECOND = 5, //秒 second(60分之一分)
UNIT_MS = 6, //毫秒 millisecond
UNIT_FOOT = 7, //英尺 foot = 304.8mm
UNIT_INCH = 8, //英寸 inch = 25.4mm
UNIT_MILE = 9, //英里 mile = 1.609*1e6mm
UNIT_YARD = 10, //码 yard = 914.4mm
UNIT_SEA_MILE = 11, //海里 nautical mile = 1852000mm
UNIT_RUSSIAN_MILE = 12, //俄里 Russian mile = 1.0668*1e6mm
UNIT_RUSSIAN_UNIT_OF_LENGTH = 13, //俄丈 Russian unit of length = 2133.6mm
UNIT_JAPANESE_MILE = 14, //日里 Japanese mile = 3.9273*1e6mm
UNIT_JAPANESE_FOOT = 15, //日尺 Japanese foot = 303mm;
//经纬度单位定义
UNIT_DEGREE = 16, //度(360度)
UNIT_DMS = 17, //度分秒,即±DDDMMSS.SSSS格式
UNIT_MINUTE = 18, //分(60分之一度)
UNIT_RADIAN = 19, //弧度
UNIT_GRAD = 20 //梯度 1梯度=0.015707963267949弧度
};
public Unit()
{
msPerCM = 100.0;
}
///
/// 1标准单位转换为毫米
///
///
///
public double Millimetres(int unit)
{
return Millimetres((EType)unit);
}
///
/// 返回的单位为 毫米
///
///
/// 返回的单位为 毫米
public double Millimetres(EType unit)
{
switch (unit)
{
case EType.UNIT_MM: return 1.0;
case EType.UNIT_CM: return 10.0;
case EType.UNIT_DM: return 100.0;
case EType.UNIT_M: return 1000.0;
case EType.UNIT_KM: return 1e6;
case EType.UNIT_SECOND: //return msPerCM * 0.1 * 1000.0; //单位为 毫秒/毫米
case EType.UNIT_MS: return msPerCM * 0.1; //单位为 毫秒/毫米
case EType.UNIT_FOOT: return 304.8;
case EType.UNIT_INCH: return 25.4;
case EType.UNIT_MILE: return 1.609 * 1e6;
case EType.UNIT_YARD: return 914.4;
case EType.UNIT_SEA_MILE: return 1852000.0;
case EType.UNIT_RUSSIAN_MILE: return 1.0668 * 1e6;
case EType.UNIT_RUSSIAN_UNIT_OF_LENGTH: return 2133.6;
case EType.UNIT_JAPANESE_MILE: return 3.9273 * 1e6;
case EType.UNIT_JAPANESE_FOOT: return 303;
}
return 1.0;
}
///
/// 转换为毫米
///
/// 转换前数据
/// 数据单位
/// 转换为毫米的数据
public double Millimetres(double data, EType unit)
{
return data * Millimetres(unit);
}
///
/// 转换为米
///
/// 转换前的数据
/// 转换前数据的单位
/// 转换为米为单位的数据
public double Meter(double data, EType unit)
{
return Millimetres(data, unit) * 0.001;
}
public double Meter(EType unit)
{
return Millimetres(unit) * 0.001;
}
public double GetMillisecondPerCM()
{
return msPerCM;
}
double msPerCM; //(毫秒/厘米)
}
}