Einfache Navigations-App schnell selber Programmieren? Bitte um Ideen und Anregungen.

Hallo,

mein kleiner Bruder studiert in München und hat einen Studentenjob als Fahrradkurier ergattern können.
Er transportiert irgendwelche gestempelten und unterschriebenen Dokumente. Von einer Steuer-, Anwalts-, Notar-, Immobilienkanzlei zur nächsten.

Er weiß nie wo seine Route anfängt und wie viele Orte er anfahren soll und wo die Route endet.
Es kann also sein, dass er bei Kanzlei A in Musterstraße X Dokumente abholen muss und 10 Orte anfahren muss und eine Woche später beginnt er bei Kanzlei B und muss 15 ganz andere Orte anfahren.
Start, Zwischenziele und Anzahl der Zwischenziele variieren also jeder Mal.
Er bekommt aber per Email vorab die Adressen und fängt dann an zu arbeiten bzw. auszufahren.
Wenn niemand da ist, möchte er bitte die Akte in den Briefkasten werfen und Anrufen oder eine Email schreiben, dass die Akte eingetroffen ist.

Problem:
Die ganze Route vorab zu organisieren dauert lange und dafür wird er leider (trotz 10,50€/Std.) nicht bezahlt.

Nun meine Frage an Euch:
Ich möchte meinem Bruder helfen und eine App programmieren, die folgendermaßen ganz simpel funktionieren soll.

-Er pflegt alle Zwischenziele als Route ein.
-Die Navigationsapp errechnet den Start und die Zwischenziele so, dass die Route durch die Stadt am schnellsten und einfachsten verläuft.
-Mein Bruder soll per Kopfhörer von Ziel zu Ziel navigiert werden.
-Jedes Mal, wenn er ein Zwischenziel erreicht hat, merkt die App das und blendet zwei Buttons ein, über die er den Kunden Anrufen oder eine vorformulierte Mail abschicken kann.

Anschließend lotst die App ihn zum nächsten Zwischenziel.

Fertig.

Gibt es schon so eine App?
Wenn nein, ist es kompliziert sowas selber zu programmieren, wenn man lediglich etwas Java und JavaScript kann? Komme erst ins dritte Informatiksemester.
Gibt es schon Codeschnipsel die man lediglich anpassen muss?
Sind die Schnittstellen zu GoogleMaps, Falk oder OpenStreetMap für sowas kostenfrei?

Freue mich auf eine informative Diskussion.

Vielen Dank.
Laura.
 

kneitzel

Top Contributor
Erst einmal die Idee, sowas selbst zu schreiben:
Also Google Maps ist kostenpflichtig gemacht worden vor ein paar Jahren (man bekam aber zumindest damals ein relativ großes Kontigent kostenfrei). OpenStreetMap ist frei (open).
Aber die API Aufrufe brauchst Du nur, wenn Du es komplett in Deine App integrierst. Ich hatte in meiner App damals einfach zur Navigation Google Maps aufgerufen - damit bin ich ohne API ausgekommen.

Das Problem, dass ich jetzt hier sehe, ist aber: Du musst die Reihenfolge der Stops ermitteln. Das wird schon relativ schwer. Denn es geht ja nicht nur um Strecke zwischen zwei Punkten (Luftweg) sondern es müssen ja auch Straßen und ggf. Baustellen berücksichtigt werden. Das Routing von Google Maps macht das - aber die Reihenfolge musst Du vorher festlegen.

Da wäre dann maximal die Idee, die Routen alle auszuprobieren. Aber bei 15 Zielen ist das eine ganze Menge und diese Entwicklung mit O(n!) taugt schlicht so nichts. Daher würde es dann doch auf eine Map API zurück gehen um für jede Adresse einen Punkt zu bekommen. Dann hast Du eine gewichtete Map und kannst da entsprechend per A* oder Dijkstra vorgehen. Das ginge also relativ gut.

