Actually, in a train context, inertial is pretty damn high accuracy because you already have the world's best odometer showing (A) how many times your known size wheel has turned on your known track; and (B) you can test many axels simultaneously to ensure no slippage (I guess you wouldn't test the wheels as they move faster creating a higher frequency sampling requirement for ~no benefit whereas a dedicated axel feature could live within an environmental enclosure protected from dust and grime); (C) you are constantly doing exactly the same trip-segments over and over again.
So for a train with an offline positioning requirement, I'd suggest that an odometer based solution is close to ideal.
Re odometer - don't the wheels of a train slide a little bit? I know the train is big pile of heavy iron, but still. My naive thinking is that when braking or during a rush start some extra distance can be covered.
If you are averaging axels across multiple carriages slippage is unlikely to amount to much. Moreover, because you are traveling known segments, you can reset your position at each station or known intersection/detectable segment terminus, so you're going to have zero accrued drift at that point. It's a perfect deployment scenario for an odometer based solution. If you want to be higher confidence, sensor-fusion with an IMU, laser TOF/LIDAR, camera, ambient light sensor, radio signals, or MEMS microphone can verify position. Et voila! - no need for GNSS.
Generally trains do everything they can to avoid slipping. They have anti-lock breaks and traction control just like your car, and stuff your car doesn’t have, like “sanders” which pour sand onto the track just in front of the wheels.
Regardless of material, dynamic friction is always lower than static friction. So for maximum acceleration and breaking it’s important to ensure you wheels stay in “rolling” mode of interaction, and don’t slip.
So for a train with an offline positioning requirement, I'd suggest that an odometer based solution is close to ideal.