Imprimer les propriétés de la table attributaire dans qgis?

8

Je dois fusionner beaucoup de fichiers de formes en un seul grand fichier de formes.
Je veux donc comparer les propriétés des tables d'attributs pour voir s'il y a des différences entre les propriétés de table de chaque forme (type, longueur, précision, nom, etc.). Avec l'intention de standardiser tous les fichiers de formes

par exemple:

entrez la description de l'image ici

Existe-t-il un moyen d'imprimer une liste des propriétés de la table comme indiqué dans l'onglet 'champs' ou d'exporter les propriétés dans un .xls ou .dbf?

Ou existe-t-il un moyen automatisé de faire la normalisation? (C'est peut-être un sujet pour un nouveau fil de discussion ...)

J'utilise QGIS 1.8 (QGIS 2.2 est également possible).

Merci

PieterB
la source
En effet, je voulais l'imprimer sur du papier. Mais si vous pouvez me suggérer comment le faire plus facilement. S'il vous plaît dites-moi.
PieterB
Je n'ai pu trouver que des réponses sur Arc, mais cela devrait fonctionner de la même manière pour QGIS: gis.stackexchange.com/questions/54034/…
tobias47n9e
Pouvez-vous élaborer un peu plus ce que vous entendez par "propriétés de la table attributaire"? De préférence, une liste de propriétés que vous souhaitez comparer - et comment vous souhaitez les comparer. Quel sera le résultat final de votre analyse?
Matthias Kuhn
@ Matthias: J'ai ajouté plus d'informations dans ma réponse
PieterB
@ Spießbürger J'ai affiné ma réponse en fournissant également une solution de script de traitement. J'espère que cela t'aides.
Antonio Falciano

Réponses:

7

Solution shell OSGeo4W

À mon humble avis, le moyen le plus simple d'extraire les propriétés de la table d'attributs ( schéma ) consiste à ouvrir le shell OSGeo4W (parce que vous êtes sur win os), à changer de répertoire dans votre dossier de données et à taper simplement quelque chose comme:

ogrinfo -so inputLayerName.shp inputLayerName

Il vous montrera les informations récapitulatives telles que la projection, le schéma , le nombre de fonctionnalités et les étendues. Ensuite, parce que vous avez un tas de fichiers de formes, vous pouvez faire un FORcycle comme celui-ci:

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

Cela retourne un fichier txt avec les propriétés de tous les fichiers de formes dans un répertoire (car la redirection de sortie avec >>ajoute chaque sortie unique au properties.txtfichier).

Alternativement, si vous êtes intéressé par un fichier de propriétés pour chaque fichier de formes:

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

Concernant la standardisation, il existe plusieurs techniques. Je vous suggère d'utiliser l' RESIZEoption de création de calque après la fusion afin de redimensionner les champs à leur taille optimale (par exemple, les champs de texte avec une longueur excessive seront raccourcis). Par exemple:

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

Solution de script de traitement

Ouvrez la boîte à outils Traitement dans QGIS, créez un nouveau script (en cliquant sur Scripts-> Tools-> Create new script) et tapez:

##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)

Enregistrez-le comme vous le souhaitez, par exemple ogrinfo_so.py. Ensuite, un nouveau script ogrinfo (summary only)apparaîtra dans la boîte à outils Traitement -> Scripts-> User scriptgroupe. Il peut être exécuté tel quel ou en mode batch.

La même opération est possible afin de redimensionner la longueur du champ, comme décrit précédemment:

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

import subprocess

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

Un nouveau script appelé Resize fieldssera disponible dans la boîte à outils Traitement -> Scripts-> User scriptsgroupe. Profitez-en!

Antonio Falciano
la source
Intéressant! Et comment puis-je obtenir les informations du shell OSGeo4W dans un texte ou un excellent document? ps: existe-t-il une documentation pour les débutants sur la façon d'utiliser ce shell OSGeo4W?
PieterB
Le shell OSGeo4W est un shell batch / DOS, vous pouvez donc sélectionner le texte, le copier et le coller dans un fichier texte
Antonio Falciano
1
le montage a été réalisé par @PieterB (grâce à lui). Je viens de corriger une faute de frappe.
simo
1
@afalciano: Merci de m'avoir introduit dans le monde d'OSGeo4W. Il y a encore beaucoup à apprendre ...
PieterB
4

Les fichiers de formes conservent leurs attributs dans des fichiers .dbf, ne pouvez-vous pas simplement ouvrir le fichier .dbf directement dans un programme comme libreoffice calc puis imprimer à partir de là? Si vous n'avez pas trop de fichiers, cela devrait fonctionner.

Une autre option serait d'écrire un script python qui imprime (sur la console) directement les attributs des fonctionnalités, ou même les compare pour vous. Vous pouvez accéder aux attributs d'une fonctionnalité comme celle-ci:

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

Vous devez le faire pour chaque fichier de formes que vous comparez et voir si

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

plus d'informations ici: http://www.qgis.org/en/docs/pyqgis_developer_cookbook/

user24956
la source
Si plus de gens étaient intéressés par un outil comme celui-ci, nous pourrions peut-être financer collectivement le développement.
tobias47n9e
Cela semble être une idée intéressante
user24956
Ils devraient avoir un formulaire pour cela sur le site Web de QGIS :)
tobias47n9e
1

En suivant le thème .dbf, avez-vous cherché directement des comparateurs .dbf? Je n'ai pas trouvé de solution gratuite immédiatement, mais quelque chose comme: dbfCompare

cokrzys
la source
0

Ouvrez simplement le fichier .dbf dans Libreoffice Calc ou Excel, enregistrez-le simplement en tant que nouveau fichier. J'ai économisé dessus une fois et le fichier de formes n'était pas bon.

LandArch
la source