... the user friendly GPS tool


Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Multi-Track Anzeige
#1
Hallo Christian,
folgend meiner E-Mail von vor ein paar Tagen bzgl. der Darstellung von mehreren Tracks gleichzeitig ...

Ich habe bereits einen funktionierenden Prototyp erstellt. Als Illustration wie das am lebenden Objekt aussieht habe ich einen Screenshot angehängt. Es werden alle vorhandenen Tracks blau dargestellt, die selektierte Positionsliste rot. Das funktioniert prinzipiell, allerdings nicht zuverlässig. Die Implementierung funktioniert folgendermaßen:
  • Ich habe mir zunächst mit einem statischen Objekt ('RouteSelectionModel') beholfen, in dem die aktuell selektierte BaseRoute sowie alle existierenden gespeichert sind (nicht schön, aber erstmal egal!)
  • Wenn die comboBoxChoosePositionList in ConverPanel einen stateChange bekommt, das wird dieses RouteSelectionModel aktualisiert. Alle Routen sowie die selektierte Route kommen aus dem formatAndRoutesModel - soweit so gut.
  • Zum eigentlichen Zeichen der Tracks habe ich MapsforgeMapView erweitert.
  • In TrackUpdater.internalAdd() werden alle existierenden Routen gezeichnet - außer der selektierten (das ist ja auch nicht nötig). Das passiert, BEVOR die Positionsliste gezeichnet wird, damit selbige die 'inaktiven' Tracks überlagert. Dazu wird ein neuer GroupLayer eingefügt und je eine Polyline gezeichnet. in internalRemove() werden diese gelöscht, wenn sich die Selektion ändert.
Prinzipiell funktioniert das Ganze, aber nur in 90% aller Fälle. Manchmal kommt diese Logik durcheinander. Das liegt daran, daß der Event zum Neuzeichnen des MapViews manchmal vor der Aktualisierung meines eingefügten RouteSelectionModels passiert - eine klassische Race Condition. Meine Frage Frage wäre nun: wie bekomme ich auf 'richtigem' Wege Änderungen an der Selektion und den vorhandenen Tracks mit?

P.S. eine Alternative zu dem beschriebenen Vorgehen wäre vielleicht die Nutzung eines Overlays, das habe ich aber nicht probiert ...

Grüße, Andreas

   
Reply
#2
(27.09.2018, 10:17)fortysixandtwo Wrote: Ich habe bereits einen funktionierenden Prototyp erstellt. Als Illustration wie das am lebenden Objekt aussieht habe ich einen Screenshot angehängt. Es werden alle vorhandenen Tracks blau dargestellt, die selektierte Positionsliste rot. Das funktioniert prinzipiell, allerdings nicht zuverlässig.

Hallo Andreas,

cool! Du bist ja schon ein ganzes Stück weit gekommen Cool

Ich würde mich sehr über Unterstützung von Dir freuen.

Die naheliegende Baustelle zuerst: das MapsforgeMapView hat ein Threading-Problem und funktioniert schon mit einer Positionsliste nicht zuverlässig oder nicht performant, das ist mein Top-Prio-Thema. Ich glaube, ich habe das Problem jetzt verstanden und denke über eine Lösung nach. Angehängt findest Du den Ablauf, der zum Zeichnen führt ;-)
Solange das nicht zuverlässig funktioniert wirst Du ein Problem haben, die Fehler in Deiner Erweiterung zu identifizieren.

Das größere Baustelle ist m.E. das UI. Hier hat Du einen Weg beschritten, der in den bisherigen Diskussionen hier im Forum nicht vorkam: Man sieht alle Positionslisten, die aktuelle wird farblich hervorgehoben. Finde ich pfiffig, denn bislang scheiterten alle Idee daran, dass RouteConverter eine Positionsliste für die Karte links, das Höhenprofil unten und die Positionsliste rechts als Basis hatte und sich dieses nicht einfach so auf N Positionslisten erweitern läßt.

Derzeit zeigst Du alle Positionslisten an. Wenn der Benutzer auswählen möchte, welche Positionslisten er anzeigen möchte, entsteht das Problem, dass es kein platzsparendes UI gibt für eine N aus M Auswahl. Die JCombobox ist gut für 1 aus N - etliche Benutzer verstehen ihre Funktion nicht, aber die meisten schon. Eine JList könnte N auf M bieten, nimmt aber zu viel Platz weg, um sie dauerhaft anzuzeigen. Wie realisiert man also die N auf M Auswahl?

Beziehen sich die Daten oberhalb der Positionsliste auf die aktuell angezeigte, auf die ausgewählten oder auf alle Positionslisten?

Kann man Positionen in derzeit nicht aktueller Positionslisten auf der Karte oder im Profil markieren? 
  • Falls ja, was zeigt man in der Tabellen mit den Positionen an? Wechselt man einfach die Positionsliste? Was passiert mit bereit markierten Positionen in anderen Positionslisten? 
  • Falls nein, wie erklärt man dem Benutzer, dass er die aktuelle Positionsliste wechseln muß? Und welche die richtige wäre? 

Die Farben von Routen und Tracks lassen sich anpassen. Konfiguriert der Benutzer dann jeweils 2 Farben? Was ist mit Wegpunktlisten, gibt es dann 2 vordefinierte Wegpunkttypen? 

Ich würde mich freuen, wenn sich diese Fragen pragmatisch und für die Benutzer verständlich (sonst erkläre ich mehr als ich programmiere wie bei dem Google API Key-Desaster) lösen ließen.

Was meinst Du?


Attached Files Thumbnail(s)
   
--
Christian
Reply
#3
Hallo,

sorry, wenn ich hier auch meinen Senf dazu gebe.

(27.09.2018, 15:01)routeconverter Wrote: Das größere Baustelle ist m.E. das UI. Hier hat Du einen Weg beschritten, der in den bisherigen Diskussionen hier im Forum nicht vorkam: Man sieht alle Positionslisten, die aktuelle wird farblich hervorgehoben. Finde ich pfiffig, denn bislang scheiterten alle Idee daran, dass RouteConverter eine Positionsliste für die Karte links, das Höhenprofil unten und die Positionsliste rechts als Basis hatte und sich dieses nicht einfach so auf N Positionslisten erweitern läßt.

Die Idee finde ich auch cool. Das spart außerdem die ganze Konfigurierbarkeit der Farben/Linien. Es gibt ja nur 2 - aktive und nicht aktive.

(27.09.2018, 15:01)routeconverter Wrote: Derzeit zeigst Du alle Positionslisten an. Wenn der Benutzer auswählen möchte, welche Positionslisten er anzeigen möchte, entsteht das Problem, dass es kein platzsparendes UI gibt für eine N aus M Auswahl. Die JCombobox ist gut für 1 aus N - etliche Benutzer verstehen ihre Funktion nicht, aber die meisten schon. Eine JList könnte N auf M bieten, nimmt aber zu viel Platz weg, um sie dauerhaft anzuzeigen. Wie realisiert man also die N auf M Auswahl?

Da wären aus meiner Sicht auch folgende Varianten denkbar.
- Man vergewaltigt komplett die JCombobox. Mit einem eigenen Renderer (der DefaultRenderer ist im Moment ja nur ein JLabel) könnte man eine Checkbox ganz vorne anzeigen. Darüber könnte man anwählen, ob die Positionsliste immer sichtbar sein soll oder nicht. Man müsste bei Klicks eigentlich auch einfach verhindern können, dass die Liste wieder zusammenfällt, wenn man den Event konsumiert. Knifflig dürfte nur werden, wie man die Klick-Info dann aus dem Renderer heraus bekommt.
- man könnte hinter die Combobox einen Button setzen (z.B. mit drei Punkten), wie man es oft bei Datumseingaben hat. Klickt man darauf, dann erscheint ein Dialog - z.B. mit einer JTable, in der man die Auswahl treffen kann. Hier gäbe es den Vorteil, dass ggf. weitere Optionen langfristig hier denkbar wären, die man vorgibt.  


Bei allen Varianten sollte es in den Settings eine Auswahl geben, ob man die Multi-Anzeige überhaupt will (wenn nicht, dann werden die Steuer-Controls ausgeblendet) und wenn ja, was nach dem Laden einer Datei aktiv sein soll - alles oder immer nur die aktuelle Selektion.


Gruß
Thomas
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)