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