Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm trying to create a kind of turn-by-turn satellite navigation system using the iOS SDK. I get the directions from the server and draw them on the map, then I keep getting location updates from the iPhone's GPS chip. Currently I start by finding the nearest turning point then, each time the user comes within a certain distance of the next turning point, a verbal cue is given and the turning point index is incremented. This is a delicate system and I'd like to make it more robust so I can tell when the user is going the wrong direction etc.

Basically I'm looking for some literature about turn-by-turn navigation, in terms of tracking the user's progress and whether they're going the right direction. I'd have thought there's a lot of research out there but I can't seem to find anything apart from simple tutorials on how to use a given SDK or directions API. Can anyone direct me to a good run-through of the various techniques used in software such as TomTom or Google Maps Navigation?

share|improve this question
you want to create a Satellite navigation system effectively from scratch? unless for learning purposes save yourself the headache and use existing commercial solutions. Of Course if I was landed with it, I'd just scrape Google maps, simulate a "get direction" lookup, then just scrape the "directions text". I would then create another module that takes gps co-ordinates and returns names of current roads etc. You could then use a "text-to-speech" engine to "give directions" when the current location is near the direction. –  Darknight Mar 26 '12 at 11:15
Thanks for the reply, I've got all that sort of stuff implemented - route finding isn't the issue I'm looking at, just tracking the user's progress. Things like efficient algorithms for tracking how much the user has gone off course based on the locations of the various turning points. Ideally I'd like a journal or blog written by someone who has implemented a commercial-level system for turn-by-turn directions, and can identify some of the issues and share knowledge of how they worked around them. –  benwad Mar 26 '12 at 11:20
add comment

1 Answer

I don't think there is any such thing. There is just handful of turn-by-turn navigations out there, so each team just found out on their own and didn't publish anything, because after all, it was commercial product, not a research. There is however at least one open-source turn-by-turn navigation, navit, so you can get some inspiration there.

Also don't think that it's easy. It's probably several man-months effort even if you know what you are doing. The thing is incredibly tricky, because the GPS signal you get has random error, which can easily be 50 meters on crappy phone GPS in bad conditions (the error usually does not vary much between successive positions, so you can rely actually trust direction a bit more than position, but only if moving fast).

So you need vector data for the segments around current position, guess which of them the user is actually most likely to be on and if it's not on the route, request new route from that segment. And when selecting the likely segment, you have to take into account whether it's on route and whether it's connected to the one he's been on before and be ready to ignore a few positions if they seem too wrong and do a LOT of testing to get various fudge factors just about right.

You also need to take into account things like loosing signal in a tunnel (should somehow continue to the end of it and than wait for reacquiring the signal) and under bridges (few completely bogus positions).

(I am working on navigation system, so while not working on that bit myself, I know roughly what's there).

share|improve this answer
add comment

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.