Part of the problem is multiple tracks. Those tracks may be only 10 feet (3 m) apart. (I don't know if high-speed rail lines in Spain are that close, and I don't know if the line where the accident occurred was double track.)
"Reasonably accurate GPS" trying to determine which track you're on at 150 mph is not as simple as you make it sound. Yeah, it can determine how far along the track you are. But when you get two trains moving toward each other, each at 150 MPH, do you really trust that GPS to tell you that they're on different tracks?
It's very easy since there is limited ability for trains to change tracks, so the location history of the train is a strong indicator of which track it is on. Even Google Maps can tell you which lane you are in since god knows when, and cars can freely change lanes. And that's just consumer software. For something commercial like a train they could trivially solve this problem with something more robust. But I'm not familiar with the Spanish system; how much of the engineering did they do?
Trains can't change lanes without warning like a Nissan Altima on the Dan Ryan Expressway. The only way a train can move from one track to an adjacent track -- or get on the first track in the first place -- is if switches are set to allow the train onto that track. And on any modern high-speed line, those switches are centrally controlled by dispatch.
Keeping track of which parallel track a train was on automatically was a solved problem a hundred years ago, using relays and lights and hard-wired logic. Adding computers and GPS greatly increases the precision with which dispatch knows position and speed along the track, but knowing which track has not changed in the last century.