algorithm – 将小数转换为纬度和经度
发布时间:2020-12-15 09:49:08 所属栏目:大数据 来源:网络整理
导读:我有一个GPS设备将数据发送到我的服务器,我需要将设备发送的十进制值转换为纬度和经度.我的数学很差,所以我的所有尝试都失败了,这里是规格: 纬度 占用4个字节,表示纬度值. 数字范围为0到162000000,表示0°到90°的范围. 单位:1/500秒转换方式: A)将GPS模
我有一个GPS设备将数据发送到我的服务器,我需要将设备发送的十进制值转换为纬度和经度.我的数学很差,所以我的所有尝试都失败了,这里是规格:
纬度 占用4个字节,表示纬度值. 数字范围为0到162000000,表示0°到90°的范围. A)将GPS模块的纬度(度,分)数据转换为新形式,仅以分钟为单位表示值; B将转换后的值乘以30000,然后将结果转换为十六进制数 例如22°32.7658′,(22×60 + 32.7658)×30000 = 40582974,然后将其转换为十六进制数0x02 0x6B 0x3F 0x3E 经度 占用4个字节,表示位置数据的经度值.数字范围从0到324000000,表示范围从0°到180°.单位:1/500秒,转换方法与纬度相同. 我想出了这个功能,但它似乎不起作用: procedure GetDegree(const numar : DWORD; out min,sec : Extended); var eu : Extended; begin eu := numar / 30000; min := Trunc(eu / 60); sec := eu - min * 60; end; 解决方法
numar指定为1/500秒.因此,以下等式成立:
num/500 = seconds num/500/60 = minutes num/500/60/60 = degrees 我会像这样计算它: var degrees,minutes,seconds: Integer; .... degrees := num div (500*60*60); minutes := num div (500*60) - degrees*60; seconds := num div 500 - minutes*60 - degrees*60*60; 如果你需要计算秒的小数部分,那就这样做吧.请注意,这里根本不需要扩展. var degrees,minutes: Integer; seconds: Double; .... degrees := num div (500*60*60); minutes := num div (500*60) - degrees*60; seconds := num/500 - minutes*60 - degrees*60*60; 将您的值40582974插入这些公式中,结果如下: degrees: 22 minutes: 32 seconds: 45 从评论来看,你真正想要的是度为整数,分钟为浮点数.你可以这样做: var degrees: Integer; minutes: Double; .... degrees := num div (500*60*60); minutes := num/(500*60) - degrees*60; 将您的值40582974插入这些公式中,结果如下: degrees: 22 minutes: 32.7658 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |