C#度分秒与弧度制互换(测绘程序设计) | 您所在的位置:网站首页 › 分秒换算怎么写过程 › C#度分秒与弧度制互换(测绘程序设计) |
测绘人接触的最多的就是坐标,除了坐标系统不同之外,同一个坐标的经纬度有时也会表现出不同的坐标形式。 如度分秒(用ddd.mmss表示,ss可以有很多位)或者度(用ddd.d表示,小数可以有很多位)或者弧度(用rad表示) 比如Arcgis图形数据与外部坐标数据互转方法中,要直接导入到arcgis中的坐标就必须是度。 我们要坐标转换,那些投影公式输入的坐标要求的都是弧度。这里只需要加一个转换就可以了。 一、弧度与度的转换 rad = ddd.d / 180 * Math.PI; ddd.d = rad * 180 / Math.PI;二、度分秒与弧度的转换 度分秒的格式为ddd.mmssss 所以将度分秒分别从dd.mmssss中提出来,然后 ddd.d=ddd+mm/60+ssss/3600(ssss这里指的是ss.ss) 输入的是度分秒,转换成度之后,可以再转出弧度 //度分秒转换弧度制dd.mmssss public static double DMS2RAD(double dms) { double deg = Math.Truncate(dms); double min = Math.Truncate((dms - deg) * 100); double sec = (((dms - deg) * 100 - min) * 100); double rad = (deg + min / 60 + sec / 3600) / 180 * Math.PI; return rad; }三、弧度与度分秒的转换 度的整数部分就是度分秒的整数部分 (度的小数部分×60)的整数部分就是度分秒的分,要取2位,不足要补0 (度的小数部分×60)-度分秒的分,然后再乘以60,就是度分秒的秒 输入弧度,先转换为度的形式,再将度转换为度分秒。 public static double RAD2DMS(double rad) { double degree = rad * 180 / Math.PI; double deg = Math.Truncate(degree); double min = Math.Truncate((degree - deg) * 60); double sec = Math.Round(((degree - deg) * 60 - min) * 60, 4); double dms = deg + min / 100 + sec / 10000; return dms; }四、度分秒显示 比赛时经常需要将dd.mmssss以度分秒的形式输出,需要我们再次进行处理 其中为了避免精度损失加了1e-7 输出时就可以以° ′ ″的形式输出了。 public static string DMS2String(double dms) { string str = ""; double dd = (int)dms; double mm = (int)((dms - dd) * 100 + 0.0000001); double ss = (dms - dd - mm / 100) * 10000; str = dd.ToString() + "°" + mm.ToString() + "′" + ss.ToString("0.0") + "″"; return str; } |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |