Pythonista3でiPhoneのGPSデータを取得する


iOSアプリであるPythonista3。
iPhone,iPadでもプログラミング言語Pythonを使えるということで、
Python歴数か月の私は興味本位でダウンロードしました。
使ってみて思ったのは、PCにはないiPhone,iPadの機能を利用できるのが良い!
タイトルのGPSや通知機能とか、アプリを作っている実感がありますねー。

さて今回は、
「iPhoneのGPSデータを取得し、csvファイルで保存する」スクリプトを
紹介します。

本来ならスクリプト一つで十分なのですが、アプリ化を考えていますので、
UIも一緒に説明します。簡単にUIを利用できるのもPythonista3の魅力ですね。

まずは使用時の説明を。

「GPS LOGGER」と書かれたテキストビューがあり、その下に2つのボタン(NEW,ADD)があります。
どちらかのボタンをタップすると、

このように、GPSデータを取得時間とともに表示します。
データは一応個人情報になるので消してます。悪しからず。

続いてスクリプト。

# -*- coding:utf-8 -*-
# location はGPSデータを取得する標準モジュールです
import ui,location,csv,datetime,time   

# NEWボタンをタップすると呼ばれるメソッド
def shinki(sender):
    label = sender.superview['label1'] 
    now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 現時刻を取得

    # 1.GPSデータを取得
    location.start_updates() # GPSデータ更新を開始
    gps=location.get_location() # GPSデータを取得する
    location.stop_updates()# GPSデータ更新を終了

    # 2.GPSデータを画面に表示
    gps_text = '' 
    for g in gps:
        gps_text=gps_text + str(g)+':'+str(gps[g])+'\n'
    label.text=now + '\n' + gps_text # UIのテキストビューにGPSデータを代入

    # 3-1.GPSデータを編集して、csvファイルに保存
    gps_dict = {'time':now} # GPSデータはディクショナリ型。
    gps_dict.update(gps) # 先に取得時間を入れ、次にGPSデータを追加

    # 3-2.csvファイル用にヘッダー(ディクショナリ型)を作成
    gps_rows=[] # 空のリストを作成
    gps_rows.append(gps_dict)
    parameters = ['time','latitude','longitude','altitude','timestamp','horizontal_accuracy','vertical_accuracy','speed','course']
    header = dict([(val,val) for val in parameters])

    # csvファイルを開いて、gps辞書を書き込む
    with open('gps_log.csv',mode='w', encoding='utf-8') as f:
        writer = csv.DictWriter(f,parameters, extrasaction='ignore')
        writer.writerows(gps_rows)

v = ui.load_view()
v.present('sheet')

上記のスクリプトはNEWボタンのメソッドですが、ADDボタンも99%同じです。
違うのはメソッド名をtsuika()としていることと、csvのモードをmode='a'としていることの2点です。

なお、各ボタンの編集画面で、メソッドを設定する必要があるので注意してください。

スクリプト「gps logger.py」を実行し、ボタンを押すと、冒頭にある通りGPSデータが表示されます。また、スクリプトと同じディレクトリにcsvファイルが保存されているはずです。
あと、これは今検討中ですが、location.start_updates() のあとにtime.sleep(1)
を入れたほうがいいかもしれません。GPSデータの更新時間に余裕を持たせるという意味で。

長くなりましたが、説明は以上です。
次はcsvファイルを読み込んでマップデータを作成するスクリプトを紹介します。

参考にしたURL:
http://omz-software.com/pythonista/docs/ios/location.html