Mehr

QGIS 2.4 stürzt ab, wenn QgsComposerShape in Python mit ScriptRunner symbolisiert wird


Ich versuche, ScriptRunner zu verwenden, um ein JPEG eines roten Rechtecks ​​mit QGIS Composer auszugeben, um die QgsComposerShape zu verstehen. Alles funktioniert außer QGIS stürzt ab, wenn das Symbol angewendet wird. Das Ausgabebild wird korrekt erzeugt, aber QGIS stürzt ab. Wenn ich den Symbolteil des Codes entferne, wird der Umriss des Rechtecks ​​gezeichnet und stürzt nicht ab. Wenn ich den gleichen Code Zeile für Zeile in der QGIS Python-Konsole ausführe, funktioniert alles ohne Absturz.

Ich verstehe einfach nicht, warum die Verwendung des ScriptRunner-Plug-Ins zu einem Absturz führt. Wenn ich mich in GIS-SE umschaue, kann ich dieses genaue Problem nicht finden, aber es scheint andere Probleme mit Plug-Ins und Symbolen zu geben. Gibt es eine Problemumgehung für dieses Problem?

Hier ist das ScriptRunner-Skript. Der Layer wird nicht gerendert, aber Sie benötigen einen Map-Renderer, um das Shape-Objekt zu verwenden:

aus PyQt4.QtCore importieren * aus PyQt4.QtGui importieren * aus qgis.core importieren * aus qgis.gui importieren * def run_script(iface): """Eine einfache Karte mit einem Rechteck drucken""" lyr = QgsVectorLayer("/Users /joellawhead/qgis_data/ms/Mississippi.shp", "Mississippi", "ogr") reg = QgsMapLayerRegistry.instance() reg.addMapLayer(lyr) c = QgsComposition(iface.mapCanvas().mapRenderer()) c.setPlotStyle (QgsComposition.Print) c.setPaperSize(215.9, 279.4) w, h = c.paperWidth(), c.paperHeight() x = 0 y = ((h * .2) * -1) / 2 ComposerMap = QgsComposerMap( c,x,y,w,h) c.addItem(composerMap) dpi = c.printResolution() c.setPrintResolution(dpi) dpmm = dpi / 25,4 width = int(dpmm * c.paperWidth()) height = int( dpmm * c.paperHeight()) red = {'color':'255,0,0,255','color_border':'0,0,255,255'} redsym = QgsFillSymbolV2.createSimple(red) shape1 = QgsComposerShape(10,50,10 ,25,c) shape1.setShapeType(1) shape1.setUseSymbolV2(True) shape1.setShapeStyleSymbol(redsym) c.addItem(shape1) # Ausgabebild erstellen und initialisieren imag e = QImage(QSize(Breite, Höhe), QImage.Format_ARGB32) image.setDotsPerMeterX(dpmm * 1000) image.setDotsPerMeterY(dpmm * 1000) image.fill(0) # rendere die Komposition imagePainter = QPainter(image) sourceArea = QRectF (0, 0, c.paperWidth(), c.paperHeight()) targetArea = QRectF(0, 0, width, height) c.render(imagePainter, targetArea, sourceArea) imagePainter.end() image.save("/ Users/joellawhead/qgis_data/map.jpg">

Es wird durch einen Fehler in QGIS 2.4 (behoben für 2.6) verursacht. Der Absturz wird verursacht, wenn Python das Redsym-Symbol bereinigt. Um dies zu umgehen, stellen Sie sicher, dass Redsym an einem Ort gespeichert ist, an dem Python es nicht automatisch bereinigt (zB in einer globalen Variablen).


Ich habe das Skript gerade getestet und funktioniert auch mit ScriptRunner einwandfrei. Das einzige, was ich an dem obigen Code ändern musste, war die Initialisierung der QgsFillSymbolV2-Klasse ;-):

redsym = QgsFillSymbolV2() redsym.createSimple(rot)

Wie auch immer, wir werden am 31. eine weitere großartige Veröffentlichung bekommen :)


Сновные инструменты¶

