Wie kann ich dafür sorgen, dass QGIS bei jedem Schwenken nicht mehr blinkt?

8

Die Art und Weise, wie QGIS die Leinwand beim Schwenken zeichnet, ist ziemlich ärgerlich. Wenn ich die Karte auch nur ein wenig schwenke, bleibt für ein oder zwei Sekunden alles leer, bevor die Ebenen gezeichnet werden. Es sieht so aus, als ob dies nur passiert, wenn der Ebeneninhalt heruntergeladen werden soll (meine PostGIS-Ebenen werden gezeichnet, ohne meine Augen zu verletzen), sodass dies möglicherweise nur ein Problem mit der Konfiguration und nicht mit dem Code ist. Hat jemand eine Lösung?

Oh, und die Frage sollte lauten: "Wie kann ich QGIS für Epileptiker geeignet machen?". Es ist so nervig.

BEARBEITEN, um Fragen ab QGIS 2.4 zu stellen:

Dies scheint in 2.4 immer noch ein Problem zu sein. Es scheint einige hilfreiche Einstellungen unter Einstellungen> Rendern zu geben, aber diese helfen dem Problem nicht. QGIS fehlt einfach das schöne, rutschige und flüssige Gefühl anderer Kartenbetrachter. Ist Caching noch geplant?

orieeel
quelle
Dies ist einer der größten Haustier-Ärmel mit Qgis. Das Problem ist wirklich schrecklich, wenn Sie eine Ebene aus dem OpenLayers-Plugin in Ihrer Karte haben.
Devdatta Tengshe
Es ist nicht ideal, aber Sie können das Rendern deaktivieren, indem Sie das renderKontrollkästchen in der unteren Symbolleiste aktivieren. Dies bedeutet jedoch, dass Daten außerhalb des aktuellen Ansichtsfensters nicht mehr angezeigt / aktualisiert werden.
DJQ
Es ist noch ärgerlicher, wenn Sie denken, dass die gleichen Ebenen von Geoserver und sogar udig "korrekt" gerendert werden. Leider kann ich mich nicht an sie wenden, ich brauche die erweiterten SQL-Funktionen von qgis, um einige Geo-Abfragen zu testen
orieeel
1
@orieeel Geoserver und udig werden in Java erstellt und verwenden eine andere Rendering-Technik
Nathan W
Im Master können Sie Einstellungen -> Optionen ... -> Rendern ausprobieren und "Rückpuffer aktivieren" aktivieren. Ich bin mir nicht sicher, ob dies in 1.8 möglich ist. N.
nhopton

Antworten:

6

Für alle , die noch dieses Problem hat, in QGIS 2.10 können Sie auf Einstellungen> Optionen> Rendering und die Änderung Intervall Map Update größer. Wenn QGIS alle Ebenen in weniger als dieser Zeit rendern kann, wird die gesamte Zeichenfläche auf einmal aktualisiert, wodurch das Blinken beseitigt wird. Wenn nicht alle Ebenen vor Ablauf dieses Intervalls aktualisiert werden können, wird eine teilweise Aktualisierung angezeigt, die das Blinken verursacht. Sie können anzeigen, wie lange ein Canvas-Update dauert, indem Sie das Debugging-Flag in den Rendereinstellungen aktivieren.

Matt
quelle
Ich digitalisiere Polygone basierend auf UAV-Bildern (1 GB Raster-RGB-Bild) und nach dem Aktualisieren des Polygons wird das Bild jedes Mal neu geladen. das dauerte ungefähr 5 Sekunden für jedes Polygon! In meinem Fall löste "Render-Caching verwenden" in den gleichen Optionen mein Problem! QGIS 2.10.
Jens
5

Ich fürchte, die Antwort lautet: Sie können verhindern, dass QGIS blinkt, indem Sie einen Entwickler für die Implementierung einer nicht blinkenden Version finanzieren.

Unterdunkel
quelle
1
Um zu erklären, warum: Derzeit kommt es darauf an, wie die Ebenen und Features in der Rendering-Engine gerendert werden. Es gibt einige zukünftige Entwicklungen, hauptsächlich Multithreading und Caching, die dazu beitragen sollten, dies zu reduzieren, jedoch nicht vollständig.
Nathan W
1
Underdark: LOL
QgisTn
@underdark wünschte, ich könnte, aber es wird nicht aus meinem Studentenbudget passieren.
Orieeel
@ Nathan-W hat gerade das Landcover-Raster aus dem QGIS-Demo-Dataset getestet und es gibt keine Schwenkprobleme. Ich bin mir ziemlich sicher, dass das Problem hauptsächlich auftritt, wenn sich die Ebenen nicht auf localhost befinden
orieeel
Vielleicht kann dieses Problem durch die Verwendung eines Servers auf localhost zum Zwischenspeichern gelöst werden? ... es ist einfach unglaublich, dass die bereits heruntergeladenen wms / wfs-Daten nicht wiederverwendet werden.
orieeel
3

Es gibt eine einfache "Lösung", wenn Sie mutig genug sind, die Codequelle von QGIS zu ändern:

Öffnen Sie 'qgsmaptoolpan.cpp' und fügen Sie in das entsprechende 'canvasMoveEvent'-Mitglied den Satz "mCanvas-> refresh ();" wie folgt:

void QgsMapToolPan::canvasMoveEvent( QMouseEvent * e )
{
  if (( e->buttons() & Qt::LeftButton ) )
  {
    mDragging = true;
    // move map and other canvas items
    mCanvas->panAction( e );
    mCanvas->refresh();
  }
}

(QGIS Version 1.8 Lisboa)

Dadurch wird eine kontinuierliche Aktualisierung der Karte erzwungen, während Sie mit der Maus schwenken. Es könnte etwas langsamer gehen, aber es funktioniert gut, ja, eine Entspannung für meine Augen.

user15765
quelle
Wo ist diese Datei ..? Ich kann es nicht in meiner OpenSuse 12.x finden. Danke
tomsik
Warum muss der Quellcode geändert werden, wenn die Methode nur überschrieben werden kann?
Sean