地理空间坐标系统-城市坐标系与国家统一坐标系之间的转换(含四参数转换代码)
先梳理一下兩個(gè)概念:“國(guó)家統(tǒng)一坐標(biāo)系“和”城市坐標(biāo)系“
國(guó)家統(tǒng)一坐標(biāo)系:此處可以認(rèn)為是基于國(guó)家規(guī)定的大地橢球構(gòu)建的球面坐標(biāo)系(經(jīng)緯度),經(jīng)過高斯投影后形成的平面坐標(biāo)系,各城市分屬國(guó)家統(tǒng)一坐標(biāo)系的不同分帶坐標(biāo)系中,此坐標(biāo)是平面坐標(biāo),單位是長(zhǎng)度單位,米或千米等
城市坐標(biāo)系:在市政測(cè)繪中,工程制圖和施工放樣使用的都是大比例尺測(cè)繪數(shù)據(jù),一般要求投影長(zhǎng)度變形不大于2.5cm/km,國(guó)家統(tǒng)一坐標(biāo)系很難滿足需求,為此各地都建立了當(dāng)?shù)馗呔鹊某鞘凶鴺?biāo)系。此坐標(biāo)是平面坐標(biāo),單位是長(zhǎng)度單位,米或千米等。目前城市坐標(biāo)系主要有以下兩種。(1)與國(guó)家坐標(biāo)系統(tǒng)一致的城市坐標(biāo)系統(tǒng)(2)地方獨(dú)立坐標(biāo)系統(tǒng)。?
針對(duì)上述兩種城市坐標(biāo)系,第一種由于和國(guó)家統(tǒng)一坐標(biāo)系一致,測(cè)繪成果可以直接納入國(guó)家統(tǒng)一坐標(biāo)系。第二種獨(dú)立于國(guó)家統(tǒng)一坐標(biāo)系,要將此坐標(biāo)系下的測(cè)繪成果納入國(guó)家統(tǒng)一坐標(biāo)系,就需要進(jìn)行坐標(biāo)轉(zhuǎn)換。所以我們重點(diǎn)討論的是城市坐標(biāo)系中的第二種類型與國(guó)家統(tǒng)一坐標(biāo)系之間的轉(zhuǎn)換。屬于兩個(gè)平面坐標(biāo)系之間的轉(zhuǎn)換。
二維平面直角坐標(biāo)之間的轉(zhuǎn)換
兩個(gè)二維平面直角坐標(biāo)系的轉(zhuǎn)換通常使用的是四參數(shù)模型,四參數(shù)適合小范圍測(cè)區(qū)(5KM范圍)的坐標(biāo)轉(zhuǎn)換。四參數(shù)轉(zhuǎn)換模型公式如下:
在該模型中有四個(gè)未知參數(shù),
(1)兩個(gè)坐標(biāo)平移量(△X,△Y),即兩個(gè)平面坐標(biāo)系的坐標(biāo)原點(diǎn)之間的坐標(biāo)差值。
(2)平面坐標(biāo)軸的旋轉(zhuǎn)角度,通過旋轉(zhuǎn)一個(gè)角度,可以使兩個(gè)坐標(biāo)系的X和Y軸重合在一起。
(3)尺度因子K,即兩個(gè)坐標(biāo)系內(nèi)的同一段直線的長(zhǎng)度比值,實(shí)現(xiàn)尺度的比例轉(zhuǎn)換。通常K值幾乎等于1。
四個(gè)參數(shù):△X,△Y,,m
已四參數(shù),進(jìn)行二維平面直角坐標(biāo)之間的轉(zhuǎn)換
按上述四參數(shù)轉(zhuǎn)換模型公式,構(gòu)建對(duì)應(yīng)矩陣進(jìn)行運(yùn)算。即可求得轉(zhuǎn)換后的目標(biāo)坐標(biāo)。相對(duì)比較簡(jiǎn)單,代碼就不寫了。需要用到矩陣,矩陣類庫在《地理空間坐標(biāo)系統(tǒng)-不同橢球基準(zhǔn)間的坐標(biāo)轉(zhuǎn)換-相關(guān)算法代碼實(shí)現(xiàn)C#》一節(jié)有分享。
未知四參數(shù),通過兩個(gè)以上的坐標(biāo)點(diǎn)對(duì)反算四參數(shù)
反算四參數(shù),常規(guī)做法是將四參數(shù)轉(zhuǎn)換模型公式通過矩陣變換轉(zhuǎn)換為復(fù)合最小二乘求解的矩陣表達(dá)式。簡(jiǎn)化過程如下(網(wǎng)上查找,高精度建議看相關(guān)論文):
此時(shí)的表達(dá)式符合B=AX的結(jié)構(gòu),可通過最小二乘公式進(jìn)行求解:
未知四參數(shù),通過兩個(gè)以上的坐標(biāo)點(diǎn)對(duì)反算四參數(shù),代碼實(shí)現(xiàn)C#
矩陣類庫在《地理空間坐標(biāo)系統(tǒng)-不同橢球基準(zhǔn)間的坐標(biāo)轉(zhuǎn)換-相關(guān)算法代碼實(shí)現(xiàn)C#》
/// <summary>///兩個(gè)以上的坐標(biāo)點(diǎn)對(duì)計(jì)算四參數(shù)/// </summary>/// <param name="originalCooords舊坐標(biāo)"></param>/// <param name="targetCooords新坐標(biāo)"></param>/// <param name="rota旋轉(zhuǎn)參數(shù)"></param>/// <param name="scale比例"></param>/// <param name="dx x的平移"></param>/// <param name="dy y的平移"></param>public static void CalFourParaByTwoPlaneRectangularCoords2(Point2d[] originalCooords, Point2d[] targetCooords,ref double rota, ref double scale,ref double dx, ref double dy) {int pointCount = originalCooords.Length;if (pointCount < 2){//坐標(biāo)點(diǎn)數(shù)小于三。return;}if (targetCooords.Length < pointCount){//新舊坐標(biāo)個(gè)數(shù)不匹配return;}double[,] pA = new double[pointCount * 2, 4];double[,] pB = new double[pointCount * 2, 1];for (int i = 0; i < pointCount * 2; i++){if (i % 2 == 0){pA[i, 0] = 1;pA[i, 1] = 0;pA[i, 2] = originalCooords[i / 2].X;pA[i, 3] = -originalCooords[i / 2].Y;}else if (i % 2 == 1){pA[i, 0] = 0;pA[i, 1] = 1;pA[i, 2] = originalCooords[i / 2].Y;pA[i, 3] = originalCooords[i / 2].X;}}///初始化B矩陣第一步for (int i = 0; i < pointCount * 2; i++){if (i % 2 == 0){pB[i, 0] = targetCooords[i / 2].X - originalCooords[i / 2].X;}else if (i % 2 == 1){pB[i, 0] = targetCooords[i / 2].Y - originalCooords[i / 2].Y;}}GMatrix A = new GMatrix(pA);GMatrix AT = A.Transpose();GMatrix W = AT * A;GMatrix W1 = W.Inverse();GMatrix B = new GMatrix(pB);GMatrix reslut = W1 * AT * B;double X_offset, Y_offset, a1, a2;X_offset = reslut[0, 0]; //x0Y_offset = reslut[1, 0]; //y0a1 = reslut[2, 0];a2 = reslut[3, 0];dx = X_offset; //x0dy = Y_offset; //y0rota = Math.Atan(a2 / (a1 + 1));scale = (a1 + 1) / Math.Cos(rota);}?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的地理空间坐标系统-城市坐标系与国家统一坐标系之间的转换(含四参数转换代码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java接口废弃注释_Java注释Ove
- 下一篇: 王道操作系统考研笔记——2.3.3 进程