我花了一些时间研究论坛和其他地方来解决这个问题,但没有做任何事情,我已经决定问。
我有包含NMEA句子的日志文件。我已经在mysql数据库中存储了数十万个这样的句子。我将经度和纬度存储为双数据类型。我想转换目前采用这种格式的经度和纬度:
6013.45368, 2445.28396
到十进制度格式:
60,155095, 24,74456
如果有人可以帮助我,我将不胜感激。非常感谢。
我想出了一个使用floor和round函数的sql select语句,如下所示:
insert into converted_long_lat (new_latitude, new_longitude) select round ((FLOOR(latitude / 100) + (latitude - 100 * FLOOR(latitude / 100)) / 60), 5), round((FLOOR(longitude / 100) + (longitude - 100 * FLOOR(longitude / 100)) / 60),5) FROM `rmc_raw_data`:
结果还可以,但是即使在应用round函数之前,纬度也会返回一个舍入的整数,如24,不包括小数部分。如何保留小数部分?
答案 0 :(得分:1)
您的转化次数是否正确?
NMEA句子以长度和小数分钟表示,因此6013.45368为60度13.45368分钟,我制作60+(13.45368 / 60)= 60.22428度,2445.28396度为24.75473度。
http://www.gpsinformation.org/dale/nmea.htm#position
http://home.online.no/~sigurdhu/Deg_formats.htm
从小数 - 小时 - 分(D m)到小数 - 度(d)
答案 1 :(得分:0)
我使用以下方法解决它:
insert into converted_long_lat (new_latitude, new_longitude) SELECT ROUND((FLOOR(latitude / 100) + (latitude - 100 * FLOOR(latitude / 100)) / 60), 5), ROUND((FLOOR(longitude / 100) + (longitude - 100 * FLOOR(longitude / 100)) / 60),5) FROM rmc_raw_data`
使纬度返回整数的另一个问题是由于它的列被设置为数据库中的int类型。希望其他人认为这个解决方案很有用。