Gibt es sowas bereits?
Ja klar: https://www.badgermapping.com/blog/route-planner-google-maps-multiple-stops/
Das wäre jetzt ein Blog, der die manuelle Erstellung der Route in Google Maps erläutert (Wäre dann ähnlich wie das, was ich oben beschrieben habe nur eben mit Menschlicher KI ... Die Route wird ja auch graphisch angezeigt was es einfach macht, da mit Verschieben der Reihenfolge eine Route zu erstellen. ABER: Nur maximal 10 Stops. Also evtl. nicht genug.
Die Routenplaner kosten dann aber alle Geld, die sowas machen. In den Blog wird RouteXL vorgestellt: bis 20 Stops (Nutzung per Webbrowser) ist es kostenlos. Nutzung per API leider nur 10.
==> Das hört sich dann ja prinzipiell gut an.

Ohne alle Details zu kennen, wäre daher meine Lösungsidee:
-> Die Planung kann als erster Schritt ja mit einer Lösung wie Route XL erfolgen. Das vereinfacht die Planung enorm denke ich mal.
-> Die Route selbst kommt dann in eine App, die Du schreibst. Die Importiert die Daten und bietet dann:
- Liste mit Zielen (incl. Status wie erledigt oder so)
- Starten von Google Maps mit Navigation
- Kontaktaufnahme mit Empfänger auf Knopfdruck

So eine App ist nicht schwer zu schreiben aber ich empfehle, dass man sich mit den Grundlagen vertraut macht (developer.android.com bietet da sehr viel!) und nicht direkt mit dem Zusammenfügen von Bruchstücken anfängt. Wenn man die Grundlagen verstanden hat (Wie ist eine Applikation aufgebaut, Lifecycle einer Activity, Was ist ein Intend, ...), dann wird man eigentlich alles schnell und einfach finden und auch problemlos zusammen bauen.
 

Mart

Top Contributor
Weiterhin ist das Problem bekannt als "Travelling Salesman Problem": https://www.quantamagazine.org/computer-scientists-break-traveling-salesperson-record-20201008/ (und mit einer effiziente(re)n Problemlösung kann man unabhängig vom fachlichen Hintergrund gewaltige Probleme haben)
du wirst in diesem fall immer in das exponentielle problem laufen falls immer der perfekte weg gefunden werden sollte

deswegen wäre eine durchschnittliche problem lösung ausreichend um somit die exponentielle problmeatik zu "vermeiden" aber irgendwann wird man es immer haben
 

Robert Zenz

Bekanntes Mitglied
So eine App ist nicht schwer zu schreiben...

Wenn es von Grund auf neu sein soll muss ich dir widersprechen, das ufert schnell aus. Also, ich spiele jetzt nur ungern den Spielverderber, der Funktionsumfang ist ueberschaubar, aber hat es echt in sich:
  1. Karten anzeigen, Adressen finden und Navigation dorthin
    1. Fertige Komponente, wenn ja von wem? Neuschreiben? ... Eher nicht.
    2. Kostenlose Komponenten haben dann meistens Einschraenkungen, ist diese dann trotzdem ausreichend?
  2. Beste Route finden
    1. Kann das die Komponente? Wahrscheinlich nicht.
    2. Gibt es eventuell noch eine die nur das macht?
  3. Daten ablegen, und eventuell synchronisieren auf mehrere Geraete
    1. Will der Bruder sein Smartphone als Navi haben, aber die Route auf einem Tablet oder PC verwalten?
    2. Wenn ja, eigener Server? Google Dienst missbrauchen (zum Beispiel als Text in einem Termin ablegen und ueber den Kalendar synchronisieren)?
  4. Verwendungszweck, also wirklich die Ablauflogik hat sicher auch einige Fallstricke und ist jetzt auch nichts was nach 3 Personenstunden klingt.
    1. Route anlegen und berechnen.
    2. Route eventuell korrigieren.
    3. Route speichern und laden.
    4. Navigieren.
    5. Bei erreichen eines Zieles Anruf machen oder E-Mail versenden.
      1. Android Anrufe machen geht vermutlich relativ leicht.
      2. E-Mail verschicken kann durchaus Spasz sein, besonders mit vorgefertigten Text.
    6. Route loeschen.
Und etwas anderes was mir gerade einfaellt ist der Datenschutz. Weisz der Arbeitgeber dass Kundendaten/Adressen auf privaten Geraeten landen? Wenn eigene App, wie werden diese Daten behandelt? Wenn Dritt-Apps, wie werden diese Daten behandelt? Weil wenn man sich igendeine App zieht zum navigieren, was darf die dann mit den Daten? Natuerlich, wenn man der App nur Strassennamen und Nummer gibt ist es relativ anonym, aber wenn es dort nur eine Firma in dem Haus gibt, doch nicht so wirklich. Und wenn dann der Startpunkt jedes mal der Absender ist, wo es eventuell auch nur eine Firma im Haus gibt, wird es schon fragwuerdiger. ... Auf der anderen Seite, vielleicht sollte ich aufhoeren ueber Datenschutz nachzudenken, bekomme da gerade Kopfschmerzen.
 
Hallo kneitzel und an alle Anderen,

vielen vielen Dank für diese ausführliche Informationen!

Besonders danke für diesen Link: https://www.badgermapping.com/blog/route-planner-google-maps-multiple-stops/
Da steht eigentlich alles an Informationen drin, die ich benötige. Danke!

Ich habe Verständnis, wenn sowas kostenpflichtig ist. Viele Programmierer investieren viel Zeit und müssen ja auch von irgendwas leben. Aber versuchen wir es doch erst mal kostenlos oder kostengünstig.

Mal was Lustiges am Rande. Mein Bruder macht das aktuell so:
- Er hat einen Schreibtisch mir Glasplatte. Unter die Glasplatte hat er eine große Karte von München gelegt.
- Dann googelt er alle Adressen und markiert sie auf der Glasplatte. Dann hat er erst mal alle Ziele vor Augen.
- Anschließend verbindet er die Punkte wie in einem Labyrinth nach Gefühl so, dass er einschätzt die kürzeste Route „gemalt“ zu haben. (nicht Luftlinie).
- Dann nummeriert er die Zwischenziele durch und druckt sich die Adressen nummerisch aufsteigend aus.

So fährt er zu einem Ziel und gibt danach bei Google Maps das nummerisch nächste anzufahrende Ziel ein.

Er meint allein dieser Aufwand kostet 1/3 der gesamten Arbeitszeit haha…
 
@kneitzel
Ich finde Deine Lösungsidee gut und möchte sie erweitern mit dem Hintergrund, dass man leider nur 10 Ziele pro API-Aufruf zusammenstellen kann.
Ich habe zur Verständnis 4 Bilder hochgeladen.

Folgendes wird mit Google Maps API im Browser von zu Hause erledigt:
- Es werden alle anzufahrenden Adressen aus einer Datenbank oder per Hand in die Map geladen. (blaue Punkte in Bild 1).
- Dann werden (nach Gefühl) maximal 10 Punkte „in Blöcke“ eingekreist. (pinke Kreise in Bild 2)
- In diesen Blöcken werden ein Start (grüner Punkt) und ein Ziel (roter Punkt) per Klick definiert (Bild 3).
- Der große grüne und große rote Punkt sind die absoluten Start- und Endpunkte der gesamten Route. Die kleinen grünen und roten Punkte die Start- und Ziele der jeweiligen umkreisten Blöcke.
- Die nahgelegenen kleinen roten und grünen Punkte sind die Ziel- und Startpunkte der jeweiligen Blöcke (Bild 4).
- Soooo ... Diese Adressen eines eingekreisten Blockes gibt Google Maps als Längen- und Breitengrade aus.

Nun weiter mit RouteXL per Smartphone:
- Die zuvor mit Google Maps erstellen Längen- und Breitengrade der jeweiligen umkreisten Blöcke, werden als Route mit RouteXL geladen.
- Ist ein umkreister Block abgefahren, wird der nächste geladen. (Bild 4).
- So umgeht man das Problem mit maximal 10 Zielen pro Route und erhält trotzdem eine Navigation mit der kürzesten Route innerhalb eines umkreisten Blockes.

Es ist nicht die sauberste Lösung aber wenn man somit 80% der perfektesten Lösung erhält, ist es schon super.

Was hältst Du davon?

Danke.
 

Anhänge

  • 1.jpg
    1.jpg
    1,7 MB · Aufrufe: 4
  • 2.jpg
    2.jpg
    1,9 MB · Aufrufe: 2
  • 3.jpg
    3.jpg
    1,9 MB · Aufrufe: 0
  • 4.jpg
    4.jpg
    1,9 MB · Aufrufe: 2
Zuletzt bearbeitet:

kneitzel

Top Contributor
Wenn es von Grund auf neu sein soll
So etwas würde ich nie von Grund auf neu schreiben! Es gibt die fertigen Komponenten und die sind einfach einzusetzen. Daher ja auch die Skizzierung, wie eine Lösung aussehen könnte. Da reduziert sich die app wirklich auf ein absolutes Minimum. Und wenn es komplexe Dinge schon als gute Lösung gibt: Da würde ich dann gar nicht gegen angehen. 35€/Monat - das ist doch keine große Summe. Wenn man z.B. eine Lösung baut, die das für mehrere Kuriere ermittelt, dann hat man bei der Fair Use Definition von Route XL 5000 Stops / Tag = 200 Routen a 25 Stops. Das kann eigentlich kein Hindernis sein!

Was hältst Du davon?
Generell ist das in Ordnung. Dabei würde ich bei der Umsetzung aber wirklich versuchen, möglichst einfach zu bleiben. Das hat den Vorteil, dass Du schnell eine erste App hast, die sinnvoll nutzbar ist.

Und das kann tatsächlich eine einfache App sein, die nur die Ziele in einer Reihenfolge anzeigen kann und dann z.B. bei Click Google Maps aufruft mit der Route. Oder eben der Anruf bei einer Nummer. ==> Ganz einfach umzusetzen.

Den Weg zur API kann dann schnell sinnvoll werden, denn die API nutzen kann einfacher sein, als da Import / Export Funktionen manuell künstlich zu basteln. Aber auf jeden Fall würde ich die Abläufe erst einmal testen in der Oberfläche.
Und wenn API, dann würde ich da auch direkt überlegen: Kann man sowas evtl. zentral aufbauen um dann einen Account für mehrere Kuriere zu nutzen. Sobald mehrere das nutzen würden, teilen sich die Kosten ja sofort...

Mit der Google Maps Directions API geht das, die Optimierung ist allerdings nicht kostenfrei, andererseits auch nicht besonders teuer (10 USD für 1.000 Anfragen). Hierfür setzt man beim waypoint-Parameter optimize auf true: &waypoints=optimize:true. S. https://developers.google.com/maps/documentation/directions/get-directions#OptimizeWaypoints
Diese Lösung hat wohl eine Begrenzung auf 25 Wegpunkte. Das wäre da evtl. ein Hinweis, der wichtig sein könnte. (Wobei das alles schwer in der Dokumentation zu finden ist - das findet sich etwas bei dem Link zu den Preisen.)
 
Super! Danke für die Anregungen!
Ich versuche mal mein Glück und werde dabei schön einfach bleiben.

Jetzt mal eine andere Frage.

Ich habe Erfahrungen in PHP, mySQL und JavaScript.
Auch etwas Java mit der Umgebung Eclipse.

Welche Sprache würde Ihr empfehlen um auf Android (Smartphone meines Bruders) schnell und ohne großen Aufwand eine App zu entwickeln, die sich Daten aus einer mySQL Datenbank holt und verarbeitet.

Danke.
 

mihe7

Top Contributor
Welche Sprache würde Ihr empfehlen um auf Android (Smartphone meines Bruders) schnell und ohne großen Aufwand eine App zu entwickeln, die sich Daten aus einer mySQL Datenbank holt und verarbeitet.
Warum bleibst Du nicht einfach bei HTML/JavaScript? Serverseitig kannst Du natürlich PHP verwenden, um Daten und Geschäftslogik per HTTP(S) der App zur Verfügung zu stellen.

Natürlich kannst Du auch eine native App mit Java oder Kotlin schreiben.
 

kneitzel

Top Contributor
Welche Sprache würde Ihr empfehlen um auf Android (Smartphone meines Bruders) schnell und ohne großen Aufwand eine App zu entwickeln, die sich Daten aus einer mySQL Datenbank holt und verarbeitet.
Java oder Kotlin -> developer.android.com wäre da der Einstiegspunkt. Wenn Du Java schon etwas kennst, dann nimm Java.

Direkt auf eine Datenbank würde ich da nicht zugreifen. Da sollte man einen Webservice drumherum erstellen. Das ging dann mit Java, Kotlin, PHP, ... Da müsste man schauen, was Du bisher schon alles gemacht hast. Mit Java wäre dann ein Framework wie Spring oder so zu empfehlen.

Generell kann man aber auch bei JavaScript und so bleiben. Da wäre dann neben Nutzung des Browsers auf dem Android Handy auch etwas wie Apache Cordova denkbar.
 
@mihe7

Um meine Kenntnisse zu erweitern würde ich lieber eine native App entwickeln.

Vielleicht programmiere ich sogar mal eine lustige App, die ich in einen Store lade und für 0,99€ verkaufe oder so ;-P

Laut Google komme ich da an Java (für Andriod) und an Swift (für Apple) nicht vorbei. Stimmts?
 

kneitzel

Top Contributor
Laut Google komme ich da an Java (für Andriod) und an Swift (für Apple) nicht vorbei. Stimmts?
Es gibt Alternativen. Die liste ich jetzt einfach mal etwas auf. Lass Dich davon aber nicht verwirren. Such Dir einfach einen Weg aus! Bezüglich Android App ist der Weg mit dem Android Studio und Java oder Kotlin schon mit am Besten. Alleine schon die gute Unterstützung über developer.android.com ist unbezahlbar. Es gibt kein Umdenken oder so - du kannst alles direkt nutzen, so wie es bereit gestellt wurde.


So eine native App entstehen soll, hast Du z.B. Cordova (und co). Da hast Du eine native App, die eigentlich nur sowas wie ein Webbrowser ist (mit Erweiterungen, so dass auf externe Dinge zugegriffen werden kann) und die Applikation selbst wird dann in HTML, CSS und JavaScript entwickelt.
Diesen Ansatz findet man auch im Desktop Bereich. Visual Studio Code ist z.B. auch in HTML, CSS und JavaScript entwickelt worden und der Rahmen wird durch Electron bereit gestellt.

Aber es gibt auch ganze Frameworks, die das abbilden können. Xamarin ist ein Produkt (ursprünglich von Xamarin entwickelt worden, dann von Microsoft aufgekauft), dass Cross-Plattform Entwicklung erlaubt in C#.

Google hat Flutter entwickelt, welches auf der Sprache dart aufsetzt. Dies hat den Vorteil, dass alle Plattformen unterstützt werden können, also nicht nur Android und iOS sondern auch Desktop (Windows, Mac, Linux) und Web. Hier ist auch die Frage, wie lange zum einen die Android Entwicklung so bleibt wie bisher, denn sowohl beim System mag Fuchsia den Android (Linux) Kern ersetzen und dart/flutter mag die Java oder Kotlin Entwicklung mit der Zeit ersetzen.

Und dann gibt es noch ganz viele, weitere Möglichkeiten, die weniger verbreitet sind wie z.B. Mobile Applikationen mit JavaFX entwickeln -> Gluon Mobile

Aber die ganze Entwicklung von mobilen Apps ist etwas, das ggf. mit der Zeit abnehmen wird. Statt dessen gibt es dann neue Entwicklungen, denen ich durchaus zutraue, sich mittelfristig stärker durchzusetzen:
- WebAssembly ist eine Technologie, die immer stärker im kommen ist und die von den gängigen Browsern unterstützt wird. Hier kann aus diversen Sprachen Code hin compiliert werden (TeaVM wäre da eine Java Option)
- Progressive Web Apps (PWA) - Das sind dann Applikationen, die im Browser laufen. Aber diese können sich auch "installieren" und stehen dann wie normale Applikationen zur Verfügung - auch Offline. Das ist etwas, das mir sehr gut gefällt. Wenn man aus Java Sicht damit anfangen möchte, dann wäre als Produkt z.B. Vaadin zu nennen.

Und nicht zu vergessen: No Code / Low Code Entwicklungsplattformen. Da gibt es auch mehrere und ich habe schon mitbekommen, dass Konzerne da teilweise drauf setzen wollen.

==> Es gibt Möglichkeiten wie Sand am Meer! Du musst Dich halt festlegen, was Dir wichtig ist und dann kann man sich auf Technologien festlegen.
 

Barista

Top Contributor
Es gibt noch Open Street Map.

In einem früheren Projekt hat sich jemand mit der Javascript-Lib Leaflet befasst.

Da kann man sozusagen ein eigenes Maps programmieren.

Habs aber nicht weiter verfolgt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Einfache Sprachsteuerung Allgemeine Java-Themen 3
L Übergabe an eine eher einfache Java- Applikation wegen Kündigung Allgemeine Java-Themen 1
K Einfache Verkettete Liste mit Node Allgemeine Java-Themen 3
D RMI Einfache Chat-Anwendung mit RMI Allgemeine Java-Themen 0
L einfache Verzinsung mit for-Schleife & Ausschluss von Werten beim Einlesen Allgemeine Java-Themen 5
S Einfache Methode die Groesse eines Objekts zu ermitteln? Allgemeine Java-Themen 12
D einfache Filterung optimieren Allgemeine Java-Themen 16
M Einfache Kundenverwaltung, guter Programmierstil Allgemeine Java-Themen 3
S YUV to RGB (einfache Berechnung) Allgemeine Java-Themen 5
N einfache Klassen Allgemeine Java-Themen 18
M Schnelle Scriptsprache für einfache Funktionen? Allgemeine Java-Themen 5
R Einfache Matheaufgabe - Daten auf Anzeigebereich verteilen Allgemeine Java-Themen 4
E einfache grafische Oberfläche wie in MS C#? Allgemeine Java-Themen 6
V Einfache toString() generieren? Allgemeine Java-Themen 6
E einfache Frage zu Vector Allgemeine Java-Themen 8
E Einfache Frage zu ListIterator Allgemeine Java-Themen 10
E einfache Frage zu getRealPath(.) Allgemeine Java-Themen 2
E einfache Frage zu protected Allgemeine Java-Themen 10
E einfache Frage zu verdeckten Membern Allgemeine Java-Themen 2
E Einfache Fragen zu Dateien Allgemeine Java-Themen 7
K Große JSON-Dateien schnell und effizient verarbeiten Allgemeine Java-Themen 16
T Collections Liste schnell/nebenläufig durchgehen Allgemeine Java-Themen 2
S Schnell eine fortlaufende nummer erzeugen SQL, kein Primkey Allgemeine Java-Themen 8
M Bilderstapel schnell durchschalten? Speicherprobleme. Allgemeine Java-Themen 3
A Möglichkeiten, ein Bild schnell auszuwerten Allgemeine Java-Themen 56
parite.b schnell frage ;) API CONTENTS ? Allgemeine Java-Themen 5
E brauche schnell Ausführbare Datei Allgemeine Java-Themen 4
G ganzzahlige Potenz schnell berechnen Allgemeine Java-Themen 4
T Serialisierung: Wie macht RMI das so schnell? Allgemeine Java-Themen 14
G schnell Strings vergleichen Allgemeine Java-Themen 4
G Datenbank-Anwendung schnell erstellen. Allgemeine Java-Themen 7
J Datei Inhalt vergleichen (schnell & effizient!) Allgemeine Java-Themen 10
M Schnell kleine Hilfe gesucht! Allgemeine Java-Themen 3
C Daten möglichst schnell einem Baum zuordnen Allgemeine Java-Themen 2
M 2-dimensionalen array schnell kopieren Allgemeine Java-Themen 6
G Soundsamples schnell hintereinander abspielen Allgemeine Java-Themen 4
T Bilder schnell in BufferedImage laden Allgemeine Java-Themen 4
A mein Frame wird nicht schnell genung aktualisiert Allgemeine Java-Themen 7
F Große Dateien schnell einlesen Allgemeine Java-Themen 14

Ähnliche Java Themen


Oben