GPS timestamping of digitized voltages from geophones
To tackle the time resolution and accuracy issue you could:


Attach the 1PPS signal to an interrupt pin
In the interrupt routine record the millis() value at the time the 1PPS signal is activated
In the main loop do a non-blocking read of the GPS data to find and build up the time string as it is sent from the GPS (shortly after the 1PPS is triggered).


You now know what the millis() count was the last time a 1PPS pulse arrived, and you know the current time to within a second. The 1PPS pulse will be at HH:MM:SS.000 (or as near as damnit) so if you subtract the current millis() from your recorded 1PPS millis() value it gives you the number of milliseconds since the 1PPS pulse. Add that to the current time, and you have 1ms accuracy in the time: HH:MM:SS.iii.