コード例 #1
0
def writeOutput(workdir, gpspoints):
    activities = rkIO.parseIndexFile(workdir)
    print('Writing KML document...')
    
    kml = simplekml.Kml(name='Runkeeper Heatmap')
    
    icon = 'http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png'
    #icon = 'http://maps.google.com/mapfiles/kml/shapes/placemark_circle.png'
    scale = 0.45
    
    footstyle = simplekml.Style()
    footstyle.iconstyle.icon.href = icon
    footstyle.iconstyle.scale = scale
    footstyle.iconstyle.color = simplekml.Color.lightgreen
    
    bikestyle = simplekml.Style()
    bikestyle.iconstyle.icon.href = icon
    bikestyle.iconstyle.scale = scale
    bikestyle.iconstyle.color = simplekml.Color.aqua
    
    otherstyle = simplekml.Style()
    otherstyle.iconstyle.icon.href = icon
    otherstyle.iconstyle.scale = scale
    otherstyle.iconstyle.color = simplekml.Color.red

    for i,gpspoint in enumerate(gpspoints):
        pt = kml.newpoint(coords = [(gpspoint.lon, gpspoint.lat)])
        
        try:
            method = activities[gpspoint.activity]['Type']
        except:
            import pdb;pdb.set_trace()
            pass
        if method == 'Running' or method == 'Hiking' or method == 'Walking':
            pt.style = footstyle
        elif method == 'Cycling':
            pt.style = bikestyle
        else:
            pt.style = otherstyle
    
    kml.save(workdir + os.sep + 'out.kml')
コード例 #2
0
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
コード例 #3
0

if __name__ == '__main__':
    
    try:
        import timeit
        #workdir = tempfile.mkdtemp(prefix='RKWorking_')
        workdir = os.getcwd() + os.sep + 'work'
		
		#r"C:\Users\wkulp\Documents\GitHub\RunkeeperMapper\data"
        print('Working dir: ' + workdir)
        
        rkIO.loadArchive(workdir, 'data' + os.sep + 'data-2013-10-09-1728.zip')
        
        # Read the master activity list
        activities = rkIO.parseIndexFile(workdir)
        
        # Parse each GPX file into points
        print('Processing GPS track files')
        nprocs = cpu_count()
        print('Using ' + str(nprocs) + " CPU cores...")
        #points = rkIO.sp_readAllPoints(activities, workdir, spatialFilterDistance = 20)
        points = rkIO.mp_readAllPoints(nprocs, activities, workdir, spatialFilterDistance = 20)
        GPSPoint.savePoints(workdir, points, 'rawpoints.csv')
        
        
        points = processPoints(workdir, points)    
        GPSPoint.savePoints(workdir, points, 'processedpoints.csv')
        
        points = GPSPoint.loadPoints(workdir, 'processedpoints.csv')
        writeOutput(workdir, points)