2010-10-28 144 views
1

我花了一段時間研究論壇和其他地方來解決這個問題,但什麼也沒有做,我決定問。MySql或PHP函數將經度和緯度轉換爲十進制度

我有包含NMEA句子的日誌文件。我在mysql數據庫中存儲了數十萬個這樣的句子。我將經度和緯度存儲爲雙數據類型。我想這些經度和緯度這是目前在這個格式轉換:

6013.45368, 2445.28396 

小數點程度的格式是:

60,155095, 24,74456 

我將不勝感激,如果有人能夠幫助這一點。非常感謝。

我想出了一個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`: 

的結果是OK,但緯度,即使在應用循環函數之前返回,如24圓整離開了小數部分。我怎樣才能保留小數部分?

回答

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)

+0

不是嗎?以上數字僅用於示例目的而非實際轉換。你已經顯示的正是我想要做的,但因爲我有數據庫中的數據,我認爲我可以得到任何功能來處理你剛纔自動完成的。在mysql中有沒有這樣的功能?謝謝 – ibiangalex 2010-10-28 17:28:32

+0

Jaydee我如​​何處理這個在MySQL中影響成千上萬的這樣的數據?你能提供一些線索嗎?謝謝 – ibiangalex 2010-10-28 17:47:12

+0

我想出了一個使用floor和round funtions的sql select語句,如下所示:insert into converted_long_lat(new_latitude,new_longitude)select round((FLOOR(latitude/100)+(latitude - 100 * FLOOR(latitude/100))/60),5),圓形((FLOOR(經度/ 100)+(經度-100 * FLOOR(經度/ 100))/ 60),5)FROM'rmc_raw_data':結果是好的,應用循環函數會返回像24一樣舍入小數部分的四捨五入整數。我怎樣才能保留小數部分? – ibiangalex 2010-10-29 07:05:39

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類型。希望其他人發現這個解決方案有用。

相關問題