Edited at

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

iOSアプリであるPythonista3。

iPhone,iPadでもプログラミング言語Pythonを使えるということで、

Python歴数か月の私は興味本位でダウンロードしました。

使ってみて思ったのは、PCにはないiPhone,iPadの機能を利用できるのが良い!

タイトルのGPSや通知機能とか、アプリを作っている実感がありますねー。

さて今回は、

「iPhoneのGPSデータを取得し、csvファイルで保存する」スクリプトを

紹介します。

本来ならスクリプト一つで十分なのですが、アプリ化を考えていますので、

UIも一緒に説明します。簡単にUIを利用できるのもPythonista3の魅力ですね。

まずは使用時の説明を。

gps-logger_ui.png

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

どちらかのボタンをタップすると、

gps-logger_ui_playing.png.jpg

このように、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_ui_NEW button.jpg

gps-logger_ui_ADD button.jpg

スクリプト「gps logger.py」を実行し、ボタンを押すと、冒頭にある通りGPSデータが表示されます。また、スクリプトと同じディレクトリにcsvファイルが保存されているはずです。

あと、これは今検討中ですが、location.start_updates() のあとにtime.sleep(1)

を入れたほうがいいかもしれません。GPSデータの更新時間に余裕を持たせるという意味で。

長くなりましたが、説明は以上です。

次はcsvファイルを読み込んでマップデータを作成するスクリプトを紹介します。

参考にしたURL:

http://omz-software.com/pythonista/docs/ios/location.html