Tracking a user in subway without GPS signal

The subway is a strange place: very common in most of the large cities, faster and more reliable than busses, but yet, by its very nature, a challenge to use by navigation apps. By being underground most of the time, there is no GPS or WiFi signal, and LTE/3G is sporadic at best (beside a couple of cities, but far from the standard) and 2G signal would massively increase the battery strain. Moreover, I’m unsure the reception would be good enough to perform a localization precise enough. The builtin location service is thus out of question.

I have no time to work on a direction app so I’ll just drop the concept that came to my mind here, free of any licence in the hope someone pick it up and implement it.

I’m living in Paris, where the subway system doesn’t say the name of the current station when the train gets in. This concept came to me while thinking about how a disabled person would know when they have to get off the train.

So, let’s go to the core of the subject: what do we have of reliable?

  • Accelerometer: Could detect acceleration/deceleration and use them to predict when the train is reaching a station. However, user movement and short unplanned stop out of station could be registered as false positive and provide incorrect data to the user (really challenging in the case where the user is disabled, and couldn’t easily check if the we are in the correct station after a long trip).
  • Sound feedback: something I saw in every subway I ever took, in at least 5 different countries on three continents is a sound emitted when doors are about to close. We could also use it, but from my experience in Paris, it could be triggered several times before leaving the station in the case something (or someone) was in the door, and their closing had to be canceled. This is a killer making it unusable alone.

My idea is to combine the accelerometer to detect when the train leave the first station (that we probably know, thanks to the last known location of the phone, near the station), then stop. At this point, we start listening for the signal that the doors are about to close. If the train restart without such a feedback, we discard this stop as noise. If we hear it, we register the change of station, and can possibly notify the user that they have to their stop is the next station. Using iOS, I’m aware the microphone access require extra permissions that could not be granted. I guess the implementation could make it optional, as a way to improve the system accuracy (falling back solely on the accelerometer otherwise).

While prototyping the concept, the only obstacle I ran into was detecting the direction the user is taking but maybe the expensive 2G geolocation could be enough to detect it. An other possibility is to trust the user but this is a risky path.

I hope this concept can be put on use to help people somewhere, ping me if you are aware of an implementation or if I missed a killer issue, that would explain why nothing properly support direction in a subway system.