Drucken Sie die Eigenschaften der Attributtabelle in qgis aus.

8

Ich muss viele Shapefiles zu einem großartigen Shapefile zusammenführen.
Daher möchte ich die Eigenschaften der Attributtabellen vergleichen, um festzustellen, ob es Unterschiede zwischen den Tabelleneigenschaften jeder Form gibt (Typ, Länge, Genauigkeit, Name usw.). Mit der Absicht, alle Shapefiles zu standardisieren

z.B:

Geben Sie hier die Bildbeschreibung ein

Gibt es eine Möglichkeit, eine Liste der Tabelleneigenschaften auszudrucken, wie in der Registerkarte 'Felder' gezeigt, oder die Eigenschaften in eine XLS- oder DBF-Datei zu exportieren?

Oder gibt es eine automatisierte Möglichkeit zur Standardisierung? (Vielleicht ist dies ein Thema für einen neuen Thread ...)

Ich verwende QGIS 1.8 (QGIS 2.2 ist ebenfalls möglich).

Vielen Dank

PieterB
quelle
In der Tat wollte ich es auf Papier drucken. Aber wenn Sie mir vorschlagen können, wie es einfacher geht. Bitte sag mir.
PieterB
Ich konnte nur Antworten zu Arc finden, aber es sollte für QGIS ähnlich funktionieren: gis.stackexchange.com/questions/54034/…
tobias47n9e
Können Sie etwas näher erläutern, was Sie unter "Eigenschaften der Attributtabelle" verstehen? Am besten eine Liste von Eigenschaften, die Sie vergleichen möchten - und wie Sie sie vergleichen möchten. Was wird das Endergebnis Ihrer Analyse sein?
Matthias Kuhn
@ Matthias: Ich habe einige weitere Informationen in meine Antwort
eingefügt
@ Spießbürger Ich habe meine Antwort weiter verfeinert und auch eine Verarbeitungsskriptlösung bereitgestellt. Hoffe das hilft.
Antonio Falciano

Antworten:

7

OSGeo4W-Shell-Lösung

IMHO besteht der einfachste Weg, die Eigenschaften der Attributtabelle ( Schema ) zu extrahieren, darin, die OSGeo4W-Shell zu öffnen (weil Sie auf Win OS sind), das Verzeichnis in Ihren Datenordner zu ändern und einfach Folgendes einzugeben:

ogrinfo -so inputLayerName.shp inputLayerName

Es zeigt Ihnen die zusammenfassenden Informationen wie Projektion, Schema , Anzahl der Features und Ausmaße. Da Sie dann eine Reihe von Shapefiles haben, können Sie einen FORZyklus wie den folgenden ausführen :

FOR %f IN (*.shp) DO ogrinfo -so %f %~nf >> properties.txt

Dies gibt eine txt-Datei mit den Eigenschaften aller Shapefiles in einem Verzeichnis zurück (da bei der Ausgabeumleitung mit >>jede einzelne Ausgabe an die properties.txtDatei angehängt wird ).

Alternativ, wenn Sie an einer Eigenschaftendatei für jedes Shapefile interessiert sind:

FOR %f IN (*.shp) DO ogrinfo -so %f %~nf > %~nf_properties.txt

Über die Standardisierung gibt es verschiedene Techniken. Ich empfehle Ihnen, die RESIZEOption zum Erstellen von Ebenen nach dem Zusammenführen zu verwenden, um die Größe der Felder auf ihre optimale Größe zu ändern (z. B. werden Textfelder mit übermäßiger Länge gekürzt). Zum Beispiel:

ogr2ogr -lco RESIZE=yes merge_resized.shp merge.shp 

Skriptlösung verarbeiten

Öffnen Sie die Toolbox "Verarbeitung" in QGIS, erstellen Sie ein neues Skript (klicken Sie auf Scripts-> Tools-> Create new script) und geben Sie Folgendes ein:

##ogrinfo (summary only)=name
##input=vector
##output=output file

import os, subprocess

head, tail = os.path.split(input)
inputname = os.path.splitext(tail)[0]
cmd = 'ogrinfo -so ' + input + ' ' + inputname + ' > ' + output
subprocess.check_call(cmd, shell=True)

Speichern Sie es wie Sie möchten, z ogrinfo_so.py. Anschließend ogrinfo (summary only)wird in der Gruppe Processing Toolbox -> Scripts-> ein neues Skript angezeigt User script. Es kann unverändert oder im Batch-Modus ausgeführt werden.

Der gleiche Vorgang ist möglich, um die Feldlänge wie zuvor beschrieben zu ändern:

##Resize fields=name
##input=vector
##output=output vector

import subprocess

cmd = 'ogr2ogr -lco RESIZE=YES ' + output + ' ' + input 
subprocess.check_call(cmd, shell=True)

Ein neues Skript mit dem Namen Resize fieldswird in der Gruppe Processing Toolbox -> Scripts-> verfügbar sein User scripts. Geniesse es!

Antonio Falciano
quelle
Interessant! Und wie kann ich die Informationen aus der OSGeo4W-Shell in ein Text- oder Excelldokument umwandeln? ps: Gibt es eine Dokumentation für Anfänger zur Verwendung dieser OSGeo4W-Shell?
PieterB
Die OSGeo4W-Shell ist eine Batch- / DOS-Shell, sodass Sie den Text auswählen, kopieren und in eine Textdatei einfügen können
Antonio Falciano
1
Bearbeitung wurde von @PieterB gemacht (danke an ihn). Ich habe gerade einen Tippfehler korrigiert.
Simo
1
@afalciano: Danke, dass du mich in die Welt von OSGeo4W eingeführt hast. Es gibt noch viel zu lernen ...
PieterB
4

Shapefiles enthalten ihre Attribute in DBF-Dateien. Können Sie die DBF-Datei nicht einfach direkt in einem Programm wie libreoffice calc öffnen und von dort aus drucken? Wenn Sie nicht zu viele Dateien haben, sollte dies funktionieren.

Eine andere Möglichkeit wäre, ein Python-Skript zu schreiben, das die Attribute von Features direkt an die Konsole druckt oder sie sogar für Sie vergleicht. Sie können auf die Attribute einer Funktion wie folgt zugreifen:

it = vectorLayer.getFeatures()
for eachFeature in it:
    attributes = eachFeature.attributes()

Sie müssten dies für jedes Shapefile tun, das Sie vergleichen, und prüfen, ob

eachFeature.attributes() == eachOtherFeature.attributes()

Weitere Informationen hier: http://www.qgis.org/en/docs/pyqgis_developer_cookbook/

user24956
quelle
Wenn mehr Menschen an einem solchen Tool interessiert wären, könnten wir die Entwicklung vielleicht mit Crowdfunding finanzieren.
Tobias 47n9e
Das klingt nach einer interessanten Idee
user24956
Sie sollten ein Formular dafür auf der QGIS-Website haben :)
tobias47n9e
1

Haben Sie im Anschluss an das .dbf-Thema direkt nach .dbf-Vergleichern gesucht? Ich habe nicht sofort eine kostenlose Lösung gefunden, aber so etwas wie: dbfCompare

cokrzys
quelle
0

Öffnen Sie einfach die DBF-Datei in Libreoffice Calc oder Excel und speichern Sie sie als neue Datei. Ich habe es einmal gespeichert und das Shapefile war nicht gut.

LandArch
quelle