You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
4.2 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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, //秒 second60分之一分
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; //(毫秒/厘米)
}
}