[Talk-de] JOSM - langsam bei ausgefüllten Polygonen?
Thomas Hieber
thieber at gmx.net
Mo Apr 28 16:51:57 UTC 2008
Wolfgang Silbermayr schrieb:
> Frederik Ramm schrieb:
>
>> Hallo,
>>
>>
>>> Ich habe mich (obwohl ich schon einige Zeit mappe) vor Kurzem erst
>>> intensiver mit ausgefüllten Polygonen beschäftigt, insbesondere um
>>> Wälder zu mappen. Die aktuelle Version von JOSM wird jedoch immer dann
>>> extrem langsam wenn eine große Fläche eines halbtransparent ausgefüllten
>>> Polygons sichtbar ist
>>>
>> JOSM mit "Wireframe"-Anzeige ist langsam, JOSM mit "mappaint" ist
>> langsamer und JOSM mit "mappaint" mit ausgefuellten Polygonen ist
>> extremst langsam. Dieser ganze Zeichencode ist ueberhaupt nicht
>> optimiert, da ist viel Spielraum fuer Verbesserungen (wie JOSM-NG
>> schon bewiesen hat). Wenn sich jemand mal gruendlich der Sache
>> annehmen will, das waere allen eine grosse Hilfe.
>>
>
> Habe da mal reingesehn, und bei dem Code, der das Zeichnen der Polygone
> betrifft, scheint nicht sehr viel Raum für Verbesserungen zu sein.
> Die Funktion g.fillPolygon(polygon); in
> org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java Zeile 228
> im aktuellen SVN benötigt nach meinen Messungen über 1 Sekunde, wenn ich
> ein Polygon so anzeigen lasse, dass es die gesamte Zeichenfläche
> ausfüllt. Sind mehrere übereinander liegende Polygone im Bild, so kann
> es durchaus mal bis zu 5 Sekunden dauern, bis ein Zoomschritt
> durchgeführt wurde.
>
> fillPolygon() ist eine Java-eigene Funktion:
> http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Graphics.html
>
> Wenn da jemand andere Verbesserungsvorschläge hätte als Java abzuändern
> oder eine eigene Alternative zu schreiben (die natürlich auch erstmal
> effizienter werden müsste) würde mich das sehr freuen. Ein Workaround,
> der mir so auf die Schnelle einfällt (aber sicher nicht das Gelbe vom Ei
> ist), wäre zuerst mit Wireframe zu zeichnen, und dann das Befüllen der
> Polygone einem Workerthread zu überlassen.
>
> Lg, Wolfgang.
>
Ich bin ja bestimmt kein JAVA Spezialist - daher kann das natürlich auch
Blödsinn sein, den ich schreibe, aber ich meine mich zu erinnern, das
Eclipse ein eigenes Grafikframework für die GUI geschrieben hat, da die
normalen JAVA Klassen zu langsam waren. Dieses Eclipse GUI Framework ist
meines Wissens auf den wichtigsten Plattformen als native Implementation
verfügbar. Evtl. wäre das ja einen Blick wert.
Eine andere Alternative wäre OpenGL für die Darstellung zu nutzen (Falls
unter JAVA verfügbar). Das ist auch Plattfromunabhängig, und das
Zeichnen eines ausgefüllten Polygons mit teilweiser Transparenz ist für
OpenGL eher eine Sache von Millisekunden als von Sekunden.
Und so als Nebeneffekt wäre es auch möglich eine deutlich ansprechendere
Darstellung der Karte erreichen, indem auch Linien als texturierte
Polygone dargestellt würden. (Um z.B. eine Linie noch eine dunkle
Umrandung zu geben.)
Gruß,
Thomas
Mehr Informationen über die Mailingliste Talk-de