柚子快報(bào)邀請(qǐng)碼778899分享:算法 經(jīng)緯度轉(zhuǎn)換為UTM坐標(biāo)
概念 :
UTM(通用橫向墨卡托投影): 是一種以米為單位的坐標(biāo)系統(tǒng),用于地圖和GPS導(dǎo)航。將地球劃分為60個(gè)縱向的區(qū)域。每個(gè)區(qū)域?qū)?度,從赤道開始往南北兩級(jí)方向劃分。每個(gè)區(qū)域都有一個(gè)特定的字母。
轉(zhuǎn)換過程:
將經(jīng)緯度值轉(zhuǎn)化為弧度值
// 將經(jīng)度歸一化到-180到180度之間
double LongTemp =
(Long + 180) - static_cast
double LatRad = Lat * DEG_TO_RAD;
double LongRad = LongTemp * DEG_TO_RAD;
根據(jù)經(jīng)緯度計(jì)算所在的UTM區(qū)域
計(jì)算UTM帶號(hào),即 zoneNumber,這是由所在位置的經(jīng)度計(jì)算得到的,計(jì)算公式為zoneNumber = floor((longTemp + 180)/6) + 1,其中 floor()函數(shù)表示向下取整。
對(duì)于特殊區(qū)域(Norway 和 Svalbard)需要進(jìn)行特殊處理。對(duì)于Norway,UTM帶號(hào)為31;對(duì)于Svalbard,需要根據(jù)具體位置計(jì)算UTM帶號(hào)。
// 緯度在56度到64度之間,經(jīng)度在3度到12度之間的區(qū)域?qū)儆谂餐?,?duì)應(yīng)的UTM帶號(hào)為32
if (Lat >= 56.0 && Lat < 64.0 && LongTemp >= 3.0 && LongTemp < 12.0)
ZoneNumber = 32;
// Special zones for Svalbard
// 如果經(jīng)緯度在北極圈內(nèi),則根據(jù)經(jīng)度范圍判斷屬于哪個(gè)UTM區(qū)域。
// 對(duì)于挪威的斯瓦爾巴群島(Svalbard)有特殊的UTM區(qū)域設(shè)置。
// 如果緯度在72到84度之間,則根據(jù)經(jīng)度范圍判斷屬于哪個(gè)UTM區(qū)域,分別為31、33、35、37區(qū)。
if (Lat >= 72.0 && Lat < 84.0) {
if (LongTemp >= 0.0 && LongTemp < 9.0)
ZoneNumber = 31;
else if (LongTemp >= 9.0 && LongTemp < 21.0)
ZoneNumber = 33;
else if (LongTemp >= 21.0 && LongTemp < 33.0)
ZoneNumber = 35;
else if (LongTemp >= 33.0 && LongTemp < 42.0)
ZoneNumber = 37;
}
根據(jù)維度值計(jì)算UTM縱向帶計(jì)算以赤道為基準(zhǔn)的投影面的相對(duì)圓柱體坐標(biāo)系(即UTM投影)的各種參數(shù) 橢球體參數(shù),包括長(zhǎng)半軸a,扁率f,第一偏心率平方eccSquared,以及第二偏心率平方eccPrimeSquared。根據(jù)投影參數(shù),計(jì)算經(jīng)緯度值對(duì)應(yīng)的UTM坐標(biāo)值 計(jì)算UTM坐標(biāo)時(shí),需要使用以下幾個(gè)參數(shù):
N:卯酉圈曲率半徑。T:曲率平面的切線方位角正切值。
T
=
t
a
n
2
(
L
a
t
R
a
d
)
T=tan^2(LatRad)
T=tan2(LatRad)C:子午圈曲率半徑。
C
=
e
c
c
P
r
i
m
e
S
q
u
a
r
e
d
×
c
o
s
2
(
L
a
t
R
a
d
)
C=eccPrimeSquared×cos^2(LatRad)
C=eccPrimeSquared×cos2(LatRad)A:中央經(jīng)線到點(diǎn)的經(jīng)線長(zhǎng)度。
A
=
c
o
s
(
L
a
t
R
a
d
)
×
(
L
o
n
g
R
a
d
?
L
o
n
g
O
r
i
g
i
n
R
a
d
)
A=cos(LatRad)×(LongRad?LongOriginRad)
A=cos(LatRad)×(LongRad?LongOriginRad)M:緯度的子午線弧長(zhǎng)。
M
=
a
?
(
(
1
?
e
2
4
?
?
3
e
4
64
?
?
5
e
6
256
?
)
?
?
?
(
3
e
2
8
?
+
3
e
4
32
?
+
45
e
6
1024
?
)
?
s
i
n
(
2
?
)
+
(
15
e
4
256
?
+
45
e
6
1024
?
)
?
s
i
n
(
4
?
)
?
35
e
6
3072
?
?
s
i
n
(
6
?
)
)
M=a?((1?\frac{e^2}{4}?-\frac{3e^4}{64}??\frac{5e^6}{256}?)???(\frac{3e^2}{8}?+\frac{3e^4}{32}?+\frac{45e^6}{1024}?)?sin(2?)+(\frac{15e^4}{256}?+\frac{45e^6}{1024}?)?sin(4?)?\frac{35e^6}{3072}??sin(6?))
M=a?((1?4e2???643e4???2565e6??)???(83e2??+323e4??+102445e6??)?sin(2?)+(25615e4??+102445e6??)?sin(4?)?307235e6???sin(6?))
其中,a是橢球體的半長(zhǎng)軸,e是橢球體的離心率,
?
\phi
?是轉(zhuǎn)換前的緯度。
U
T
M
E
a
s
t
i
n
g
=
k
0
×
N
×
(
A
+
(
1
?
T
+
C
)
×
A
3
/
6
+
(
5
?
18
×
T
+
T
2
+
72
×
C
?
58
×
e
c
c
P
r
i
m
e
S
q
u
a
r
e
d
)
×
A
5
/
120
)
+
500000.0
U
T
M
N
o
r
t
h
i
n
g
=
k
0
×
(
M
+
N
×
t
a
n
(
L
a
t
R
a
d
)
×
(
A
2
/
2
+
(
5
?
T
+
9
×
C
+
4
×
C
2
)
×
A
4
/
24
+
(
61
?
58
×
T
+
T
2
+
600
×
C
?
330
×
e
c
c
P
r
i
m
e
S
q
u
a
r
e
d
)
×
A
6
/
720
)
)
UTM_{Easting}=k_0×N×(A+(1?T+C)×A^3/6+(5?18×T+T^2+72×C?58×eccPrimeSquared)×A^5/120)+500000.0 \\ UTM_{Northing}=k_0×(M+N×tan(LatRad)×(A^2/2+(5?T+9×C+4×C^2)×A^4/24+(61?58×T+T^2+600×C?330×eccPrimeSquared)×A^6/720))
UTMEasting?=k0?×N×(A+(1?T+C)×A3/6+(5?18×T+T2+72×C?58×eccPrimeSquared)×A5/120)+500000.0UTMNorthing?=k0?×(M+N×tan(LatRad)×(A2/2+(5?T+9×C+4×C2)×A4/24+(61?58×T+T2+600×C?330×eccPrimeSquared)×A6/720))
eccPrimeSquared = (eccSquared) / (1 - eccSquared);
N = a / sqrt(1 - eccSquared * sin(LatRad) * sin(LatRad));
T = tan(LatRad) * tan(LatRad);
C = eccPrimeSquared * cos(LatRad) * cos(LatRad);
A = cos(LatRad) * (LongRad - LongOriginRad);
M = a *
((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 -
5 * eccSquared * eccSquared * eccSquared / 256) *
LatRad -
(3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 +
45 * eccSquared * eccSquared * eccSquared / 1024) *
sin(2 * LatRad) +
(15 * eccSquared * eccSquared / 256 +
45 * eccSquared * eccSquared * eccSquared / 1024) *
sin(4 * LatRad) -
(35 * eccSquared * eccSquared * eccSquared / 3072) * sin(6 * LatRad));
UTMEasting = k0 * N * (A + (1 - T + C) * A * A * A / 6 + (5 - 18 * T + T * T + 72 *
柚子快報(bào)邀請(qǐng)碼778899分享:算法 經(jīng)緯度轉(zhuǎn)換為UTM坐標(biāo)
精彩文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。