如何在Lua中将GPS坐标转换为十进制?
我需要使用Lua将GPS坐标从WGS84转换为十进制 我确信以前已经做过,所以我正在寻找代码片段的提示 更正问题:在Lua中将DMS(度数分秒)转换为度数((十进制)度数)的代码 示例: 维也纳:dms:48°12'30“北纬16°22'28”东经 或 苏黎世:dms:47°21'7“北纬8°30'37”东经 我发现的困难是从这些字符串中提取数字。 特别是如何处理度(°)分(')和秒(“)的符号。 例如,我将有一个表coord{}每个坐标来处理如何在Lua中将GPS坐标转换为十进制?,lua,gps,converter,wgs84,Lua,Gps,Converter,Wgs84,我需要使用Lua将GPS坐标从WGS84转换为十进制 我确信以前已经做过,所以我正在寻找代码片段的提示 更正问题:在Lua中将DMS(度数分秒)转换为度数((十进制)度数)的代码 示例: 维也纳:dms:48°12'30“北纬16°22'28”东经 或 苏黎世:dms:47°21'7“北纬8°30'37”东经 我发现的困难是从这些字符串中提取数字。 特别是如何处理度(°)分(')和秒(“)的符号。 例如,我将有一个表coord{}每个坐标来处理 coord {1} [48] coord {2}
coord {1} [48]
coord {2} [12]
coord {3} [30]
coord {4} [N]
coord {5} [16]
coord {6} [22]
coord {7} [28]
coord {8} [E]
感谢您的建议。将字符串latlon='48°12'30“N 16°22'28”E'解析为DMS+标题组件:
-- string.match(lat, '48°12'30"') -- oops the ' needs escaping or us
-- string.match(lat, '48°12\'30"')
-- ready for the captures:
-- string.match(lat, '(48)°(12)\'(30)"') -- ready for generic numbers
d1, m1, s1 = string.match(lat, '(%d+)°(%d+)\'(%d+)"')
d2, m2, s2 = string.match(lon, '(%d+)°(%d+)\'(%d+)"')
sign = 1
if ns=='S' then sign = -1 end
decDeg1 = sign*(d1 + m1/60 + s1/3600)
sign = 1
if ew=='W' then sign = -1 end
decDeg2 = sign*(d2 + m2/60 + s2/3600)
对于你的lat值,你可以得到decDeg1=48.208333,根据在线计算器(如)这是正确的值。将字符串latlon='48°12'30“N 16°22'28“E'解析为DMS+标题组件:
-- string.match(lat, '48°12'30"') -- oops the ' needs escaping or us
-- string.match(lat, '48°12\'30"')
-- ready for the captures:
-- string.match(lat, '(48)°(12)\'(30)"') -- ready for generic numbers
d1, m1, s1 = string.match(lat, '(%d+)°(%d+)\'(%d+)"')
d2, m2, s2 = string.match(lon, '(%d+)°(%d+)\'(%d+)"')
sign = 1
if ns=='S' then sign = -1 end
decDeg1 = sign*(d1 + m1/60 + s1/3600)
sign = 1
if ew=='W' then sign = -1 end
decDeg2 = sign*(d2 + m2/60 + s2/3600)
对于你的lat值,你可以得到decDeg1=48.208333,这是在线计算器(如)的正确值。有一些讨论;你也可以阅读。我认为“Luiz Henrique de Figueiredo”是@lhf on.:“从WGS84”到十进制不精确,这是错误的公式:通常坐标是以WGS84 decimal degrees“。因此,请重新表述您的意思,如果您无法准确表达,请给出一个示例。您的意思可能是DMS(Degress分秒)到DEG(decimal)degrees)conversion@AlexWien是的,我的意思是将DMS(度数分秒)转换为度数((十进制)度数)。使用任何DMS到DEG的转换算法,例如在wiki中找到的,这不是lua特定的。好的。我重新表述了问题。有一些讨论;你也可以阅读。我认为“Luiz Henrique de Figueiredo”是@lhf on.:“从WGS84”到十进制不精确,这是错误的公式:通常坐标以WGS84 decimal degrees“。因此,请重新表述您的意思,如果您无法准确表达,请给出一个示例。您的意思可能是DMS(Degress分秒)到DEG(decimal)degrees)conversion@AlexWien是的,我的意思是将DMS(度数分秒)转换为度数((十进制)度数)。使用任何DMS到DEG的转换算法,例如在wiki中找到的,这不是lua特定的。好的。我重新表述了问题。好的,这是一个开始,因为它用于数字。是的,字符串需要用反斜杠转义。如何转义?标题北、西、南和东(后者为负数)也很重要。计算值一点都不成问题。我通过外科手术提取了这些值:我希望一些genius regex或其他东西能以更有效的方式完成这项工作。有什么想法吗?@snahl反斜杠就是逃避单引号的原因。如果可以,最好对regexp进行细分;就像代码:避免com一样复杂的长表达式,它可能显示“genius regexp”,但显示的可维护性不太好。考虑到这一点,我扩展了我的答案,但我留下了两个单独的regexp。好的,这是一个开始,因为它用于数字。是的,字符串需要用反斜杠转义。如何转义?标题北、西、南和东(后者为负数)也很重要。计算值一点都不成问题。我通过外科手术提取了这些值:我希望一些genius regex或其他东西能以更有效的方式完成这项工作。有什么想法吗?@snahl反斜杠就是逃避单引号的原因。如果可以,最好对regexp进行细分;就像代码:避免com一样复杂冗长的表达式,它可能显示“genius regexp”,但显示的可维护性不太好。考虑到这一点,我扩展了我的答案,但我作为两个单独的regexp离开了。