Многочисленные мелкие доработки, связанные с изменением отрисовки треков и загрузкой...
[pyrungps.git] / pygpx.py
index 469253854e0b70c3dd169f68819c377ecccb2afe..49ccdff205f00eca95bd03f6e790c6c3ef205a29 100644 (file)
--- a/pygpx.py
+++ b/pygpx.py
@@ -7,6 +7,7 @@ import os
 import math
 import datetime
 from dateutil.parser import parse
+from pprint import pprint
 
 def deg2rad(deg):
 # Преобразование из градусов в радианы.
@@ -190,20 +191,40 @@ class GPXTrackSeg:
         i.write(trksegnode,"trkpt")      
 
     def _get_elevation(self):
+
+        elev_data = []
+        for pt in self.trkpts:
+          if pt.elevation:
+            elev_data.append(pt.elevation)
+
         gain = 0.0
         loss = 0.0
-        last_pt = None
-        for pt in self.trkpts:
-          if last_pt is not None:
-            last_elevation = last_pt.elevation
+        last_elevation = None
+
+        window_size = 5
+        i = 0
+        moving_averages = []
+
+        while i < len(elev_data) - window_size + 1:
+          this_window = elev_data[i : i + window_size]
+          window_average = sum(this_window) / window_size
+          moving_averages.append(window_average)
+          i += 1
+          
+        if len(moving_averages)>2:
+          elev_data = moving_averages
+
+        for pt in elev_data:    
+          if last_elevation is not None:
             try:
-              if pt.elevation > last_elevation:
-                  gain += pt.elevation -last_elevation
+              if pt > last_elevation:
+                  gain += pt - last_elevation
               else:
-                  loss += last_elevation - pt.elevation
+                  loss += last_elevation - pt
             except:
               pass      
-          last_pt=pt    
+          last_elevation=pt    
+
         self.elevation_gain = gain
         self.elevation_loss = loss
 
@@ -554,7 +575,12 @@ class GPX:
       return ((minlat,minlon),(maxlat,maxlon))      
 
     def FixNames(self,linkname):
-      goodname = linkname.decode('UTF-8')
+      pprint(linkname)
+      pprint(type(linkname))
+      if type(linkname) is unicode:
+        goodname=linkname
+      else:  
+        goodname = linkname.decode('UTF-8')
       badname = goodname.encode('ascii','replace')
       if self.name and self.name.startswith(badname):
         self.name=self.name.replace(badname,goodname)
@@ -589,7 +615,10 @@ class GPX:
         if current_seg is not None:
           new_segs.append(current_seg)  
         # Обработали
+        for trs in new_segs:
+          trs._get_elevation()
         tr.trksegs = new_segs
+        
 
     def XMLTree(self):
       root = etree.Element("gpx", attrib ={"creator": "pygpx",