Changeset 122

Show
Ignore:
Timestamp:
12/07/07 23:31:48 (1 year ago)
Author:
vud1
Message:

"Update the gpx loader lib"

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • pytrainer/trunk/pytrainer.py

    r93 r122  
    2525import gtk 
    2626import gtk.glade 
     27import os 
    2728 
    2829data_path = "./" 
     
    3839from pytrainer.main import pyTrainer 
    3940 
     41 
     42os.popen("MOZILLA_FIVE_HOME=/usr/lib/firefox") 
     43 
    4044def main(): 
    4145        #Lanzamos el pytrainer 
  • pytrainer/trunk/pytrainer/lib/date.py

    r8 r122  
    9191 
    9292        def unixtime2date(self,unixtime): 
     93                print unixtime 
    9394                tm = time.gmtime(unixtime) 
    9495                year = tm[0]                             
  • pytrainer/trunk/pytrainer/lib/gpx.py

    r120 r122  
    2323import os 
    2424from system import checkConf 
     25import xml.dom.minidom  
     26import time 
    2527 
    2628class Gpx: 
     
    3335                self.upositive = 0 
    3436                self.unegative = 0 
    35                 pytrainerfile = self.gpx2pytrainer() 
    36                 self._getValues(pytrainerfile) 
     37                self._getValues() 
    3738 
    3839        def getMaxValues(self): 
    3940                return self.total_dist, self.total_time 
    4041 
    41         def getDatevalues(self):         
    42                 pytrainerfile = self.gpx2pytrainer() 
    43                 fh = open(pytrainerfile) 
    44                 line = fh.readline() 
    45                 init_time = "" 
    46                 i=0 
    47                 while line: 
    48                         line_arr = re.match("([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*)$",line) 
    49                         tmp_time = int(line_arr.group(4)) 
    50                         if i == 1: 
    51                                 init_time = tmp_time 
    52                         line = fh.readline() 
    53                         i = i+1 
    54                 end_time = tmp_time 
    55                 return init_time, end_time 
     42        def getTrackRoutes(self):        
     43                dom = xml.dom.minidom.parse(self.filename) 
     44                trks = dom.getElementsByTagName("trk") 
     45                retorno = [] 
     46                for trk in trks: 
     47                        name = trk.getElementsByTagName("name")[0].firstChild.data 
     48                        time_ = trk.getElementsByTagName("time")[0].firstChild.data 
     49                        mk_time = time.strptime(time_, "%Y-%m-%dT%H:%M:%SZ") 
     50                        time_ = time.mktime(mk_time) 
     51                        retorno.append((name,time_)) 
     52                return retorno 
    5653                 
    5754        def getUnevenness(self): 
     
    5956         
    6057        def getTrackList(self): 
    61                 pytrainerfile = self.gpx2pytrainer() 
    62                 return self._getValues(pytrainerfile) 
     58                return self._getValues() 
    6359                 
    64         def gpx2pytrainer(self): 
    65                 stylefile = self.data_path+"pytrainer.style" 
    66                 tmpfile = self.conf.getValue("tmpdir")+"/gps.txt" 
    67                 #os.system("gpsbabel -t -i gpx -f '%s' -x position,distance=10m -o xcsv,style=%s -F %s" %(self.filename, stylefile,tmpfile)) 
    68                 os.system("gpsbabel -t -i gpx -f '%s' -o xcsv,style=%s -F %s" %(self.filename, stylefile,tmpfile)) 
    69                 return tmpfile 
     60        def _getValues(self): 
     61                dom = xml.dom.minidom.parse(self.filename) 
     62                trkpoints = dom.getElementsByTagName("trkpt") 
    7063 
    71         def _getValues(self,pytrainerfile): 
    72                 fh = open(pytrainerfile) 
    7364                retorno = [] 
    74  
     65                his_vel = [] 
    7566                last_lat = "False" 
    7667                last_lon = "False" 
    7768                last_time = "False" 
    78                 his_vel = [] 
    7969                total_dist = 0 
    80  
    81                 line = fh.readline() 
    82                  
    8370                tmp_alt = 0 
    8471 
    85                 while line: 
    86                         line_arr = re.match("([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*)$",line) 
    87                         if len(line_arr.group(3)) < 15: 
    88                                 tmp_alt = int(line_arr.group(3)) 
    89          
     72                for trkpoint in trkpoints: 
     73                        lat = trkpoint.attributes["lat"].value 
     74                        lon = trkpoint.attributes["lon"].value 
     75                        time_ = trkpoint.getElementsByTagName("time")[0].firstChild.data 
     76                        mk_time = time.strptime(time_, "%Y-%m-%dT%H:%M:%SZ") 
     77                        time_ = time.mktime(mk_time) 
     78                        ele = trkpoint.getElementsByTagName("ele")[0].firstChild.data 
     79                        #chequeamos que la altura sea correcta 
     80                        if len(ele)<15: 
     81                                tmp_alt = int(float(ele)) 
     82                         
    9083                        #evitamos los puntos blancos 
    91                         if (float(line_arr.group(1)) < -0.001) or (float(line_arr.group(1)) > 0.0000001): 
    92                                 tmp_lat = float(line_arr.group(1))*0.01745329252 
    93                                 tmp_lon = float(line_arr.group(2))*0.01745329252 
    94                                 tmp_time = int(line_arr.group(4)
     84                        if (float(lat) < -0.000001) or (float(lat) > 0.0000001): 
     85                                tmp_lat = float(lat)*0.01745329252 
     86                                tmp_lon = float(lon)*0.01745329252 
     87                                tmp_time = int(time_
    9588                 
    9689                                #Para las vueltas diferentes a la primera        
    9790                                if last_lat != "False": 
    98                                         time = tmp_time - last_time 
     91                                        time_ = tmp_time - last_time 
    9992                                        tempnum=(math.sin(last_lat)*math.sin(tmp_lat))+(math.cos(last_lat)*math.cos(tmp_lat)*math.cos(tmp_lon-last_lon)) 
    10093                                        try: 
     
    10396                                                total_dist += dist 
    10497                                                #dividimos kilometros por hora (no por segundo) 
    105                                                 tmp_vel = dist/((time)/3600.0) 
     98                                                tmp_vel = dist/((time_)/3600.0) 
    10699                                                vel,his_vel = self._calculate_velocity(tmp_vel,his_vel) 
    107100                                                #si la velocidad es menor de 90 lo damos por bueno 
    108                                                 if vel<90 and time <100: 
    109                                                         self.total_time += time 
    110                                                         retorno.append((total_dist,tmp_alt, self.total_time,vel,line_arr.group(1),line_arr.group(2))) 
     101                                                if vel<90 and time_ <100: 
     102                                                        self.total_time += time_ 
     103                                                        retorno.append((total_dist,tmp_alt, self.total_time,vel,lat,lon)) 
    111104                                                        rel_alt = tmp_alt - last_alt 
    112105                                                        if rel_alt > 0: 
     
    121114                                last_alt = tmp_alt 
    122115                                last_time = tmp_time 
    123                         line = fh.readline() 
    124116 
    125                 fh.close 
    126117                self.total_dist = total_dist  
    127118                return retorno 
  • pytrainer/trunk/pytrainer/record.py

    r98 r122  
    180180                from lib.gpx import Gpx 
    181181                gpx = Gpx(self.data_path,gpxfile) 
    182                 init_time,end_time = gpx.getDatevalues() 
    183                 init_time = self.date.unixtime2date(init_time)   
    184                 end_time = self.date.unixtime2date(end_time) 
    185                 if init_time == end_time: 
    186                         self.recordwindow.rcd_date.set_text(end_time) 
     182                tracks = gpx.getTrackRoutes() 
     183 
     184                if len(tracks) < 2: 
     185                       time = self.date.unixtime2date(tracks[0][1]) 
     186                        self.recordwindow.rcd_date.set_text(time) 
    187187                        self._actualize_fromgpx(gpx) 
    188188                else: 
    189                         msg = _("The gpx file seems to be a several days records. Perhaps you will need to edit your gpx file") 
     189                        msg = _("The gpx file seems to be a several track records. Press cancel to select one track record. Press Continue to load all as only one track record.") 
    190190                        from gui.warning import Warning 
    191191                        warning = Warning(self.data_path,self._actualize_fromgpx,[gpx]) 
  • pytrainer/trunk/pytrainer/waypoint.py

    r94 r122  
    5858                from lib.gpx import Gpx 
    5959                gpx = Gpx(self.data_path,gpxfile) 
    60                 init_time,end_time = gpx.getDatevalues() 
    61                 init_time = self.date.unixtime2date(init_time)   
    62                 end_time = self.date.unixtime2date(end_time) 
    63                 if init_time == end_time: 
    64                         self.recordwindow.rcd_date.set_text(end_time) 
     60                tracks = gpx.getTrackRoutes() 
     61 
     62                if len(tracks) > 1: 
     63                       time = self.date.unixtime2date(tracks[0][1]) 
     64                        self.recordwindow.rcd_date.set_text(time) 
    6565                        self._actualize_fromgpx(gpx) 
    6666                else: