c# WGS84坐标转换成UTM坐标

通过查阅相关资料,有一篇博客里面给出了WGS84坐标转换成UTM坐标的功能,该博主使用matlab程序实现坐标的转换,基于已有的公式,用c#语言实现坐标的转换。
参考的博客连接如下:
https://blog.csdn.net/tap880507/article/details/88172120.
c#实现坐标转换的代码如下:

       public static double a = 6378.137, e = 0.0818192;
        public static double k0 = 0.9996, E0 = 500, N0 = 0;//E0单位是千米
        public static double pi = Math.PI;
        
        /// <summary>
        /// 北斗坐标转换成utm坐标
        /// </summary>
        /// <param name="lng">经度</param>
        /// <param name="lat">纬度</param>
        /// <returns>utm坐标</returns>
        public static string[] bdToUTM(double lng,double lat)
        {
            // lamda经度的弧度 phi是纬度弧度
            double phi = lat * pi / 180;
            double lamda = lng * pi / 180;
            string[] newUTM = new string[2];
            #region
            int zoneNumber =(int)Math.Floor(lng / 6) + 31;//分区 一共分为60个区次经度所在的分区
            double V0 = 1 / Math.Sqrt(1 - e * e * Math.Sin(phi) * Math.Sin(phi));
            double lamda0 = (zoneNumber - 1) * 6 - 180 + 3;
            lamda0 = lamda0 * pi / 180;
            double A = (lamda - lamda0) * Math.Cos(phi);
            double T = Math.Tan(phi) * Math.Tan(phi);
            double C = e * e * Math.Cos(phi) * Math.Cos(phi) / (1 - e * e);
            double S = (1 - e * e / 4 - 3 * e * e / 64 - 5 * e * e * e * e * e * e / 256) * phi - (3 * e * e / 8 + 3 * e * e * e * e / 32 + 45 * e * e * e * e * e * e / 1024) * Math.Sin(2 * phi) + (15 * e * e * e * e / 256 + 45 * e * e * e * e * e * e / 1024) * Math.Sin(4 * phi) - 35 * e * e * e * e * e * e * Math.Sin(6 * phi) / 3072;
            #endregion
            double UTMY = E0 + k0 * a * V0*(A + (1 - T + C) * A * A * A / 6 + (5 - 18 * T + T * T) * A * A * A / 120);
            double UTMX = N0 + k0 * a * (S + V0 * Math.Tan(A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24 + (61 - 58 * T + T * T) * A * A * A * A * A * A / 720));
            UTMX = UTMX * 1000;
            UTMY = UTMY * 1000;
            newUTM[0] = UTMX.ToString();
            newUTM[1] = UTMY.ToString();
            return newUTM;

        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值