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;
        }

 

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

湫秋刀鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值