Imprimir as propriedades da tabela de atributos no qgis?

8

Eu tenho que mesclar muitos arquivos de forma em um grande arquivo de forma.
Então, eu quero comparar as propriedades das tabelas de atributos para ver se há diferenças entre as propriedades da tabela de cada forma (tipo, comprimento, precisão, nome, etc.). Com a intenção de padronizar todos os shapefiles

por exemplo:

insira a descrição da imagem aqui

Existe uma maneira de imprimir uma lista das propriedades da tabela, como mostrado na guia 'fields', ou exportar as propriedades para um .xls ou .dbf?

Ou existe uma maneira automatizada de fazer a padronização? (Talvez este seja um assunto para um novo tópico ...)

Estou usando o QGIS 1.8 (o QGIS 2.2 também é possível).

obrigado

PieterB
fonte
Na verdade, eu quis dizer imprimi-lo em papel. Mas se você puder me sugerir como fazê-lo de uma maneira mais fácil. Por favor, diga.
PieterB
Eu só consegui encontrar respostas sobre o Arc, mas ele deve funcionar de maneira semelhante para o QGIS: gis.stackexchange.com/questions/54034/… #
tobias47n9e
Você pode elaborar um pouco mais o que você quer dizer com "propriedades da tabela de atributos"? Preferível uma lista de propriedades que você gostaria de comparar - e como gostaria de compará-las. Qual será o resultado final da sua análise?
Matthias Kuhn
@ Matthias: Eu adicionei mais algumas informações na minha resposta
PieterB
@ Spießbürger Refinei ainda mais minha resposta, fornecendo também uma solução de script de processamento. Espero que isto ajude.
Antonio Falciano

Respostas:

7

Solução de shell OSGeo4W

IMHO, a maneira mais simples de extrair as propriedades da tabela de atributos ( esquema ) consiste em abrir o shell OSGeo4W (porque você está no Windows OS), alterar o diretório para sua pasta de dados e simplesmente digitar algo como:

ogrinfo -so inputLayerName.shp inputLayerName

Ele mostrará as informações resumidas, como projeção, esquema , contagem de recursos e extensões. Então, como você tem vários shapefiles, pode fazer um FORciclo como o seguinte:

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

Isso retorna um arquivo txt com as propriedades de todos os shapefiles em um diretório (porque o redirecionamento de saída >>anexa cada saída única ao properties.txtarquivo).

Como alternativa, se você estiver interessado em um arquivo de propriedades para cada shapefile:

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

Sobre a padronização, existem várias técnicas. Sugiro que você use a RESIZEopção de criação de camada após a mesclagem para redimensionar os campos para o tamanho ideal (por exemplo, os campos de texto com tamanho excessivo serão reduzidos). Por exemplo:

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

Solução de script de processamento

Abra a caixa de ferramentas Processing no QGIS, crie um novo script (clique em Scripts-> Tools-> Create new script) e digite:

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

Salve como quiser, por exemplo ogrinfo_so.py. Em seguida, um novo script ogrinfo (summary only)aparecerá na caixa de ferramentas Processando -> Scripts-> User scriptgrupo. Pode ser executado como está ou no modo batch.

A mesma operação é possível para redimensionar o comprimento do campo, conforme descrito anteriormente:

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

import subprocess

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

Um novo script chamado Resize fieldsestará disponível na caixa de ferramentas Processando -> Scripts-> User scriptsgrupo. Aproveite!

Antonio Falciano
fonte
Interessante! E como posso obter as informações do shell do OSGeo4W em um documento de texto ou excelente? ps: existe documentação para iniciantes sobre como usar esse shell OSGeo4W?
precisa saber é o seguinte
A Shell OSGeo4W é um lote / DOS Shell, assim você pode selecionar o texto, copie-o e cole em um arquivo de texto
Antonio Falciano
1
A edição foi feita por @PieterB (graças a ele). Acabei de corrigir um erro de digitação.
simo
1
@afalciano: Obrigado por me apresentar ao mundo do OSGeo4W. Ainda há muito que aprender ...
PieterB
4

Os shapefiles mantêm seus atributos em arquivos .dbf. Você não pode simplesmente abrir o arquivo .dbf diretamente em um programa como o libreoffice calc e depois imprimir a partir daí? Se você não possui muitos arquivos, isso deve funcionar.

Outra opção seria escrever um script python que imprima (para o console) os atributos dos recursos diretamente ou até os compare para você. Você pode acessar os atributos de um recurso como este:

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

Você precisaria fazer isso para cada arquivo de forma que você comparar e ver se

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

mais informações aqui: http://www.qgis.org/en/docs/pyqgis_developer_cookbook/

user24956
fonte
Se mais pessoas se interessassem por uma ferramenta como essa, talvez pudéssemos financiar em massa o desenvolvimento.
tobias47n9e
Isso soa como uma idéia interessante
user24956
Eles devem ter um formulário para isso no site do QGIS :) #
tobias47n9e 27/02/2014
1

Seguindo o tema .dbf, você procurou comparadores .dbf diretamente? Não encontrei uma solução gratuita imediatamente, mas algo como: dbfCompare

cokrzys
fonte
0

Basta abrir o arquivo .dbf no Libreoffice Calc ou Excel, salve-o como um novo arquivo. Eu salvei uma vez e o shapefile não foi bom.

LandArch
fonte