Hallo, seit wenigen Wochen biege ich mir Python bei. Für den Massenimport von Shape-Files, die über mehrere Ordner und Unterordner verteilt vorliegen, habe ich ein Python-Skript geschrieben, welches die gewünschten Dateien aufsucht und anschließend in eine Tabelle einer SpatiaLite Datenbank schreibt. Hierbei kommt ich die durch QGIS bereitgestellte Funktion processing.run("native:mergevectorlayers" zum Einsatz.
Ein Nachteil von "native:mergevectorlayers" ist jedoch, dass es keine Methode zum Anfügen neuer Daten in die gleiche Tabelle gibt. Vielmehr wird eine existierende Tabelle einfach überschrieben (oder ich habe bisher etwas Gravierendes übersehen). Das GDAL/OGR Python-Skript ogrmerge.py beherrscht das Anhängen weiterer Daten an eine bestehende Tabelle, doch konnte ich bisher das Skript nicht zum Laufen bringen. [python3 erster Versuch] import sys # Einbinden des Skriptpfades new_path = 'C:\\Program Files\\QGIS 3.22.0\\apps\\Python39\\Scripts' if new_path not in sys.path: sys.path.append(new_path) # Import von ogrmerge import ogrmerge as om ##==> QGIS stürzt sofort ab [python3 zweiter Versuch: direktes Einbinden des Skripts aus ' osgeo_utils'] import sys new_path = 'C:\\Program Files\\QGIS 3.22.0\\apps\\Python39\\Lib\\site-packages\\osgeo_utils' if new_path not in sys.path: sys.path.append(new_path) import ogrmerge as om Das funktioniert schon mal und om.process kann angesprochen werden. Doch es hapert am Syntax: om.process([-o "C:\\liemas7\\dev\\temp\\ogrmerge2.gpkg" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-001_flurstueck.shp" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-002_flurstueck.shp" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-003_flurstueck.shp" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-004_flurstueck.shp" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-005_flurstueck.shp" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-006_flurstueck.shp" -f GPKG -single -progress]) ##--> Die QGIS Python-Console zeigt einen Syntax-Fehler direkt vor dem ersten doppelten Anführungszeichen an. om.process(['-o' "C:\\liemas7\\dev\\temp\\ogrmerge2.gpkg" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-001_flurstueck.shp" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-002_flurstueck.shp" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-003_flurstueck.shp" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-004_flurstueck.shp" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-005_flurstueck.shp" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-006_flurstueck.shp" '-f' 'GPKG' '-single' '-progress']) ##--> ERROR: Unrecognized argument : -oC:\liemas7\dev\temp\ogrmerge2.gpkgC:\lie... OK, der Fehler ist augenscheinlich. om.process(['-o "C:\\liemas7\\dev\\temp\\ogrmerge2.gpkg" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-001_flurstueck.shp" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-002_flurstueck.shp" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-003_flurstueck.shp" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-004_flurstueck.shp" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-005_flurstueck.shp" "C:\\liemas7\\dev\\data\\geo\\th\\ALKIS_KB54_shp\\2601-006_flurstueck.shp" -f GPKG -single -progress']) ##--> ERROR: Unrecognized argument : -o "C:\liemas7\dev\temp\ogrmerge2.gpkg" "C:\liemas7\dev\data\geo\th\ALKIS_KB54_shp\2601-001_flurstueck.shp" "C:\liemas7\dev\data\geo\th\ALKIS_KB54_shp\2601-002_flurstueck.shp" "C:\liemas7\dev\data\geo\th\ALKIS_KB54_shp\2601-003_flurstueck.shp" "C:\liemas7\dev\data\geo\th\ALKIS_KB54_shp\2601-004_flurstueck.shp" "C:\liemas7\dev\data\geo\th\ALKIS_KB54_shp\2601-005_flurstueck.shp" "C:\liemas7\dev\data\geo\th\ALKIS_KB54_shp\2601-006_flurstueck.shp" -f GPKG -single -progress Das sieht zwar m.E. nach einer sauberen Übergabe der Argumente aus, doch die Maschine ist offensichtlich anderer Meinung. Ich wäre sehr dankbar, wenn mir jemand bei der Findung des richtigen Syntax auf die Sprünge helfen könnte, oder einen anderen Weg aufzeigt, wie man einen Massenimport mit Python realisiert, der auch die Möglichkeit bietet, weitere Daten an bestehende Datensätze anzuhängen. Zudem interessiert mich als blutiger Python-Anfänger, warum das Einbinden von ogrmerge.py aus dem Skript-Ordner 'C:\\Program Files\\QGIS 3.22.0\\apps\\Python39\\Scripts' nicht möglich ist. Besten Dank. Euch alle Gute Bernd -- .................................................................... FOSSGIS Veranstaltungen https://www.fossgis.de/news/fossgis-events/ FOSSGIS e.V, der Verein zur Förderung von Freier Software aus dem GIS-Bereich und Freier Geodaten! https://www.fossgis.de/ https://twitter.com/FOSSGIS_Verein ____________________________________________________________________ FOSSGIS-Talk-Liste mailing list FOSSGIS-Talk-Liste@fossgis.de https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste