def _readPointsFromActivity(activity, workdir, kwargs): try: spatialFilterDistance = kwargs["spatialFilterDistance"] except: spatialFilterDistance = None # Parse the XML document with open(workdir + os.sep + activity["GPX File"], "r") as f: soup = BeautifulSoup(f.read()) # Read all GPS trackpoints trkpts = soup.find_all("trkpt") # Convert to GPSPoint structures points = [GPSPoint.trackpointToGPSPoint(trkpt, activity) for trkpt in trkpts] if spatialFilterDistance is not None: points = GPSPoint.removeWithinRange(points, spatialFilterDistance) return points
def processPoints(workdir, points): # Get unique activity types activities = rkIO.parseIndexFile(workdir) types = set([a['Type'] for a in activities]) types = [i for i in types] # Filter points into activity types filteredpoints = [] for t in types: filteredpoints.append([point for i,point in enumerate(points) if activities[point.activity]['Type'] == t]) points = [] for i in range(len(types)): # Remove points within a specified distance print("Filtering type '" + types[i] + "'") n0 = len(filteredpoints[i]) filteredpoints[i] = GPSPoint.removeWithinRange(filteredpoints[i], 20, verbose=True) n1 = len(filteredpoints[i]) print('Pass 1 kept ' + str(n1) + '/' + str(n0)) points.extend(filteredpoints[i]) return points