Mobile Navigation App Development for City Navigation
Poor GPS accuracy in urban canyons, map matching errors, offline routing complexity — these are the real problems we solve daily. Over 5+ years we’ve delivered 30+ navigation projects: from pedestrian guides to car navigators with CarPlay and Android Auto integration. Each project starts with choosing the right map platform: Google, Mapbox, HERE, or OpenStreetMap. That decision drives cost, timeline, and feature set. We help clients balance routing accuracy, license costs, and offline support.
How to Choose a Map Platform for a Navigation App?
The first architectural decision is the SDK. It determines cost and capabilities for years to come.
| Platform | Routing | Traffic | Offline | Custom Style | Cost |
|---|---|---|---|---|---|
| Google Maps SDK + Navigation SDK | Excellent | Yes (real-time) | No | Limited | High at volume |
| Mapbox | Excellent | Yes (Isochrone API) | Yes (OfflineManager) | Full freedom | Medium |
| HERE Maps | Good | Yes | Yes | Medium | Medium |
| 2GIS | Good for CIS | Limited | Yes | Limited | Low for CIS |
| OpenStreetMap + OSRM | Open source | No | Depends on hosting | Full | Server costs |
Google Navigation SDK provides the best turn-by-turn experience out of the box, but the license prohibits showing competing services next to the map. Mapbox offers maximum flexibility, offline maps, and custom styles via Mapbox Studio.
How to Ensure Accurate Positioning and Map Matching in the City?
CLLocationManager / FusedLocationProviderClient — basic GPS. For navigation, key settings are:
-
desiredAccuracy: kCLLocationAccuracyBestForNavigation(iOS) — maximum accuracy, high power consumption -
distanceFilter: 5meters — update on every significant movement - Background operation:
locationbackground mode +allowsBackgroundLocationUpdates = true
Map matching — snapping GPS points to the road network. Raw GPS jumps by 10–30 meters, especially between buildings. Mapbox Map Matching API takes a set of coordinates and returns a track snapped to roads. Without this, the car appears to “drive through buildings” on the map. According to official Mapbox documentation, map matching accuracy reaches 1–2 meters in dense road networks. For pedestrian navigation, map matching is less critical — pedestrians can walk anywhere, strict snapping to roads hinders.
Determining Direction of Travel
Compass heading (CLHeading / SensorManager.getDefaultSensor(TYPE_ROTATION_VECTOR)) — for pedestrians. Orientation of velocity vector — for car navigation: direction is derived from the last two GPS points rather than the compass (more accurate when moving). At speeds below 5 km/h, switch back to compass.
Rotating map to heading: GMSCameraUpdate.setTarget(_:bearing:) (Google) or MapboxMap.setCamera(CameraOptions(bearing:)). Smooth rotation via animation with CATransaction / animated camera update.
Turn-by-Turn and Voice Guidance
Ready SDKs (Mapbox Navigation SDK, Google Navigation SDK) provide NavigationViewController / MapboxNavigationView — full navigation UI. Customization: colors, icons, show/hide elements via configuration objects.
For voice guidance: Mapbox Navigation SDK uses SpeechSynthesizer with the option to replace with Amazon Polly or custom TTS. Google Navigation SDK has built-in TTS without direct access. AVSpeechSynthesizer (iOS) / Android TextToSpeech if building prompts manually.
Crucial: interrupting other audio (music, podcasts) during prompts. AVAudioSession.sharedInstance().setCategory(.playback, options: .duckOthers) on iOS — lowers other audio volume without stopping. AudioFocusRequest.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK on Android — similar.
Rerouting and Alternative Routes
Off-route deviation triggers rerouting. Mapbox Navigation SDK does this automatically when deviation exceeds RouteOptions.maximumAllowedDivergence (default 20 meters from route). Rerouting takes 0.5–2 seconds, during which navigation continues on the old route.
Alternative routes at start: Google Directions API and Mapbox Directions API return up to 3 alternatives. Display on map as thin lines, tap to switch.
Why Does Offline Navigation Require a Separate Approach?
Offline navigation is one of the most complex components. Mapbox OfflineManager allows downloading region tiles, but routing offline requires a server-side engine. Main options:
| Engine | Language | Graph size (country) | Performance |
|---|---|---|---|
| OSRM | C++ | 200–500 MB | High, but requires server |
| Valhalla | C++ | 300–600 MB | Medium, flexible profiling |
| GraphHopper | Java | 100–300 MB | Embeds on Android via JNI |
For full offline on device — GraphHopper Embedded, integrated into Android via JNI or mobile graph file (~100–500 MB per country). On iOS, similar solution using Core ML or Metal for acceleration.
What’s Included in Navigation App Development?
- Documentation: API schemas, architecture, server deployment instructions.
- Source code with comments: map, GPS, routing, TTS modules.
- Access: App Store and Google Play developer accounts, map SDK API keys.
- Client team training: workshop on map customization, offline cache management.
- Technical support: 2 weeks post-release.
Development timeline: 10 to 20 weeks depending on functionality. Cost is calculated individually. Order turnkey navigation app development — contact us for a preliminary estimate.







