... the user friendly GPS tool


Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Anzeige-Problem (Herunterskalierung)
#21
(08.10.2012, 19:10)lundefugl Wrote: Was meinst Du mit "ProfileView" ? Ist das eine Klasse, Funktion oder Profiler ?

Das ist die Basisklasse für die Höhen/Geschwindigkeitsprofilansicht

(08.10.2012, 19:10)lundefugl Wrote: Wenn's ein Profiler ist, so hab' ich damit noch nie gearbeitet. Zu Hause hab ich bis jetzt keinen benötigt und in der Firma setzen wir YourKit ein.

YourKit benutze ich auch gerade, um Zeiten zu messen. Und da dominiert die ProfileView alle Ausführungszeiten, so daß RouteConverter mit 700000 Positionen unbenutzbar wird.

(08.10.2012, 19:10)lundefugl Wrote: Auf meiner Maschine war die Performance bis jetzt immer ausreichend, so dass ich da nie in deinem Code nach Optimierungspotential geschaut habe.

Das war meine Frage: hier braucht die Aktualisierung des Höhenprofils 5 Sekunden. Und diese 5 Sekunden fallen bei jeder Änderung an Sad

Darum kümmere ich mich erstmal darum, bevor ich das eigentliche Thema, die Anzeigegenauigkeit, angehe.
--
Christian
Reply
#22
(08.09.2012, 07:58)lundefugl Wrote: das Ganze hat mir nun doch keine richtige Ruhe gelassen, so dass ich jetzt noch etwass experimentiert habe.

So ging es mir auch. Herausgekommen ist ein Schrauben an den Threshold-Werten für den Douglas-Peucker-Algorithmus, ein neuer Cache für die reduzierten Positionen, das Filtern nach Sichtbarkeit sowie viele Optimierungen, damit RouteConverter auf meinem Rechner auch mit 700000 Positionen annehmbar fix arbeitet. Details in der Commit-Historie ;-)

Ich habe gerade eine Vorabversion hochgeladen, die zumindest Deine beiden kritischen Stellen gut abbildet. Wie immer: bitte testet und berichtet.
--
Christian
Reply
#23
Hallo Christian,

(15.10.2012, 09:35)routeconverter Wrote: Ich habe gerade eine Vorabversion hochgeladen, die zumindest Deine beiden kritischen Stellen gut abbildet. Wie immer: bitte testet und berichtet.

leider bin ich erst jetzt zum testen gekommen bzw. hab erst jetzt meine 64bit Maschine wieder im Zugriff. Das optimierte Ergebnis sieht vom Prinzip super aus - da gibts nichts mehr zu meckern.

An der Formulierung merkst du aber bestimmt schon, dass irgendwas noch nicht so funktioniert. Nach einigen malen herumzoomen und Anzeige verschieben wird plötzlich die angezeigte Linie nicht mehr aktualisiert.
Selektionen in der Liste produzieren jedoch weiter sichtbare Marker und auch die Menüs funktionieren in der Karte.

Ohne in den Code geschaut zu haben, würde ich auf eine konkurierende Änderung oder Deadlock tippen. Im Log ist allerdings nichts zu sehen (keine Exception oder so).
Wenn du keine Idee hast bzw. das nicht reproduzieren kannst, so kann ich irgendwann mal auch den Debugger bei mir anwerfen. Im Moment hab ich aber dafür wenig Zeit. Im Urlaub sind doch recht viele Dinge liegen geblieben ...


Und noch eine OT-Frage:
Man kann ja in der Positionsliste per "aus Datei importieren" neue Positionen anhängen.

Was ich allerdings bisher immer über GpsBabel gemacht habe, ist das kombinieren mehrerer Positionslisten. Wie wir letztes Jahr ja festgestellt haben, schreibt GpsBabel manchmal jedoch illegale Gpx-Files, so dass ich das gern gleich über den RC machen würde.
Gibts irgendwo die Funktion "aus Datei importieren", bei der alle Tracks aus der ausgewählten Datei als komplette Tracks hinzugefügt werden ?


Gruß
Thomas
Reply
#24
(20.10.2012, 10:41)lundefugl Wrote: An der Formulierung merkst du aber bestimmt schon, dass irgendwas noch nicht so funktioniert. Nach einigen malen herumzoomen und Anzeige verschieben wird plötzlich die angezeigte Linie nicht mehr aktualisiert.

Könntest Du das präzisieren? Passiert das bei großen Zoomzahlen? Was machst Du, um den Effekt zu sehen?

(20.10.2012, 10:41)lundefugl Wrote: Wenn du keine Idee hast bzw. das nicht reproduzieren kannst, so kann ich irgendwann mal auch den Debugger bei mir anwerfen.

