def writeTracks(tkfiles, outputFile, usetimezone): """ Write track data. @param tkfiles: A list of TK files with track data. @param outputFile: The file to write to. """ # pylint: disable-msg=R0914 trackNumber = 0 for tkfile in tkfiles: for track in tkfile.tracks(): previousPoint = None trackNumber += 1 minutes, seconds = divmod(track.getTrackDuration(), 60) hours, minutes = divmod(minutes, 60) values = {"track": trackNumber, "trackpoints": track.getTrackPointCount(), "hours": hours, "minutes": minutes, "seconds": seconds, "distance": track.getTrackLength()} outputFile.write(TRACK_HEADER % values) for point in track.trackpoints(): speed = 0 bearing = 0 if previousPoint: distance, bearing = calculateVincentyDistance(previousPoint.getLatitude(), previousPoint.getLongitude(), point.getLatitude(), point.getLongitude()) timedelta = point.getDateTime() - previousPoint.getDateTime() time = timedelta.days * 24 * 60 * 60 + timedelta.seconds if time != 0: speed = distance / (time / float(60 * 60)) if tkfile.getLogVersion() != 2.0: temppressure = "" else: temppressure = TEMPERATURE_PRESSURE % ({"extensiontype": "TrackPoint", "temperature": point.getTemperature(), "pressure": point.getAirPressure(),}) if usetimezone: timezone = datetime(2000, 1, 1, 0, 0, 0, tzinfo = track.getTimezone()).strftime(", TZ=%z") else: timezone = "" values = {"lat": point.getLatitude(), "lon": point.getLongitude(), "datetime": point.getDateTime().strftime('%Y-%m-%dT%H:%M:%SZ'), "ele": point.getAltitude(), "speed": speed, "bearing": bearing + 0.5, "temppressure": temppressure, "timezone": timezone} if previousPoint: outputFile.write(TRACKPOINT % values) else: outputFile.write(FIRST_TRACKPOINT % values) previousPoint = point outputFile.write(TRACK_FOOTER)
def writeWaypoints(tkfiles, outputFile, usetimezone): """ Write waypoints. @param tkfiles: A list of TK files with track data. @param outputFile: The file to write to. """ # pylint: disable-msg=R0914 pushPoint = 0 for tkfile in tkfiles: previousPoint = None for track in tkfile.tracks(): for point in track.trackpoints(): if point.isLogPoint(): pushPoint = pushPoint + 1 speed = 0 bearing = 0 if previousPoint: distance, bearing = calculateVincentyDistance(previousPoint.getLatitude(), previousPoint.getLongitude(), point.getLatitude(), point.getLongitude()) timedelta = point.getDateTime() - previousPoint.getDateTime() time = timedelta.days * 24 * 60 * 60 + timedelta.seconds if time != 0: speed = distance / (time / float(60 * 60)) if tkfile.getLogVersion() != 2.0: temppressure = "" else: temppressure = TEMPERATURE_PRESSURE % ({"extensiontype": "Waypoint", "temperature": point.getTemperature(), "pressure": point.getAirPressure()}) if usetimezone: timezone = datetime(2000, 1, 1, 0, 0, 0, tzinfo = track.getTimezone()).strftime(", TZ=%z") else: timezone = "" values = {"lat": point.getLatitude(), "lon": point.getLongitude(), "datetime": point.getDateTime().strftime('%Y-%m-%dT%H:%M:%SZ'), "pushpoint": pushPoint, "ele": point.getAltitude(), "speed": speed, "bearing": bearing + 0.5, "temppressure": temppressure, "timezone": timezone} outputFile.write(WAYPOINT % values) previousPoint = point