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. ***')

コメントを残す

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