what's puzzling me is the huge amount of data and I have no idea how and where to start to read by serialDataAvail () and serialGetchar() and where and when to stop in order to get the data in the right order and don't miss or drop some or completely mess them up:

gps.location.lat() // Latitude in degrees (double)

gps.location.lng() // Longitude in degrees (double)

gps.location.rawLat().deg // Raw latitude in whole degrees

gps.location.rawLat().billionths // ... and billionths (u16/u32)

gps.location.rawLng().deg // Raw longitude in whole degrees

gps.location.rawLng().billionths // ... and billionths (u16/u32)

gps.date.value() // Raw date in DDMMYY format (u32)

gps.date.year() // Year (2000+) (u16)

gps.date.month() // Month (1-12) (u8)

gps.date.day() // Day (1-31) (u8)

gps.time.value() // Raw time in HHMMSSCC format (u32)

gps.time.hour() // Hour (0-23) (u8)

gps.time.minute() // Minute (0-59) (u8)

gps.time.second() // Second (0-59) (u8)

gps.time.centisecond() // 100ths of a second (0-99) (u8)

gps.speed.value() // Raw speed in 100ths of a knot (i32)

gps.speed.knots() // Speed in knots (double)

gps.speed.mph() // Speed in miles per hour (double)

gps.speed.mps() // Speed in meters per second (double)

gps.speed.kmph() // Speed in kilometers per hour (double)

gps.course.value() // Raw course in 100ths of a degree (i32)

gps.course.deg() // Course in degrees (double)

gps.altitude.value() // Raw altitude in centimeters (i32)

gps.altitude.meters() // Altitude in meters (double)

gps.altitude.miles() // Altitude in miles (double)

gps.altitude.kilometers() // Altitude in kilometers (double)

gps.altitude.feet() // Altitude in feet (double)

gps.satellites.value() // Number of satellites in use (u32)

gps.hdop.value() // Horizontal Dim. of Precision (100ths-i32)

In other words, I have no idea about this entire task