Imprime las propiedades de la tabla de atributos en qgis?

8

Tengo que fusionar muchos shapefiles en un gran shapefile.
Por lo tanto, quiero comparar las propiedades de las tablas de atributos para ver si hay diferencias entre las propiedades de tabla de cada forma (tipo, longitud, precisión, nombre, etc.). Con la intención de estandarizar todos los archivos de forma

p.ej:

ingrese la descripción de la imagen aquí

¿Hay alguna manera de imprimir una lista de las propiedades de la tabla como se muestra en la pestaña 'campos' o exportar las propiedades a un .xls o .dbf?

¿O hay una manera automatizada de hacer la estandarización? (Quizás este es un tema para un nuevo hilo ...)

Estoy usando QGIS 1.8 (QGIS 2.2 también es posible).

Gracias

PieterB
fuente
De hecho, quise imprimirlo en papel. Pero si me puede sugerir cómo hacerlo de una manera más fácil. Por favor dime.
PieterB
Solo pude encontrar respuestas sobre Arc, pero debería funcionar de manera similar para QGIS: gis.stackexchange.com/questions/54034/…
tobias47n9e
¿Puedes explicar un poco más lo que quieres decir con "propiedades de la tabla de atributos"? Preferiblemente una lista de propiedades que le gustaría comparar, y cómo le gustaría compararlas. ¿Cuál será el resultado final de su análisis?
Matthias Kuhn
@ Matthias: agregué más información en mi respuesta
PieterB
@ Spießbürger He refinado aún más mi respuesta proporcionando también una solución de script de procesamiento. Espero que esto ayude.
Antonio Falciano

Respuestas:

7

Solución de shell OSGeo4W

En mi humilde opinión, la forma más simple de extraer las propiedades de la tabla de atributos ( esquema ) consiste en abrir el shell OSGeo4W (porque estás en Windows), cambiar el directorio a tu carpeta de datos y simplemente escribir algo como:

ogrinfo -so inputLayerName.shp inputLayerName

Le mostrará la información de resumen como proyección, esquema , recuento de características y extensiones. Luego, debido a que tiene un montón de shapefiles, puede hacer un FORciclo como el siguiente:

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

Esto devuelve un archivo txt con las propiedades de todos los archivos de forma en un directorio (porque la redirección de salida >>agrega cada salida individual al properties.txtarchivo).

Alternativamente, si está interesado en un archivo de propiedades para cada archivo de forma:

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

Sobre la estandarización, hay varias técnicas. Le sugiero que use la RESIZEopción de creación de capa después de la fusión para cambiar el tamaño de los campos a su tamaño óptimo (por ejemplo, los campos de texto con una longitud excesiva se acortarán). Por ejemplo:

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

Solución de procesamiento de script

Abra la caja de herramientas Procesamiento en QGIS, cree un nuevo script (haciendo clic en Scripts-> Tools-> Create new script) y escriba:

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

Guárdelo como desee, por ejemplo ogrinfo_so.py. Luego, ogrinfo (summary only)aparecerá un nuevo script en la caja de herramientas Procesamiento -> Scripts-> User scriptgrupo. Se puede ejecutar tal cual o en modo por lotes.

La misma operación es posible para cambiar el tamaño de la longitud del campo, como se describió anteriormente:

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

import subprocess

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

Un nuevo script llamado Resize fieldsestará disponible en la caja de herramientas Procesamiento -> Scripts-> User scriptsgrupo. ¡Disfrútala!

Antonio Falciano
fuente
¡Interesante! ¿Y cómo puedo obtener la información del shell OSGeo4W en un documento de texto o excelente? PD: ¿hay documentación para principiantes sobre cómo usar ese shell OSGeo4W?
PieterB
El Shell OSGeo4W es un Shell por lotes / DOS, por lo que puede seleccionar el texto, copiarlo y pegarlo en un archivo de texto
Antonio Falciano
1
La edición fue realizada por @PieterB (gracias a él). Acabo de corregir un error tipográfico.
simo
1
@afalciano: Gracias por introducirme en el mundo de OSGeo4W. Todavía hay mucho que aprender ...
PieterB
4

Los archivos de forma contienen sus atributos en archivos .dbf, ¿no puede simplemente abrir el archivo .dbf directamente en un programa como libreoffice calc y luego imprimir desde allí? Si no tiene demasiados archivos, esto debería funcionar.

Otra opción sería escribir un script de Python que imprima (en la consola) los atributos de las funciones directamente, o incluso los compare por usted. Puede acceder a los atributos de una función como esta:

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

Debería hacer esto para cada archivo de forma que compare y ver si

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

Más información aquí: http://www.qgis.org/en/docs/pyqgis_developer_cookbook/

user24956
fuente
Si más personas estuvieran interesadas en una herramienta como esta, tal vez podríamos financiar el desarrollo de manera colectiva.
tobias47n9e
Eso suena como una idea interesante
user24956
Deberían tener un formulario para eso en el sitio web de QGIS :)
tobias47n9e
1

Siguiendo con el tema .dbf, ¿ha buscado comparadores .dbf directamente? No he encontrado una solución gratuita de inmediato, pero algo como: dbfCompare

cokrzys
fuente
0

Simplemente abra el archivo .dbf en Libreoffice Calc o Excel, simplemente guárdelo como un archivo nuevo. Lo guardé una vez y el archivo de forma no era bueno.

LandArch
fuente