In Kubas Hauptstadt Havanna ist die Mobilität ein tägliches Hindernis. Seit Jahren kämpfen die Bewohner mit knappen Treibstoffreserven, überlasteten öffentlichen Verkehrsmitteln und einer maroden Infrastruktur. Doch statt auf staatliche Lösungen zu warten, entwickelte ein 39-jähriger Softwareentwickler dort ein eigenes Fahrdienst-System – nicht als teures Startup-Projekt, sondern aus purer Notwendigkeit heraus. Das Ergebnis: Über 20.000 echte Taxifahrten, abgewickelt auf Smartphones mit lediglich 1 GB Arbeitsspeicher und sporadischem 2G-Netzempfang. Der Schlüssel zum Erfolg lag nicht in der Neuerfindung des Rads, sondern in der radikalen Vereinfachung bewährter Technologien.
Ein Taxi-System aus dem Nichts: Die Grundarchitektur
Die von ihm entwickelte Lösung besteht aus drei Kernkomponenten, die nahtlos zusammenarbeiten:
- Passagier-App (58 MB): Ermöglicht die Anforderung von Fahrten, die Offline-Suche nach Adressen sowie die Echtzeit-Anzeige verfügbarer Fahrer auf einer Karte.
- Fahrer-App (62 MB): Nimmt Fahrtanfragen entgegen, bestätigt Buchungen und übermittelt die eigene Position in Echtzeit.
- Backend (Python/Django): Übernimmt die Vermittlung zwischen Passagieren und Fahrern basierend auf der tatsächlichen Straßenentfernung – berechnet mit OSRM, einem Open-Source-Routing-Tool. Nominatim, der sonst übliche Geocoding-Dienst, wird bewusst vermieden.
Ein entscheidender Vorteil: Sämtliche Kartendaten und Funktionen arbeiten vollständig offline. Das bedeutet, Passagiere können die Karte durchstöbern, Adressen suchen oder Lieblingsorte speichern – selbst ohne Internetverbindung. Lediglich die initiale Fahrer-Vermittlung erfordert eine minimale Netzwerkverbindung.
Karte von 160 MB auf 25 MB: Die Kunst der Reduktion
Organic Maps, die Open-Source-Navigations-App, die als technische Basis diente, ist ein mächtiges Werkzeug. Doch ihre Stärken – etwa detaillierte Wanderwege, Radrouten oder globale Abdeckung – waren für ein Taxi-System in Kuba überflüssig. Das ursprüngliche .mwm-Kartenformat des Projekts wiegt über 160 MB – viel zu groß für die schwachen Android-Geräte vor Ort.
Warum die Karte der Flaschenhals war
Die größte Datei im System ist nicht der App-Code, sondern die Kartendaten selbst. Eine Standard-.mwm-Datei für Kuba enthält:
- Übersetzungen in über 50 Sprachen – von Arabisch bis Vietnamesisch.
- Unzählige unbenannte Polygone wie Felder, Wälder oder leere Grundstücke.
- Metadaten zu jedem Punkt von Interesse, selbst wenn dieser nicht beschriftet ist.
Diese Daten sind für Navigations-Apps sinnvoll, nicht jedoch für ein Taxi-System, das lediglich nach benannten Straßen und Orten suchen muss.
Der Umbau der Kartengenerierung
Statt nur Code aus Organic Maps zu entfernen, wurde der gesamte Kartengenerierungsprozess neu konzipiert. Der Entwickler baute eine maßgeschneiderte Pipeline, die OpenStreetMap-Daten für Kuba filtert und komprimiert:
- Sprachfilter: Es werden nur Spanisch und Englisch beibehalten. Dadurch reduziert sich der Metadatenanteil um etwa 80%.
- Geometrie-Filter: Alle unbenannten Polygone – etwa leere Grundstücke oder namenlose Wälder – werden entfernt. Ein Taxi benötigt keine Darstellung solcher Flächen.
- Integrierter Suchindex: Während der Generierung wird ein komprimierter Suchindex direkt in die
.mwm-Datei eingebettet. Dadurch entfällt die Abhängigkeit von externen Geocoding-Diensten wie Nominatim. Die Suche erfolgt in Echtzeit und offline.
- Ausgabe: Das Ergebnis ist eine schlanke
.mwm-Datei von nur 25 MB – gegenüber den ursprünglichen 70 MB der offiziellen Organic-Maps-Karte für Kuba.
Code-Bereinigung: Was wirklich übrig blieb
Mit den verkleinerten Karten konnte der Entwickler auch den App-Code radikal vereinfachen. Entfernt wurden unter anderem:
- Track-Aufzeichnung: Fahrten müssen nicht protokolliert werden – weder für Passagiere noch Fahrer.
- Mehrfach-Thread-Rendering: Spart Arbeitsspeicher und beschleunigt die Darstellung auf schwacher Hardware.
- Cloud-Synchronisation von Lesezeichen: In Kuba gibt es kaum stabile Internetverbindungen – lokale Speicherung reicht völlig.
- Weltkarten-Tiles: Nur die Karte Kubas wird benötigt, globale Daten sind irrelevant.
Was blieb, wurde kreativ umfunktioniert: Die BookmarkManager-Komponente wurde zur Speicherung von Lieblingsorten wie Zuhause oder Arbeitsplatz. Ein Klick genügt, um eine Fahrt dorthin anzufordern.
Das Ergebnis der Optimierungen:
- Passagier-App: 58 MB
- Fahrer-App: 62 MB
- Bootzeit: Reduziert von 8 auf unter 3 Sekunden auf alten Android-Geräten
Offline-Suche ohne Internet: Ein Gamechanger
In den meisten Navigations-Apps wird eine Adresssuche wie "Calle 23 esquina L, Vedado" an einen externen Dienst wie Nominatim geschickt. Dieser Dienst übersetzt den Text in Koordinaten – doch das erfordert eine funktionierende Internetverbindung und einen Server. In Kuba, wo das Netz oft nur sporadisch verfügbar ist, ein undenkbares Szenario.
Die Lösung: Ein Suchindex im Kartenfile
Der Entwickler integrierte den Suchindex direkt in die .mwm-Datei. Dazu wurden folgende Anpassungen vorgenommen:
- Normalisierte Straßennamen: Berücksichtigung typischer Schreibfehler und Abkürzungen in kubanischen Adressen (z. B. "23 y L" statt "Calle 23 y Calle L").
- Intersections als eigenständige Einträge: Kreuzungen wie "23 y L" werden separat gespeichert und priorisiert.
- Benannte Orte: Parks, Museen oder Gebäude wie "Parque Central" oder "Capitolio" sind direkt durchsuchbar.
Wenn ein Passagier eine Adresse eingibt, führt die App folgende Schritte lokal aus:
- Tokenisierung: Der eingegebene Text wird in relevante Schlüsselwörter zerlegt.
- Fuzzy-Matching: Ein Algorithmus sucht nach ähnlichen Einträgen im Index – selbst bei Tippfehlern oder umgangssprachlichen Formulierungen.
- Schnelle Rückgabe: Die Ergebnisse erscheinen innerhalb von zwei Sekunden, ohne dass eine Internetverbindung nötig ist.
Echtzeit-Tracking ohne Serverlast
Ebenso wichtig wie die Offline-Funktionalität ist die Echtzeit-Anzeige verfügbarer Fahrer. Statt auf komplexe Backend-Lösungen zu setzen, nutzte der Entwickler die native Marker-Funktion von Organic Maps:
- Fahrer-App: Ein angepasster
TaxiDriverMark-Marker zeigt die eigene Position an und aktualisiert sich alle drei Sekunden per UDP-Protokoll.
- Passagier-App: Das Backend sendet eine Liste der Koordinaten und Statusmeldungen verfügbarer Fahrer. Die App rendert diese als einfache Marker auf der Karte – ohne die Basiskarte neu laden zu müssen.
Diese Lösung ist nicht nur ressourcenschonend, sondern auch robust: Selbst bei instabilen Netzwerkverbindungen bleibt die Anzeige stabil, da die Marker unabhängig von der Kartendarstellung aktualisiert werden.
Fazit: Ein Proof of Concept für ressourcenschwache Umgebungen
Das Projekt des kubanischen Entwicklers zeigt eindrucksvoll, wie Open-Source-Technologien und kreative Optimierung selbst in extrem begrenzten Umgebungen funktionierende Lösungen hervorbringen können. Mit minimalen Mitteln – einem Python/Django-Backend, angepassten Organic-Maps-Apps und maßgeschneiderten Kartendaten – schuf er ein System, das unter Bedingungen läuft, die für kommerzielle Anbieter undurchführbar wären.
Die Technologie dahinter ist kein Geheimnis mehr: Es geht um radikale Vereinfachung, um das Entfernen von Ballast und um die Nutzung bestehender Tools in unerwarteter Weise. Für Entwickler in ähnlichen Kontexten – sei es in Entwicklungsländern, auf abgelegenen Inseln oder in Krisenregionen – bietet dieses Projekt einen wertvollen Leitfaden. Die Frage ist nicht, ob eine Lösung technisch möglich ist, sondern wie viel man weglassen kann, um sie umsetzbar zu machen.
Die nächsten Schritte? Der Entwickler plant, die Lösung weiter zu skalieren und möglicherweise mit lokalen Taxiunternehmen zu kooperieren. Eines ist sicher: In einer Welt, die immer stärker auf Cloud-Dienste und High-End-Hardware setzt, könnte dieses Projekt zum Vorbild für Lösungen werden, die mit dem arbeiten, was wirklich verfügbar ist.
KI-Zusammenfassung
Discover how a Cuban developer engineered a ride-hailing app enabling 20,000+ taxi rides on low-end phones with intermittent 2G signals using Organic Maps and OpenStreetMap.