[FOSSGIS-Talk] GDAL/OGR Skripte in Python ansprechen

bmarcus at giswana.de bmarcus at giswana.de
Mi Nov 17 11:45:45 CET 2021


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



Mehr Informationen über die Mailingliste FOSSGIS-Talk-Liste