gpt4 book ai didi

algorithm - 将小数转换为经纬度

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:44:38 25 4
gpt4 key购买 nike

我有一个 GPS 设备向我的服务器发送数据,我需要将设备发送的十进制值转换为纬度和经度。我数学不好所以我所有的尝试都失败了,这里是规范:

纬度

占用4个字节,表示纬度值。

Number range is from 0 to 162000000,表示范围从0°到90°。单位:1/500秒换算方法:

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;

如果你需要计算秒的小数部分,那么就这样做吧。请注意,这里根本不需要 Extended

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

从评论来看,您真正想要的是整数度数和 float 分钟。你可以这样做:

var
degrees: Integer;
minutes: Double;
....
degrees := num div (500*60*60);
minutes := num/(500*60) - degrees*60;

将您的值 40582974 代入这些公式,结果为:

degrees: 22
minutes: 32.7658

关于algorithm - 将小数转换为经纬度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10718808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com