def _get_flight_path(flight, threshold=0.001, max_points=3000): fp = flight_path(flight.igc_file, max_points) if len(fp) == 0: current_app.logger.error('flight_path("' + flight.igc_file.filename + '") returned with an empty list') return None num_levels = 4 zoom_factor = 4 zoom_levels = [0] zoom_levels.extend([round(-math.log(32.0 / 45.0 * (threshold * pow(zoom_factor, num_levels - i - 1)), 2)) for i in range(1, num_levels)]) max_delta_time = max(4, (fp[-1].seconds_of_day - fp[0].seconds_of_day) / 500) encoder = SkyLinesPolyEncoder(num_levels=4, threshold=threshold, zoom_factor=4) fixes = map(lambda x: (x.longitude, x.latitude, (x.seconds_of_day / max_delta_time * threshold)), fp) fixes = encoder.classify(fixes, remove=False, type="ppd") encoded = encoder.encode(fixes['points'], fixes['levels']) barogram_t = encoder.encodeList([fp[i].seconds_of_day for i in range(len(fp)) if fixes['levels'][i] != -1]) barogram_h = encoder.encodeList([fp[i].altitude for i in range(len(fp)) if fixes['levels'][i] != -1]) enl = encoder.encodeList([fp[i].enl for i in range(len(fp)) if fixes['levels'][i] != -1]) elevations_t, elevations_h = _get_elevations(flight, encoder) contest_traces = _get_contest_traces(flight, encoder) return dict(encoded=encoded, zoom_levels=zoom_levels, num_levels=num_levels, barogram_t=barogram_t, barogram_h=barogram_h, enl=enl, contests=contest_traces, elevations_t=elevations_t, elevations_h=elevations_h, sfid=flight.id)
def _get_flight_path(pilot, threshold=0.001, last_update=None): fp = _get_flight_path2(pilot, last_update=last_update) if not fp: return None num_levels = 4 zoom_factor = 4 zoom_levels = [0] zoom_levels.extend([ round(-log( 32.0 / 45.0 * (threshold * pow(zoom_factor, num_levels - i - 1)), 2)) for i in range(1, num_levels) ]) encoder = SkyLinesPolyEncoder(num_levels=4, threshold=threshold, zoom_factor=4) fixes = dict() if len(fp) == 1: x = fp[0] fixes['points'] = [(x[2], x[1])] fixes['levels'] = [0] else: max_delta_time = max(4, (fp[-1][0] - fp[0][0]) / 500) fixes = map( lambda x: (x[2], x[1], (x[0] / max_delta_time * threshold)), fp) fixes = encoder.classify(fixes, remove=False, type="ppd") encoded = encoder.encode(fixes['points'], fixes['levels']) barogram_t = encoder.encodeList( [fp[i][0] for i in range(len(fp)) if fixes['levels'][i] != -1]) barogram_h = encoder.encodeList( [fp[i][3] for i in range(len(fp)) if fixes['levels'][i] != -1]) enl = encoder.encodeList( [fp[i][4] or 0 for i in range(len(fp)) if fixes['levels'][i] != -1]) elevations = encoder.encodeList([ fp[i][5] or UNKNOWN_ELEVATION for i in range(len(fp)) if fixes['levels'][i] != -1 ]) return dict(encoded=encoded, zoom_levels=zoom_levels, num_levels=num_levels, barogram_t=barogram_t, barogram_h=barogram_h, enl=enl, elevations=elevations)