将度分转换为十进制度

Posted

技术标签:

【中文标题】将度分转换为十进制度【英文标题】:Convert Degree Minutes to decimal degrees 【发布时间】:2013-10-03 13:11:01 【问题描述】:

我从 Garmin 设备收集的位置点以 度分 格式存储在 excel 表中 --- W00208.172,N1046.977 如何将其转换为 Decimal DegreesDegrees Minutes seconds 格式?

【问题讨论】:

重复问题,因为原始问题在 GIS-SE gis.stackexchange.com/questions/73282/… @pnuts blog.***.com/2009/04/handling-duplicate-questions 剪切粘贴重复问题 我认为“(N10046.977',W002008.172')”这个词是错误的!,请参阅我的回答 【参考方案1】:

所以我一直在寻找一个懒惰的答案并且不高兴所以将我最后所做的放在这里:

想要在这两种格式之间进行转换:

33°59'05.5"S 22°39'42.7"E-33.98485,22.66186

左边是“度分秒”,右边是“十进制”

当然,我必须做出一些假设,因此它假设您完全遵循上述格式。

好的,首先是从度到小数(源在单元格 B2 中):

=ROUNDDOWN(if(mid(B2,find(" ",B2)-1,1)="S","-","")&mid(B2,1,find("°",B2)-1)+mid(B2,find("°",B2)+1,find("'",B2)-find("°",B2)-1)/60+mid(B2,find("'",B2)+1,find("""",B2)-find("'",B2)-1)/60/60,5)&","&rounddown(if(right(B2,1)="W","-","")&mid(right(B2,find(" ",B2)-1),1,find("°",right(B2,find(" ",B2)-1))-1)+mid(right(B2,find(" ",B2)-1),find("°",right(B2,find(" ",B2)-1))+1,find("'",right(B2,find(" ",B2)-1))-find("°",right(B2,find(" ",B2)-1))-1)/60+mid(right(B2,find(" ",B2)-1),find("'",right(B2,find(" ",B2)-1))+1,find("""",right(B2,find(" ",B2)-1))-find("'",right(B2,find(" ",B2)-1))-1)/60/60,5)

然后从十进制到度数(源在单元格 C2 中):

=abs(ROUNDDOWN(left(C2,find(",",C2)-1))) & "°" & ROUNDDOWN((abs(left(C2,find(",",C2)-1))-abs(ROUNDDOWN(left(C2,find(",",C2)-1))))*60) & "'" & round(((abs(left(C2,find(",",C2)-1))-abs(ROUNDDOWN(left(C2,find(",",C2)-1))))*60- rounddown((abs(left(C2,find(",",C2)-1))-abs(ROUNDDOWN(left(C2,find(",",C2)-1))))*60))*60,1) & """"&if(value(left(C2,find(",",C2)-1))<0,"S","N")& " " & abs(ROUNDDOWN(RIGHT(C2,len(C2)-find(",",C2)))) & "°" & rounddown((abs(RIGHT(C2,len(C2)-find(",",C2)))-abs(ROUNDDOWN(RIGHT(C2,len(C2)-find(",",C2)))))*60) & "'" & round(((abs(RIGHT(C2,len(C2)-find(",",C2)))-abs(ROUNDDOWN(RIGHT(C2,len(C2)-find(",",C2)))))*60- rounddown((abs(RIGHT(C2,len(C2)-find(",",C2)))-abs(ROUNDDOWN(RIGHT(C2,len(C2)-find(",",C2)))))*60))*60,1) & """"&if(value(right(C2,len(C2)-find(",",C2)))<0,"W","E")

如果您可以在公式中包含变量...其中大部分是具有一些足够简单规则的重复公式...无论如何,希望它对某人有所帮助。

【讨论】:

【参考方案2】:

经度(E 或 W)的范围是 -180 到 180,所以是 3 位数字 纬度范围(N或S)是-90到90,所以2位

取“W00208.172”,取前 3 位并存储到递减:

度数 = 002 然后将其余部分作为十进制分钟:

分钟 = 08.172

现在转换为十进制度 (DEG):

decDegrees = 度 + 分钟 / 60.0

纬度也一样:除了度数现在只有 2 位数字 N1046.977:10 度,46.977 分钟。

如果您想保留“W”符号,请考虑一下: 在“W”或“S”的情况下,通常最好与 -1 相乘,这是转换的最后一步! 负十进制度数表示 W(经度)或 S(纬度)。

为您提供坐标意味着: 纬度:北 10046.977 = 10 + 46.977 / 60 = 10.78295; lon: (2 + 8.172 / 60) * -1 = -2.1362; 因此该位置应位于布基纳法索,距离 Dununuai 东南 5,52 公里的道路附近 15m(= 似是而非)

【讨论】:

看起来不错,您应该使用该代码进行最终测试,了解 Garmin 轨迹的记录位置,并使用 Google 地球定位转换后的坐标。在 Google 地球中使用“lat,lon”格式 用你的excel表格告诉我转换后的坐标,然后我可以告诉你。 (然后您还应该安装 GoogleEarth 以了解位置) @pnuts 你和 OP 是同一个用户吗(userr211...? @pnuts North 10046.977 = 10 + 46.977 / 60 = 10.78295;和 (2 + 8.172 / 60) * -1 = -2.1362;所以应该在布基纳法索,靠近公路 15m(= 似是而非)Dununuai 东南 5,52 公里【参考方案3】:

此公式适用于 Google 表格,用于将格式从 018°40.1333 转换为 18.66888833 和 -34°01.0597 转换为 -34.01766167

=IF(MID(B2,1,1) = "-", (INT(MID(B2, 1, SEARCH("°", B2) - 1)) - MID(B2, SEARCH("°", B2) + 1, len(B2))/60), (INT(MID(B2, 1, SEARCH("°", B2) - 1)) + MID(B2, SEARCH("°", B2) + 1, len(B2))/60))

【讨论】:

以上是关于将度分转换为十进制度的主要内容,如果未能解决你的问题,请参考以下文章

将 DDM 转换为 DEC(十进制度)

将米转换为十进制度

从公里 (km) 转换为十进制度

PHP 将十进制度转换为度,分和秒序数

度分秒转换十进制度 之Excel实现

十进制度转换为度分秒