QGIS bietet Standard-Tastaturkürzel für viele Funktionen. Sie finden sie im Abschnitt лавное меню. Zusätzlich ist die Menüoption Einstellungen ‣ Verknüpfungen konfigurieren.. erlaubt Ihnen, die Standard-Tastaturkürzel zu ändern und neue Tastaturkürzel zu QGIS-Features hinzuzufügen.

Abbildungsverknüpfungen 1:

Verknüpfungsoptionen definieren (Gnome)

Die Konfiguration ist sehr einfach. Wählen Sie einfach eine Funktion aus der Liste aus und klicken Sie auf [Veränderung], [Keine festlegen] oder [Standard festlegen]. Sobald Sie Ihre Konfiguration abgeschlossen haben, können Sie sie als XML-Datei speichern und in eine andere QGIS-Installation laden.


1 Antwort 1

Ältere Versionen von QGIS können Sie hier herunterladen:

2.18 wird jedoch nicht mehr unterstützt. Es wird also keine Fehlerbehebungen mehr geben. 3.4 ist jetzt die ltr-Version.

Also war mein Kommentar nicht ganz richtig. Sie können QGIS 2.18 weiterhin über das OSGeo4W-Installationsprogramm installieren, es wird nicht das LTR sein, da es nicht das LTR ist. Aber es kann installiert werden. Sie müssen nur das Häkchen bei "Veraltete Pakete ausblenden" entfernen:

Tut mir leid, aber das funktioniert bei mir nicht. Ich brauche eine vollständige Osgeo4W64-Installation mit 2.18 als ltr.


C++-Modul stürzt in Blender ab, aber nicht in der Python-Konsole [geschlossen]

Möchten Sie diese Frage verbessern? Aktualisieren Sie die Frage, damit sie zum Thema für Blender Stack Exchange passt.

Ich habe ein Python C++-Modul zum Optimieren eines Kamerapfads erstellt. Die lineare Algebra erfolgt mit der Eigen-Bibliothek und das Kompilieren für Python mit pybind11.

Ich verwende mein eigenes Kameramodell für Berechnungen.

Es hat gut funktioniert, bis ich zu dem Punkt kam, an dem ich tatsächlich versucht habe, die Optimierung durchzuführen. Das Modul ist nicht auf Aufrufe der Blender-API angewiesen, sodass es auch mit reinem Python verwendet werden kann. Ich verwende Blender nur, um den Kamerapfad einzurichten und so weiter. In der Anaconda Python-Konsole läuft es ohne Probleme, aber wenn ich es in Blender aufrufe, stürzt Blender immer komplett ab.

Ich habe mir das Crashlog angeschaut, kann es aber nicht wirklich nachvollziehen. Ich vermute, dass diese Zeile ./blender(_ZN5Eigen8IOFormatD1Ev+0xd3) [0x2041673] der Schuldige ist, da sie möglicherweise etwas mit der Eigen-Bibliothek und der Speicherausrichtung zu tun hat, aber ich bin mir nicht sicher, da sie im Allgemeinen in Python funktioniert.

Hat jemand eine Ahnung warum das passiert? Kann mir jemand helfen, das Protokoll zu verstehen?

Skript (optFlowCam ist mein Modul)

Mit faulthandler.enable() erhalte ich

Es ist also definitiv ein Speicherproblem.

Das Modul ist für Python 3.7 kompiliert. Die Anaconda-Konsole verwendet Python 3.7.5 und Blender verwendet 3.7.4. Der Modulcode ist lang (mehrere Dateien) und nicht öffentlich verfügbar. Ich kopiere das kompilierte Modul in den Ordner <blender Version>/python/lib/python3.7, um es zu laden.


QGIS für Geschichte und Archäologie

Ich verwende QGIS schon seit einiger Zeit, um im Auftrag meines Heimatvereins meine Umgebung auf historische und archäologische Merkmale zu analysieren. Ich bin mir jedoch bewusst, dass ich nur an der Oberfläche der Funktionen kratze, die QGIS bietet. Hat jemand einen neuen Anwendungsfall von QGIS für so etwas?