Nebenläufig ist da nix. Ich glaube, das liegt am Abschneiden von Positionen, die deutlich außerhalb des sichtbaren Kartenbereichs liegen.

(20.10.2012, 10:41)lundefugl Wrote: Gibts irgendwo die Funktion "aus Datei importieren", bei der alle Tracks aus der ausgewählten Datei als komplette Tracks hinzugefügt werden ?

Nein, wenn man eine Menge von Dateien auswählt, werden alle darin enthaltenen Positionslisten geöffnet. Mit "Aus Datei importieren..." wird an die aktuelle Markierung die erste Positionsliste der Datei eingefügt.
--
Christian
Reply
#25
Hallo Christian,

(20.10.2012, 16:18)routeconverter Wrote: Könntest Du das präzisieren? Passiert das bei großen Zoomzahlen? Was machst Du, um den Effekt zu sehen?

ich hab noch mal bewuust herunexperimentiert und du hast recht, es hat was mit den Zoomstufen zu tun. Bei mir tritt der Effekt eigentlich reproduzierbar ab ca. der 5-letzten Zoomstufe von GoogleMaps auf (Anzeige ist im Google-Kartenmodus).

Dabei gibts sogar 2 Fehlerbilder:
1. es verändert sich nichts mehr beim hineinzoomen und erst beim herauszoomen merkt man, dass nichts mehr refresht wird

2. beim hineinzoomen um einen Schritt verschwindet plötzlich die gesamte Linie. Wenn man nun einen Schritt herauszoomt, so kommt die Linie wieder. Das Ganze kann man scheinbar beliebig wiederholen.
Zommt man allerdings weiter hinein, so kommt anschliessend die Linie nicht wieder. Erst wenn man ganz weit herauszoomt, so sieht man einen Linienteil an einer ganz anderen Stelle der Route, den man irgendwann zuvor mal angezeigt hatte.

Ich hoffe mal, dass du meine Erklärung halbwegs nachvollziehen kannst. Ich hatte mal versucht ein Bildschirmvideo zu machen, aus dem das klarer hervorgeht, aber auch das gezipte AVI ist noch viel zu groß.

Gruß
Thomas
Reply
#26
(21.10.2012, 09:04)lundefugl Wrote: Ich hoffe mal, dass du meine Erklärung halbwegs nachvollziehen kannst.

Danke fürs Testen, ich konnte das nach einer Weile reproduzieren und habe einen doofen Bug gefunden - und hoffentlich mit der neuesten Vorabversion entfernt: bei der Google Maps 'Karte' gibt es 21 Zoomstufen. Für jede Zoomstufe ist in der Tabelle THRESHOLD_PER_ZOOM hinterlegt, wie aggressiv der Douglas Peucker-Algorithmus versuchen soll, die Anzahl der Positionen zu reduzieren. Bei Level MAXIMUM_ZOOM_FOR_SIGNIFICANCE_CALCULATION lohnt sich der Einsatz des Douglas Peucker-Algorithmus nicht mehr und es wird nur noch außerhalb (VISIBLE_POSITION_AREA_FACTOR) des sichtbaren Bereichs der Karte abgeschnitten. Dummerweise führte das durch einen (für mich typischen) <=/< Fehler zu einer ArrayIndexOutOfBoundsException und der Thread für die Kartenaktualisierung verstarb. Also einmal größer als Level 17 hineinzoomen und das wars mit der Aktualisierung der Karte...
--
Christian
Reply
#27
Hallo Christian,

(21.10.2012, 13:08)routeconverter Wrote: Danke fürs Testen, ich konnte das nach einer Weile reproduzieren und habe einen doofen Bug gefunden - und hoffentlich mit der neuesten Vorabversion entfernt: bei der Google Maps 'Karte' gibt es 21 Zoomstufen.

das Verhalten hat sich verbessert. D.h. nach einem herauszoomen wird die Anzeige weiter aktualisiert.
Ich hab allerdings immer noch den Effekt, dass die Anzeige ab Zoom-Level 17 (oder 18 ?) plötzlich verschwindet. In einigen Fällen kommt sie dann bei Level 19 (20) wieder und in anderen Fällen nicht.

Die Klammer-Werte resultieren aus der Tatsache, dass ich deine 21 Zoomstufen nicht ganz nachvollziehen kann. Ich hab 22. Ich vermute mal, dass der höchste 0-basierende Index 21 ist.

Gruß
Thomas
Reply
#28
(21.10.2012, 18:34)lundefugl Wrote: Ich hab allerdings immer noch den Effekt, dass die Anzeige ab Zoom-Level 17 (oder 18 ?) plötzlich verschwindet. In einigen Fällen kommt sie dann bei Level 19 (20) wieder und in anderen Fällen nicht.

