onvaou

🚂 Onvaou

Application mobile React Native pour rechercher et planifier des trajets en train en France.

đŸ“± Description

Onvaou est une application de recherche de trajets ferroviaires utilisant les donnĂ©es GTFS de la SNCF. L’application permet de :

đŸ—ïž Architecture

Base de données

L’application utilise une base de donnĂ©es SQLite pour stocker et interroger les donnĂ©es GTFS :

Services principaux

🚀 Installation

1. Prérequis

node >= 18
npm >= 9

2. Installation des dépendances

npm install

3. Lancer l’application

# 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.

⚙ Initialisation automatique

Au premier lancement, l’application :

Lancements suivants : Instantanés (< 1 seconde)

Voir AUTO_INIT_GUIDE.md pour plus de détails.

đŸ› ïž GĂ©nĂ©ration manuelle (optionnel)

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

📚 Documentation

🔧 Scripts disponibles

Génération de données

# Créer/recréer la base de données GTFS
node scripts/createGTFSDatabase.js

Développement

# Lancer l'app
npm start

# Lancer sur iOS
npm run ios

# Lancer sur Android
npm run android

📁 Structure du projet

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

đŸ—„ïž Base de donnĂ©es SQLite

Tables

Vues optimisées

Index

La base de donnĂ©es contient plus de 10 index pour optimiser les requĂȘtes :

🔍 Utilisation de l’API GTFS

Exemple : Recherche de trajets

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.

📊 Performances

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

🔄 Mise Ă  jour des donnĂ©es GTFS

Pour mettre à jour les données avec une nouvelle export GTFS :

  1. Télécharger les nouvelles données GTFS depuis transport.data.gouv.fr
  2. Extraire les fichiers dans assets/sncf_data/
  3. Regénérer la base de données :
    node scripts/createGTFSDatabase.js
    
  4. La nouvelle base sera créée dans assets/gtfs.db

📝 Variables d’environnement

Cré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.

đŸ§Ș Tests

# TODO: Ajouter les tests
npm test

🐛 Problùmes connus

📄 Licence

Propriétaire - Tous droits réservés

đŸ‘„ Contributeurs

🙏 Remerciements


Note : Cette application est en cours de développement. Les fonctionnalités peuvent évoluer.