Skip to content

Instantly share code, notes, and snippets.

@rafalw
Created August 30, 2011 20:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rafalw/1181903 to your computer and use it in GitHub Desktop.
Save rafalw/1181903 to your computer and use it in GitHub Desktop.
Śledzenie położenia
# -*- coding: UTF8 -*-
# Zapis informacji o położeniu (rejestracja ścieżki)
# w oparciu o dane z modułu GPS.
# Wersja dla telefonów Nokia (S60).
import positioning
import sys
import os
from time import sleep
from datetime import datetime
# EPOCH -> czytelna data i czas
def epoch_to_date(epoch):
# Przechwytywanie przede wszystkim błędu konwersji w przypadku,
# gdy moduł GPS poda "dziwną" wartość timestampu (np. ujemną, co się zdarza czasem
# modułom zewnętrznym; trzeba wtedy zresetować moduł)
try:
date_str = str(datetime.fromtimestamp(epoch))
except:
date_str = 'no_data'
return date_str
# Odbiór danych GPS z domyślnego modułu
def get_coordinates():
positioning.select_module(positioning.default_module())
positioning.set_requestors([{'type':'service','format':'application','data':'gps-track'}])
try:
data = positioning.position(course=1, satellites=1, partial=0)
except:
sys.stdout.write(u'Nie można pobrać danych GPS.\n')
sys.exit(-1)
return (data['position']['latitude'], data['position']['longitude'], data['position']['altitude'], data['course']['speed'], epoch_to_date(data['satellites']['time']))
# Zapis śladu do pliku znajdującego się na karcie pamięci
# - w Nokii E51 jest to domyślnie dysk e:
# UWAGA: zawartość pliku nie jest usuwana; za każdym razem dane dopisywane są na koniec.
def log_coordinates(coordinates):
log_line = u'lat: %f; lon: %f; alt: %f; spd: %f; tim: %s; ' % coordinates
log_line += u'loc: %s\n' % str(datetime.now())
try:
# Odkomentować, jeśli ma być wypisywanie na konsolę - nie zalecane...
#sys.stdout.write(log_line);
f = open(u'e:\\gpspath.txt', 'a')
f.write(log_line)
except:
sys.stdout.write(u'Nie można zapisać danych do pliku.\n')
sys.exit(-1)
finally:
f.close()
# W pętli nieskończonej program zapisuje pozycję.
if __name__ == '__main__':
sys.stdout.write(u'Śledzenie położenia.\n')
while True:
log_coordinates(get_coordinates())
# Następny wiersz ma pokazywać, że pętla działa - zalecane zakomentowanie :-)
sys.stdout.write(u'#');
sleep(5) # "odświeżanie" co 5 sekund
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment