本文主要是介绍WGS84经纬度坐标6度分带高斯投影正算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
WGS84坐标系下的经纬度坐标经过投影可以转换为平面坐标,本文采用高斯投影正算,6度带投影。
中央子午线的概念:
由于控制投影变形的大小,所以引入中央子午线的概念控制投影变形。
分带:投影带分为3度带与6度带
带号:
3度分带:以本初子午线东偏1.5度开始,3度为1带。
6度分带:本初子午线起,东偏6度为1带。
带号和中央子午线的关系:
若已知某点的经度为λ,则该点的6º带的带号N由下式计算:
N=int(λ/6)+1 (int为取整的意思)
中央子午线经度 Ln=6°N-3°
若已知某点的经度为L,则该点所在3º带的带号按下式计算:
n=L/3 (四舍五入)
中央子午线经度 Ln=3°n
C# WGS84 6度分带 高斯投影正算的公式如下:
lon lat 为WGS84坐标系下以度为单位的经纬度坐标
yval1 xval1 为投影后的平面坐标。
//WGS84坐标系下6度带投影坐标iPI = Math.PI / 180.0; 3.1415926535898/180.0; ZoneWide = 6; 6度带宽 a1 = 6378245.0; f1 = 1.0 / 298.257223563; //WGS84坐标系参数 //a1 = 6378245.0; f1 = 1.0 / 298.3; //54年北京坐标系参数//a2=6378140.0; f2=1/298.257; //80年西安坐标系参数 ProjNo = (int)(lon / ZoneWide);longitude0 = ProjNo * ZoneWide + ZoneWide / 2;longitude0 = longitude0 * iPI;latitude0 = 0;longitude1 = lon * iPI; //经度转换为弧度 latitude1 = lat * iPI; //纬度转换为弧度 e2 = 2 * f - f * f;ee = e2 * (1.0 - e2);NN = a / Math.Sqrt(1.0 - e2 * Math.Sin(latitude1) * Math.Sin(latitude1));T = Math.Tan(latitude1) * Math.Tan(latitude1);C = ee * Math.Cos(latitude1) * Math.Cos(latitude1);A = (longitude1 - longitude0) * Math.Cos(latitude1);//参数转换M = a * ((1 - e2 / 4 - 3 * e2 * e2 / 64 - 5 * e2 * e2 * e2 / 256) * latitude1 - (3 * e2 / 8 + 3 * e2 * e2 / 32 + 45 * e2 * e2 * e2 / 1024) * Math.Sin(2 * latitude1) + (15 * e2 * e2 / 256 + 45 * e2 * e2 * e2 / 1024) * Math.Sin(4 * latitude1) - (35 * e2 * e2 * e2 / 3072) * Math.Sin(6 * latitude1));
xval = NN * (A + (1 - T + C) * A * A * A / 6 + (5 - 18 * T + T * T + 72 * C - 58 * ee) * A * A * A * A * A / 120);
yval = M + NN * Math.Tan(latitude1) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24 + (61 - 58 * T + T * T + 600 * C - 330 * ee) * A * A * A * A * A * A / 720);
X0 = 1000000L * (ProjNo + 1) + 500000L;
Y0 = 0;
xval = xval + X0;
yval = yval + Y0;
yval1 = Convert.ToDouble(xval.ToString().Substring(2, xval.ToString().Length - 3));
xval1 = Convert.ToDouble(yval.ToString().Substring(0, yval.ToString().Length - 5));
这篇关于WGS84经纬度坐标6度分带高斯投影正算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!