... the user friendly GPS tool


Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Patch für automatische Wegpunktreduzierung
#11
mrg21 Wrote:Ich habe die neue Version 1.22.3 kurz getestet und ich finde die aktuelle Umsetzung des Douglas Peucker Algorithmus nicht gut. Das Problem dabei ist, dass der Algo aktuell nicht auf Entfernungen Rücksicht nimmt und schon geglättete Routen (z.B. gpsbabel: -x position,distance=5m,all,time=900 -x simplify,error=2m) weiter stark vereinfacht. Diese werden dann in der Karte viel zu grob dargestellt.

Das Problem hat vermutlich nichts mit dem Algorithmus zu tun. Es muss eine andere Ursache haben. Ich habe das ganze so implementiert, dass für die Anzeige abhängig vom Maßstab ein anderer threshold genommen wird. Damit soll erreicht werden, dass immer nur genau soviel Punkte zur Zeichnung genommen werden wie notwendig, z.B. braucht man bei der Deutschlandübersicht für eine Strecke von wenigen Kilometern nur den Start und Endpunkt einzeichnnen. Es wäre sinnlos einen Spaziergang mit allen Punkten zu zeichnen, wenn der Logger jede Sek. einen Trackpunkt erstellt hat. Je weiter man reinzoomt desto mehr Punkte werden gezeichnet. Ist man in sehr hohen Zoomstufen angekommen, sollten dann auch alle relevanten Punkte gezeichnet werden.

Soviel zur Erklärung. Jetzt habe ich noch zwei Fragen um das Problem für die grobe Darstellung lösen zu können:
  1. Ist die Karte direkt nach dem Laden der Punkte auch schon zu grob?
  2. Wenn Du ganz in die Karte reinzoomst, werden dann alle Punkte angezeigt?
Reply
#12
EddiVonDerAlm Wrote:Ich habe das ganze so implementiert, dass für die Anzeige abhängig vom Maßstab ein anderer threshold genommen wird. Damit soll erreicht werden, dass immer nur genau soviel Punkte zur Zeichnung genommen werden wie notwendig ... Je weiter man reinzoomt desto mehr Punkte werden gezeichnet. Ist man in sehr hohen Zoomstufen angekommen, sollten dann auch alle relevanten Punkte gezeichnet werden.
Dies kann ich leider nicht bestätigen.
EddiVonDerAlm Wrote:Jetzt habe ich noch zwei Fragen um das Problem für die grobe Darstellung lösen zu können:
  1. Ist die Karte direkt nach dem Laden der Punkte auch schon zu grob?
  2. Wenn Du ganz in die Karte reinzoomst, werden dann alle Punkte angezeigt?
zu 1.: Ja, ist aber OK.
zu 2.: Nein, ich habe mal 2 Screenshots gemacht. Einmal RouteConverter v1.22 und hier RouteConverter v1.22.3 mit dem gleichen Track und Ausschnitt, der Track befindet sich hier.

Des Weiteren habe ich noch 2 bugs gefunden:
1. Befindet sich in einem gpx-file eine Wegpunktliste und ein Track, so zoomt RC122.3 nicht auf den entsprechenden Bereich, sondern zeigt die ganze Welt an. Bei allen nachher geladenen gpx-files bleibt weiterhin die gesamte Weltkarte stehen.
2. Wird auf einen Kartenausschnitt manuell gezoomt, so läuft RC (auch bei v1.22) anschließend mit 100% CPU-Last (AMD64 3800+).
Reply
#13
mrg21 Wrote:zu 2.: Nein, ich habe mal 2 Screenshots gemacht. Einmal RouteConverter v1.22 und hier RouteConverter v1.22.3 mit dem gleichen Track und Ausschnitt, der Track befindet sich hier.

Eddi, das heißt doch, der Threshold-Parameter ist zu hoch für die Zoomstufe, oder?
--
Christian
Reply
#14
routeconverter Wrote:Eddi, das heißt doch, der Threshold-Parameter ist zu hoch für die Zoomstufe, oder?
Zumindest in meinen Tests ist mir nichts aufgefallen, dass es so grob wird. Der Threshold war von mir sehr konservativ gewählt, damit es zu keinen sichtbaren Änderungen kommt. Zumindest mit meinen Routen hatte ich keine Probleme.

Bei maximalen Zoom hätten eigentlich alle Routenpunkte gezeigt werden sollen. Daher vermute ich, dass es ein Problem mit der Kommunikation zwischen dem Kartenfenster und dem restlichen Programm gibt.
Reply
#15
Ich habe die Ursache gefunden. Meinen Code hatte Christian angepasst, dass er vom Stil mit dem restlichen Projekt besser zusammenpasst. Dabei hat er an einer Stelle vergessen umzubenennen. Damit wäre das grobe Zeichnen beseitigt.

Ein anderer Fehler war noch von mir. Ich habe nur in meiner Gegend den maximalen Zoom getestet. Im Track von mrg21 habe ich dann gesehen, dass man noch weiter reinzoomen kann. An anderen Stellen noch weiter. (Am Frankfurter Flughafen kann man die einzelnen Gepäckstücke auf dem Vorfeld erkennen).

