MySql或PHP函数将经度和纬度转换为十进制度

时间:2010-10-28 14:06:16

标签: php mysql gps

我花了一些时间研究论坛和其他地方来解决这个问题,但没有做任何事情,我已经决定问。

我有包含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,不包括小数部分。如何保留小数部分?

2 个答案:

答案 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类型。希望其他人认为这个解决方案很有用。