X-Git-Url: https://git.rvb.name/pyrungps.git/blobdiff_plain/c49b871ebc265b1a2030482ca68f89ed920884ff..1690b8b7c8ccfdf60be2b33b314e6c26bdef86e6:/pygpx.py diff --git a/pygpx.py b/pygpx.py index 4692538..49ccdff 100644 --- 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",