Zumindest bei mir hat es jetzt funktioniert, dass der Track korrekt "rund" angezeigt wird.


Attached Files
.zip   MapView.zip (Size: 553 bytes / Downloads: 643)
Reply
#16
EddiVonDerAlm Wrote:Ich habe die Ursache gefunden. Meinen Code hatte Christian angepasst, dass er vom Stil mit dem restlichen Projekt besser zusammenpasst. Dabei hat er an einer Stelle vergessen umzubenennen. Damit wäre das grobe Zeichnen beseitigt.

Ein anderer Fehler war noch von mir. Ich habe nur in meiner Gegend den maximalen Zoom getestet. Im Track von mrg21 habe ich dann gesehen, dass man noch weiter reinzoomen kann. An anderen Stellen noch weiter. (Am Frankfurter Flughafen kann man die einzelnen Gepäckstücke auf dem Vorfeld erkennen).

Zumindest bei mir hat es jetzt funktioniert, dass der Track korrekt "rund" angezeigt wird.

Danke für den Hinweis, ich habe gerade eine neue Prerelease-Version hochgeladen. Allerdings zeigt die auf den 3 größten Vergrößerungsstufen immer noch Abweichungen wie im Screenshot zu sehen:

   
--
Christian
Reply
#17
Hi Christian und Eddi

ich habe gerade v1.22.4 getestet und bei mir wird der Track jetzt nur beim ersten Laden „rund“ angezeigt. Ich habe noch mal einen Screenshot gemacht, diesmal mit Tast-Manager.
Zur Erklärung:
- zu Beginn des Diagrammes RC gestartet (erster CPU-Ausschlag)
- Beispieltrack von Post12 geladen (2. Ausschlag)
- 1. mal gezoomt (3. Ausschlag), Pause 15s
- 2. mal gezoomt (4. Ausschlag), Pause 15s
- 3. mal gezoomt (5. Ausschlag), Pause 5s
- 4. mal gezoomt (CPU 100% Auslastung)
- Ausschnitt auf Bergspitze verschoben und die Strecke wird „rund“ angezeigt
- Die Strecke noch mal per Drag and Drop geladen und diese wurde jetzt zu „kantig“ angezeigt
- RC beendet (CPU Auslastung fällt wieder von 100%)

- RC gestartet (erster erneuter CPU-Ausschlag)
- Track geladen (2. Ausschlag)
- 2 mal innerhalb einer Sekunde auf zoom geklickt (CPU 100% Auslastung)
- Track betrachtet und ist OK
- Track-Laden-Button gedrückt und nach ca. 1 min. kam der Dialog
- nach dem Laden wieder den Ausschnitt auf dem Berg gewählt und den Screenshot gemacht

Was sagt ihr dazu?
Reply
#18
Ich habe heute keine Zeit mehr der Sache auf den Grund zu gehen. Ich konnte es aber nachvollziehen, dass er bei schnellen Zoomen zuverläßig die volle CPU-Leistung nimmt.

Mir ist es nur "geglückt" wenn ich das Mausrad schnell gedreht habe. Wenn ich langsam über die Buttons reingezommt habe, hat alles korrekt funktioniert.

Mal sehen ob ich morgen die Zeit finde nach dem Fehler zu suchen.
Reply
#19
Hi Eddi,
hast du einen Multicore-Prozessor?
Ich verwende noch einen einfachen AMD64 3800+ mit WinXP. Falls ich das Mausrad über mehr als eine Zoomstufe drehe, nimmt RC anschließend (bis zum beenden) immer 100% CPU-Last.
Reply
#20
mrg21 Wrote:Hi Eddi,
hast du einen Multicore-Prozessor?
Ja, bei mir nimmt er sich auch nur 50%. Dass bedeutet aber auch, dass nur ein Thread sich die volle Leistung nimmt.

Ich glaube auch schon den Fehler eingekreist zu haben. Am besten schaut Christian sich das Problem mal an, damit er es dann auch lösen kann.

@Christian
Das Problem liegt darin, dass der mapViewDragListener in dieser Schleife hängen bleibt:
Code:
while (true) {
   try {
      String line = is.readLine();
      if (Conversion.trim(line) == null)
         break;
      lines.add(line);
   } catch (IOException e) {
      synchronized (notificationMutex) {
         if (!running)
            return;
      }
      log.severe("Cannot read line from drag listener port:" + e.getMessage());
   }
}
Es kommt nach schnellem reinzoomen beim bei jedem Aufruf von readLine zu einer Exception, damit blockiert der Thread und kann keine neuen Daten mehr empfangen. Damit kommt die Information, dass jemand im Kartenfenster gezommt hat auch nicht mehr an. Daher dann die grobe Route.

Ich habe testweise in den catch Abschnitt ein break eingebaut, dass er aus der Endlosschleife aussteigt. Damit hat es bei mir jetzt funktioniert. Ich habe aber keine Ahnung ob es da nicht eine bessere Lösung gibt um die Ursache zu beheben und nicht nur das Symptom.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)