I am trying to build a turn-by-turn navigation app like TomTom or Mapquest, and I am looking for some help in getting started, in the direction of available options and licensing (if any).
Technically, I think its fairly easy to plot the current location or address on map via Core Location. But I have some question more specific to routing.
- Is there a Google/or any other API for turn-by-turn directions?
- Technically, what is the best way to go about creating an app like that using available 3rd party/open source tools (maps, routes, POI, etc.)?
- What are the potential challenges or do's and dont's?
The Google directions API might help you.
It has a number of limitations and restrictions in terms of usage; I suggest you read the page I linked.
Assuming it meets your needs, it is fairly easy to integrate with MapKit. I had success doing just that for an internal application.
As the lead engineer for the MapQuest app I can tell you from experience that there are plenty of challenges. MapQuest offers no iOS specific API though I had built the early beginnings of one. I can point you in the direction of RouteMe, an open source mapping API, that could give you a jump start. Otherwise you'd be stuck building an API over existing web services. You could also look into the MapKit APIs on iOS to get started. Secondly, there is the voice element which happens to be my favorite. You would need access to either a voice web service or you would want to incorporate something like on device TTS via Flite or the Open Ears project. My biggest challenge on MapQuest was getting smooth scrolling working. In retrospect I learned a ton about the UIScroll APIs that would have made MapQuest for iPhone a heck of a lot better but I no longer work for the company and can not change things.
Forgot the most important part. Regarding routing, I believe MapQuest has some very powerful routing APIs which seem to have made it in there more recent releases. These APIs give you side of street routing, and solid support for navigation. I'm not sure what the plan is currently but I understand their routing support only covers the US. With the heavy drive behind OSM I wouldn't be surprised if support was eventually expanded other countries.
You could also look into openrouteservice.org for routing in specific countries. While MapQuest doesn't currently support routing in other countries they have thrown their full weight behind OSM initiatives. I wouldn't be surprised if they are planning to roll something out soon in different countries. I'm not strong in routing but I could definitely give you guidance on the TTS work. Also, I know some gurus on the routing front that I could ping for answers. Depending on your ambition and the scale of your app you might do well to invest in client server based TTS. I've had really good experience with OpenMary (100% Java based TTS) in the past and it also supports different languages.