|
|
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;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 1标准单位转换为毫米
|
|
|
/// </summary>
|
|
|
/// <param name="unit"></param>
|
|
|
/// <returns></returns>
|
|
|
public double Millimetres(int unit)
|
|
|
{
|
|
|
return Millimetres((EType)unit);
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 返回的单位为 毫米
|
|
|
/// </summary>
|
|
|
/// <param name="unit"></param>
|
|
|
/// <returns>返回的单位为 毫米</returns>
|
|
|
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;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 转换为毫米
|
|
|
/// </summary>
|
|
|
/// <param name="data">转换前数据</param>
|
|
|
/// <param name="unit">数据单位</param>
|
|
|
/// <returns>转换为毫米的数据</returns>
|
|
|
public double Millimetres(double data, EType unit)
|
|
|
{
|
|
|
return data * Millimetres(unit);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 转换为米
|
|
|
/// </summary>
|
|
|
/// <param name="data">转换前的数据</param>
|
|
|
/// <param name="unit">转换前数据的单位</param>
|
|
|
/// <returns>转换为米为单位的数据</returns>
|
|
|
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; //(毫秒/厘米)
|
|
|
}
|
|
|
}
|