GPSロガー [iPhoneで動かすPython]
iPhone等iOS(現在ではiPadOSも)には、有料の「Pythonista 3」というアプリがあります。(記事を書いた時点では1220円で発売されています。)
これはiOS上でPython言語を用いてプログラミングを可能とするアプリで、モジュールもたくさんプリインストールされています。
https://apps.apple.com/jp/app/pythonista-3/id1085978097
このアプリ上で動作するプログラム「GPSロガー」を作ってみました。標準モジュールのみで動作します。なお、初回動作時はOS側の位置情報許可をしてください。
プログラムを実行すると自動で4秒おきにGPS取得を開始しますが、ユーザーが何か文字を入力しEnterを押すと、終了します。
終了後、CSVファイルが生成されます。
# coding: utf-8
import location # このモジュールで、GPSを取得します。
from datetime import datetime
import threading
import time
import queue
import csv
# 位置情報を格納する配列
g_locs = []
# CSVに書き込む関数
def WriteCSV(_data):
now = datetime.now()
with open('GPS_' + str(now) + '.csv', 'w') as f:
writer = csv.writer(f)
writer.writerows(_data)
# スレッド動作する、GPS取得関数
def GPS(que,locs):
print('GPS thread has started.')
# 定期的なGPS取得スタート
location.start_updates()
while True:
#もし何か文字列を入力されたら、終了。
if not que.empty():
break
# 現在時刻取得
now = datetime.now()
# GPS取得
loc = location.get_location()
lat = loc['latitude'] # 緯度
lng = loc['longitude'] # 経度
# 配列に緯度経度を追加
locs.append([now, lat, lng])
print('------------------------------------')
print(str(now) + ' : ' + str(lat) + ', ' + str(lng))
# 4秒待機
time.sleep(4)
# ループを抜けたら、定期的なGPS取得を終了。
location.stop_updates()
# キューのインスタンス生成
que = queue.Queue()
# スレッドでGPS関数開始
th1 = threading.Thread(target=GPS,args=(que,g_locs,))
th1.start()
# もしユーザーから文字列入力を受け取ったら、キューに送りスレッド終了。
while True:
inp = input()
que.put(inp)
if not inp == '':
break
th1.join()
print('GPS thread has finished.')
# CSVに配列情報を書き込む
WriteCSV(g_locs)
print('Datas has saved.')
print('*** Finished successfully. ***')