» »

GPS za najbolj natančno logiranje poti

GPS za najbolj natančno logiranje poti

jez23 ::

Pozdravljeni,
kot že sam naslov pove iščem napravo, ročni gps, ali kaj podobnega, za čimnatančnejše logiranje poti.

Kot drugo vprašanje pa navajam, software. Katerega izbrati z obdelavo podatkov, risanje profila poti,...
Stvar pa je takšna: V našem okolišu se bo v kratkem postavljalo določeno število kolesarskih poti (MTB). Radi bi naredili uporabnikom čimbolj prijazne in natančne preglede poti, kar pomeni, da potrebujemo .gpx ali katerikoli drug format sledi poti, ki ga je potem potrebno seveda še obdelati. Katere naprave, ter kateri software priporočate?

Sam poznam Garminove Dakote ter Oregone, delo s Geopedio ter seveda Garminovimi orodji. ALi obstajajo boljše alternative?

jype ::

Če boljše, ne vem, zagotovo pa fleksibilnejše. Bluetooth GPS sprejemnik s serijskim vmesnikom (rfcomm) imam naselotejpan na čelado, naredim nmea dump na telefonu, uporabim gpsbabel in python za risanje slik.

V par deset vrsticah kode recimo lahko narediš marsikaj. Ker sem blazno zabasan z delom še nimam končnega izdelka, ampak tole pa lahko že pokažem (spodaj je koda, ki izriše napise v video, v delu je pa še map tracking view s pomočjo google maps/earth oz. geopedije in analiza podatkov iz bluetooth heart rate monitorja, manjka mi pa še sinhronizacija z merilnikom kadence, ki bo malce trši oreh.



#!/usr/bin/python
import cv, sys, os, pyexif, datetime, time, calendar
from lxml import html
kml = html.parse(sys.argv[2])
offset = int(sys.argv[3])
tsdata = list()
for x in kml.iter('placemark'):
        if x.getchildren()[0].tag != 'name':
                continue
        try:
                data = list(x.iter('td'))
                if not data:
                        continue
                lon = data[0].text.split(':',1)[1].replace(' ', '')
                lat = data[1].text.split(':',1)[1].replace(' ', '')
                if lon.startswith('-'):
                        lon='W'+lon
                else:
                        lon='E'+lon
                if lat.startswith('-'):
                        lat='S'+lat
                else:
                        lat='N'+lat
                alt = '%d m' % int(round(float(data[2].text.split(':',1)[1].strip().split(' ', 1)[0])))
                spd = data[3].text.split(':',1)[1]
                if 'km/hour' in spd:
                        spd = '%4.1f km/h' % float(spd.strip().split(' ', 1)[0])
                else:
                        spd = '%4.1f km/h' % 0.0
                hdg = '%d degrees' % int(round(float(data[4].text.split(':',1)[1].replace(' ', ''))))
                gpsclk = data[5].text.split(':',1)[1].replace(' ', '')
                try:
                        ts = calendar.timegm(datetime.datetime.strptime(gpsclk, '%Y-%m-%dT%H:%M:%SZ').timetuple())
                except:
                        ts = calendar.timegm(datetime.datetime.strptime(gpsclk, '%Y-%m-%dT%H:%M:%S.%fZ').timetuple())                                                                                                            
                tsdata.append(dict(ts=ts, hdg=hdg, alt=alt, spd=spd, gpsclk=gpsclk, lat=lat, lon=lon))                                                                                                                           
        except Exception, m:                                                                                                                                                                                                     
                raise                                                                                                                                                                                                            
                print m                                                                                                                                                                                                          
exif = pyexif.ExifEditor(sys.argv[1])                                                                                                                                                                                            
start = int(time.mktime(datetime.datetime.strptime(exif.getTag('CreateDate'), '%Y:%m:%d %H:%M:%S').timetuple()))                                                                                                                 
duration = exif.getTag('Duration')                                                                                                                                                                                               
dur = 0                                                                                                                                                                                                                          
i = 0                                                                                                                                                                                                                            
for chunk in reversed(duration.split(':')):                                                                                                                                                                                      
        dur += int(chunk) * 60**i                                                                                                                                                                                                
        i += 1                                                                                                                                                                                                                   
capture = cv.CaptureFromFile(sys.argv[1])                                                                                                                                                                                        
fps = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FPS)                                                                                                                                                                         
height = int(cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT))                                                                                                                                                        
width = int(cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH))                                                                                                                                                          
print duration, dur, fps                                                                                                                                                                                                         
cv.NamedWindow('title', cv.CV_WINDOW_AUTOSIZE)                                                                                                                                                                                   
c = 0                                                                                                                                                                                                                            
font1 = cv.InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 2, cv.CV_AA)                                                                                                                                                            
font2 = cv.InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 5, cv.CV_AA)                                                                                                                                                            
data = dict(ts='unknown',hdg='unknown',alt='unknown',spd='unknown',lat='unknown',lon='unknown',gpsclk='unknown',)
color1 = cv.CV_RGB(255, 20, 20)
color2 = cv.CV_RGB(10, 10, 10)
if len(sys.argv) == 5:
        writer = cv.CreateVideoWriter(  filename=sys.argv[4],
                                                                        fourcc=cv.CV_FOURCC('F','M','P','4'),
                                                                        fps=fps,
                                                                        frame_size=(width,height),
                                                                        is_color=1)
else:
        writer = None

def txt(img, text, x, y):
        cv.PutText(img, text, (x, y), font2, color2)
        cv.PutText(img, text, (x, y), font1, color1)

while True:
        ts = start + c / fps
        if tsdata and tsdata[0]['ts'] < ts + offset:
                data = tsdata.pop(0)
        img = cv.QueryFrame(capture)
        if not img:
                break
        txt(img, 'heading: %(hdg)s' % data, 10, 30)
        txt(img, 'pos: %(lat)s' % data, 10, 60)
        txt(img, '     %(lon)s' % data, 10, 90)
        txt(img, 'alt: %(alt)s' % data, 10, 120)
        txt(img, 'speed: %(spd)s' % data, 10, 150)
        txt(img, 'gps clock: %(gpsclk)s' % data, 10, height-30)
        txt(img, 'cam clock: %s' % time.asctime(time.localtime(ts)), 630, height-30)
        #cv.SaveImage('img%05d.jpg' % c, img)
        if writer:
                cv.WriteFrame(writer, img)
        else:
                cv.ShowImage('title', img)
                key = cv.WaitKey(1)
                if key == ord('q'):
                        break
        c+=1
        print dur - (ts - start)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Bolha parser/pajek - prejemanje obvestil o novih oglasih

Oddelek: Programiranje
214368 (3366) rokko
»

[Python3] Izvajanje ukazov po določenem času

Oddelek: Programiranje
211459 (1069) noraguta
»

Beleženje udeležbe v prometu (strani: 1 2 )

Oddelek: Loža
5810925 (8056) SeMiNeSanja
»

Python - problem

Oddelek: Programiranje
132792 (2522) slevin
»

Program za dopis avtorja slike

Oddelek: Programska oprema
71498 (1350) MihaFirst

Več podobnih tem