Importierte Digital Terrain Model (DTM) LIDAR-Daten, um nach versteckten Merkmalen in der Landschaft zu suchen, die aus Satellitenbildern nicht sofort ersichtlich sind.

Es wurde eine Farbrampe hinzugefügt, die gestreckt wurde, um der Topologie des Bereichs zu entsprechen, an dem ich interessiert bin.

Eine Schummerungsebene wurde hinzugefügt, um das Gelände deutlicher zu machen.

Einige alte Karten wurden georeferenziert, einschließlich handgezeichneter, nicht maßstabsgetreuer Karten, um zu identifizieren, mit welchen modernen Merkmalen sie übereinstimmen.

Teile des Modells wurden mithilfe des qgis2threejs-Plugins in ein im Browser sichtbares 3D-Modell exportiert. Dazu gehört auch die benutzerdefinierte Flugzeugfunktion, die es mir ermöglicht, einige längst entwässerte Wasserspiele virtuell zu ɿluten'.

Hinzufügen von Layern aus Webkarten (WMS, WFS, TMS und WMTS) zu meinem Modell.

Es ist ein ausgezeichnetes Werkzeug, und ich entdecke jeden Tag mehr darüber. Wofür verwenden Historiker und Archäologen QGIS sonst noch?

Hallo! Außerdem bin ich Archäologe und Dozent an der University of Central Florida. Ich benutze QGIS für meine ganze Arbeit und Lehre. Ich erstelle eine Tutorial-Reihe namens QGIS 4 Arch unter https://www.youtube.com/playlist?list=PLqiB3IIUNAnU8vPcuea6A9pB7Y_qQBH1u Hoffentlich hilft es. Ich werde in den kommenden Wochen neue Videos hochladen, nachdem ich meine Feldforschung abgeschlossen habe.

Ich habe jetzt einige dieser Tutorials gemacht. Sie sind ausgezeichnet. Das hat bei mir einige Lücken gefüllt. Ich mag es besonders, eine CSV-Datei archäologischer Funde mit Koordinaten zu importieren und die Marker dann nach Zeitraum einzufärben. Da sind einige Dinge drin, die ich in einer Million Jahren nie für mich selbst herausgefunden hätte.

Mach weiter so mit der tollen Arbeit. Ich bin abonniert.

Dafür danke ich Ihnen als Archäologe ganz herzlich. Ist es manchmal ein Problem, DM zu senden, wenn ich Fragen oder Fragen zu Qgis habe?

Ich bin Archäologe und GIS-Analyst aus den USA und wollte mit etwas anderem sprechen. Ich sehe, Sie kommen aus Großbritannien und es schien immer, dass die öffentliche/amateurische Archäologie dort etwas anders betrachtet wird als hier in den USA.

Einfach gesagt: Achten Sie auf die Datensicherheit. Wissen Sie, an wen und wo Ihre Produkte vertrieben werden.

Wir haben in vielen Teilen der USA ein erhebliches Problem mit dem Plündern von Sites. Dies zerstört den wissenschaftlichen Wert dieser Sites und beraubt die Öffentlichkeit als Ganzes der Informationen, die sie möglicherweise enthalten. In den USA gibt es Bundesgesetze, die den Standort archäologischer Stätten vor einer weiten Verbreitung schützen und archäologische Stätten vor Informationsanfragen schützen. Viele Staaten haben ähnliche Vorschriften für ihr Land. Privates Land ist privates Land und im Allgemeinen können Sie tun, was Sie wollen, es sei denn, menschliche Überreste werden beteiligt, aber die meisten Archäologen verbreiten selbst keine Daten außerhalb von Landbesitzern (die dann tun können, was sie wollen).

Ich denke, GIS und Fernerkundung sind ein großartiges Werkzeug für die Denkmalpflege, aber in den falschen Händen können sie möglicherweise sehr schädlich sein. Berücksichtigen Sie bei der Herstellung Ihrer Produkte nur den Aspekt des Schutzes dieser Ressourcen.


Schau das Video: QGIS Python PyQGIS - Loading and symbolizing raster layers (Oktober 2021).