GPSロガー「Pocket GPS S1」のロールオーバーを処理

最終更新日

Comments: 0

以前に気づいた「Pocket GPS S1」のロールオーバー。しかも専用ソフトが動かない。ここでPythonで読み込み、KMLファイルの書き出しまでやってみました。

▼ロールオーバーに気づいたときの記事です

 

 

Pythonの役立つライブラリをフル活用

PythonでGPSデータ(NMEA形式というそうです)を読み込むライブラリがあり、こんかいは「pynmea」というものを利用しました。データの解析(パース)のほか、時刻データの変換もできます。「pynmea」についてはCQ出版『インターフェース2022年3月号』の特集に載っていたものも参考にしました。

最後に「simplekml」というライブラリでKMLファイルで出力し、GoogleMapなどで閲覧できるようにします。

ついでにロールバックした日付のファイル名も変換しておきます。ロールバックの修正方法については、以前に参考にさせてもらったこちらのほか、こちらも参考にさせてもらいました。

 

import datetime
import pynmea2
from pynmea2.nmea_utils import dm_to_sd
import simplekml


# 読み込みファイル
path = 'LP20040131_094318.log'

# データの読み込み(緯度経度を読み取る)
data = []
with open(path, 'r') as f:
    
    for row in f:
        r = {}
        # センテンスが$GPGGAのときデータを読み込む
        if row.startswith('$GPGGA'):
            msg = pynmea2.parse(row)
                                        
            lat =  dm_to_sd(msg.lat) # 緯度(dddmm.mmから数値に変換)
            lon =  dm_to_sd(msg.lon) # 経度(dddmm.mmから数値に変換)

            data.append((lon, lat)) # lon,latの順にセット

# kmlファイル作成
kml = simplekml.Kml()
line = kml.newlinestring(name='ルート')
line.coords = data
line.style.linestyle.color = simplekml.Color.blue # 色
line.style.linestyle.width = 5 # 線の太さ

# ファイル名から日付を抽出し、ロールオーバー後の日付を返す
s = path.split('_')[0].replace('LP','') # ファイル名の日付文字列
dt = datetime.datetime.strptime(s, '%Y%m%d') # datetimeオブジェクトへの変換
dt = dt + datetime.timedelta(weeks=1024) # ロールオーバー分1024週を加算する
path_out = '{}_{}.kml'.format(dt.strftime('%Y%m%d'), path)

# kmlファイル保存
kml.save(path_out)

 

 

googlemap(マイマップ)で取り込めばこのとおりです。

 

まとめ

ひとまずデータをKMLに変換することができました。ファイル名も正しい日付と元ファイル名を付与して管理できるようにしました。

あとはウェイポイントなどのデータをどうするか?です。

 

 

シェアする

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントする