Application mobile React Native pour rechercher et planifier des trajets en train en France.
Onvaou est une application de recherche de trajets ferroviaires utilisant les donnĂ©es GTFS de la SNCF. Lâapplication permet de :
Lâapplication utilise une base de donnĂ©es SQLite pour stocker et interroger les donnĂ©es GTFS :
assets/sncf_data/ (fichiers GTFS bruts)assets/gtfs.db (générée, non versionée)gtfsDatabaseServiceEnhanced.ts : Service de recherche de trajets avec correspondanceslocalStationService.ts : Gestion des gareslocationService.ts : GéolocalisationpriceEstimationService.ts : Estimation des prixnode >= 18
npm >= 9
npm install
# Démarrer Expo
npm start
# iOS
npm run ios
# Android
npm run android
đ Câest tout ! La base de donnĂ©es GTFS se crĂ©e automatiquement au premier lancement.
Au premier lancement, lâapplication :
gtfs.db depuis les fichiers GTFSLancements suivants : Instantanés (< 1 seconde)
Voir AUTO_INIT_GUIDE.md pour plus de détails.
Si vous souhaitez générer la DB manuellement (pour développement) :
# Installer better-sqlite3 pour Node.js
npm install --save-dev better-sqlite3
# Générer la base de données
node scripts/createGTFSDatabase.js
# Créer/recréer la base de données GTFS
node scripts/createGTFSDatabase.js
# Lancer l'app
npm start
# Lancer sur iOS
npm run ios
# Lancer sur Android
npm run android
onvaou/
âââ assets/
â âââ sncf_data/ # DonnĂ©es GTFS sources (versionnĂ©es)
â â âââ stops.txt
â â âââ routes.txt
â â âââ trips.txt
â â âââ stop_times.txt
â â âââ calendar_dates.txt
â âââ gtfs.db # Base SQLite (gĂ©nĂ©rĂ©e, ignorĂ©e par git)
â
âââ scripts/
â âââ createGTFSDatabase.js # Script de gĂ©nĂ©ration de la DB
â âââ export-opendata-sncf-gtfs.zip
â
âââ src/
â âââ components/ # Composants React Native
â âââ screens/ # Ăcrans de l'application
â âââ services/ # Services mĂ©tier
â â âââ gtfsDatabaseServiceEnhanced.ts # â Service principal GTFS
â â âââ localStationService.ts
â â âââ ...
â âââ data/ # DonnĂ©es statiques (stations, labels)
â
âââ GTFS_DATABASE_GUIDE.md # Guide d'utilisation de la DB
âââ CORRESPONDANCES_GUIDE.md # Guide des correspondances
âââ README.md # Ce fichier
La base de donnĂ©es contient plus de 10 index pour optimiser les requĂȘtes :
import { gtfsDbEnhanced } from './src/services/gtfsDatabaseServiceEnhanced';
// Initialiser
await gtfsDbEnhanced.initialize();
// Rechercher des trajets (direct + correspondances)
const journeys = await gtfsDbEnhanced.findAllJourneys(
'StopID:DUA8711300:LOC', // Paris Gare de Lyon
'StopID:DUA8727100:LOC', // Lyon Part Dieu
'08:00:00', // Heure de départ
2 // Max 2 correspondances
);
// Afficher les résultats
journeys.forEach(journey => {
console.log(`Durée: ${journey.totalDuration} min`);
console.log(`Correspondances: ${journey.legs.length - 1}`);
journey.legs.forEach(leg => {
console.log(`${leg.from_stop_name} â ${leg.to_stop_name}`);
console.log(`${leg.departure_time} â ${leg.arrival_time}`);
});
});
Voir GTFS_DATABASE_GUIDE.md pour plus dâexemples.
| Type de requĂȘte | Temps moyen |
|---|---|
| Recherche de gare | < 10ms |
| Gares proches (GPS) | < 20ms |
| Trajets directs | < 50ms |
| Avec 1 correspondance | < 200ms |
| Avec 2 correspondances | < 500ms |
Pour mettre à jour les données avec une nouvelle export GTFS :
assets/sncf_data/node scripts/createGTFSDatabase.js
assets/gtfs.dbCréer un fichier .env à la racine :
# Navitia API (optionnel - pour horaires temps réel)
EXPO_PUBLIC_NAVITIA_API_KEY=your_navitia_api_key_here
# Mapbox (optionnel - pour la carte)
EXPO_PUBLIC_MAPBOX_TOKEN=your_mapbox_token_here
Voir .env.example pour un modĂšle.
# TODO: Ajouter les tests
npm test
Propriétaire - Tous droits réservés
Note : Cette application est en cours de développement. Les fonctionnalités peuvent évoluer.