MAXIMUM_ZOOM_FOR_SIGNIFICANCE_CALCULATION ist genau 17 und in BaseMapView#filterSignificantPositions() gibt es eine Fallunterscheidung dazu.

(21.10.2012, 18:34)lundefugl Wrote: Die Klammer-Werte resultieren aus der Tatsache, dass ich deine 21 Zoomstufen nicht ganz nachvollziehen kann. Ich hab 22. Ich vermute mal, dass der höchste 0-basierende Index 21 ist.

Du hast recht: Es sind 22 Zoomstufen mit Index 0 bis 21.
--
Christian
Reply
#29
(21.10.2012, 18:34)lundefugl Wrote: Ich hab allerdings immer noch den Effekt, dass die Anzeige ab Zoom-Level 17 (oder 18 ?) plötzlich verschwindet. In einigen Fällen kommt sie dann bei Level 19 (20) wieder und in anderen Fällen nicht.

Ich hab's: nach den letzten Änderungen wird nicht mehr das Ergebnis der Douglas-Peucker-Optimierung gecacht, sondern das Ergebnis aller Reduktionsschritte. Dumm nur, wenn einer der Schritte die sichtbaren Wegpunkte ermittelt und alle andere verwirft und man dann den Kartenausschnitt verschiebt: keine Wegpunkte mehr da, da keine im Cache. Nun versuche ich den Cache zu verwerfen, wenn die Karte verschoben wird und potentiell andere Wegpunkte sichtbar werden. Eine Heuristik, die meistens ganz gut funktioniert (BaseMapView#centerChanged). Bitte probier mal die neueste Vorabversion aus.
--
Christian
Reply
#30
Hallo Christian,

(23.10.2012, 10:46)routeconverter Wrote: Ich hab's: nach den letzten Änderungen wird nicht mehr das Ergebnis der Douglas-Peucker-Optimierung gecacht, sondern das Ergebnis aller Reduktionsschritte. Dumm nur, wenn einer der Schritte die sichtbaren Wegpunkte ermittelt und alle andere verwirft und man dann den Kartenausschnitt verschiebt: keine Wegpunkte mehr da, da keine im Cache. Nun versuche ich den Cache zu verwerfen, wenn die Karte verschoben wird und potentiell andere Wegpunkte sichtbar werden. Eine Heuristik, die meistens ganz gut funktioniert (BaseMapView#centerChanged). Bitte probier mal die neueste Vorabversion aus.

ich hab mit der neusten Version mal etwas herumgespielt.
Ganz so einfach bekomme ich den Effekt nicht mehr hin. Trotzdem ist er leider noch da. Welche Umstände dazu führen, kann ich aber nicht genau sagen. Wenn man etliche Verschiebe- und Zoomändervorgänge gemacht hat zeigt er plötzlich die Linie nicht an.

Wenn ich dann die Karte verschiebe oder hin- und herzoome bewirkt das keine Änderung.

Ich hatte den Effekt sogar ab Zoomstufe 16 (nicht 17) und einer deutlich kleineren Datei hinbekommen. Wie man das schnell und nachvollziehbar reproduzieren kann, kann ich nicht sagen.

Im Log sieht man, dass das Script die Verschiebung/Zoomänderung erkannt hat.
Evtl. könntest Du eine (temporäre) Logausgabe im Prerelease einbauen:
- wenn du die Notifikation der Verschiebung oder Zoomänderung im Java-Code erkannt hast
- wenn der Cache gelöscht wurde (oder eben nicht - ggf. mit Grund warum nicht)
- wenn eine Neuberechnung der Anzeigepunkte erfolgt

Da der Downscale selbst sehr gut funktioniert, kann es in meinen Augen eigentlich nur noch am Cache oder dem Trigger liegen. Evtl. kann man mit den Logausgaben ein System erkennen, warum es manchmal funktioniert und manchmal nicht. Ansonsten kann ich auch am Wochenende debuggen.

Und noch eine andere Info. Auch wenn ich gesagt habe, dass der Downscale sehr gut funktioniert (was auch absolut richtig ist), so habe ich in meinen Daten eine Stelle gefunden, bei der der letzte Punkt fehlt (der dann die Linie ausserhalb des Sichtbereiches zieht). Die Stelle kann ich nicht genau erklären, da sie in einem sehr tiefen Zoom erst sichtbar wird. Hier werde ich am Wochenende mal selbst debuggen. Das ist sicher nur irgendein kleiner Index-Fehler oder kleiner/kleiner gleich Fehler.

Gruß
Thomas
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)