Cetak properti dari tabel atribut di qgis?

8

Saya harus menggabungkan banyak shapefile menjadi satu shapefile yang hebat.
Jadi saya ingin membandingkan properti dari tabel atribut untuk melihat apakah ada perbedaan antara properti tablep masing-masing bentuk (jenis, panjang, presisi, nama, dll). Dengan niat untuk membakukan semua shapefile

misalnya:

masukkan deskripsi gambar di sini

Apakah ada cara untuk mencetak daftar properti tabel seperti yang ditunjukkan pada tab 'bidang' atau untuk mengekspor properti ke .xls atau .dbf?

Atau adakah cara otomatis untuk melakukan standarisasi? (Mungkin ini adalah topik untuk utas baru ...)

Saya menggunakan QGIS 1.8 (QGIS 2.2 juga dimungkinkan).

Terima kasih

PieterB
sumber
Memang, maksud saya mencetaknya di atas kertas. Tetapi jika Anda bisa menyarankan saya bagaimana melakukannya dengan cara yang lebih mudah. Tolong beritahu aku.
PieterB
Saya hanya bisa menemukan jawaban tentang Arc tetapi harus berfungsi serupa untuk QGIS: gis.stackexchange.com/questions/54034/…
tobias47n9e
Bisakah Anda menguraikan lebih sedikit apa yang Anda maksud dengan "properti dari tabel atribut"? Daftar properti yang ingin Anda bandingkan - dan bagaimana Anda ingin membandingkannya. Apa yang akan menjadi hasil akhir dari analisis Anda?
Matthias Kuhn
@ Matthias: Saya menambahkan beberapa informasi dalam jawaban saya
PieterB
@ Spießbürger Saya telah memperbaiki jawaban saya dengan menyediakan juga solusi pemrosesan skrip. Semoga ini membantu.
Antonio Falciano

Jawaban:

7

Solusi shell OSGeo4W

IMHO cara termudah untuk mengekstrak properti tabel atribut ( skema ) terdiri dari membuka shell OSGeo4W (karena Anda sedang menang os), ubah direktori ke folder data Anda dan cukup ketik sesuatu seperti:

ogrinfo -so inputLayerName.shp inputLayerName

Ini akan menunjukkan kepada Anda informasi ringkasan seperti proyeksi, skema , jumlah fitur dan luasan. Kemudian, karena Anda memiliki banyak shapefile, Anda dapat melakukan FORsiklus seperti berikut ini:

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

Ini mengembalikan satu file txt dengan properti semua shapefile dalam direktori (karena pengalihan output dengan >>menambahkan setiap output tunggal ke properties.txtfile).

Atau, jika Anda tertarik pada satu file properti untuk setiap shapefile:

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

Tentang standardisasi, ada beberapa teknik. Saya menyarankan Anda untuk menggunakan RESIZEopsi pembuatan lapisan setelah penggabungan untuk mengubah ukuran bidang ke ukuran optimal (misalnya bidang teks dengan panjang yang berlebihan akan dipersingkat). Contohnya:

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

Memproses solusi skrip

Buka kotak alat Pemrosesan di QGIS, buat skrip baru (mengklik Scripts-> Tools-> Create new script) dan ketik:

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

Simpan sesuai keinginan Anda, mis ogrinfo_so.py. Kemudian, skrip baru ogrinfo (summary only)akan muncul di kotak alat Pemrosesan -> Scripts-> User scriptgrup. Itu dapat dieksekusi seperti itu atau dalam mode batch.

Operasi yang sama dimungkinkan untuk mengubah ukuran panjang bidang, seperti dijelaskan sebelumnya:

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

import subprocess

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

Sebuah skrip baru yang disebut Resize fieldsakan tersedia di kotak toolbox Pemrosesan -> Scripts-> User scripts. Bersenang senang lah!

Antonio Falciano
sumber
Menarik! Dan bagaimana saya bisa mendapatkan info dari shell OSGeo4W ke dalam dokumen teks atau excell? ps: apakah ada dokumentasi pemula tentang cara menggunakan shell OSGeo4W?
PieterB
OSGeo4W Shell adalah batch / DOS Shell, jadi Anda dapat memilih teks, menyalinnya dan menempelkannya ke file teks
Antonio Falciano
1
sunting dilakukan oleh @PieterB (terima kasih padanya). Saya baru saja memperbaiki kesalahan ketik.
simo
1
@afalciano: Terima kasih telah memperkenalkan saya ke dunia OSGeo4W. Masih banyak yang harus dipelajari ...
PieterB
4

Shapefile menyimpan atributnya dalam file .dbf, tidak bisakah Anda membuka file .dbf secara langsung dalam program seperti libreoffice calc lalu mencetak dari sana? Jika Anda tidak memiliki terlalu banyak file, ini akan berfungsi.

Pilihan lain adalah menulis skrip python yang mencetak (ke konsol) atribut fitur secara langsung, atau bahkan membandingkannya untuk Anda. Anda dapat mengakses atribut fitur seperti ini:

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

Anda perlu melakukan ini untuk setiap shapefile perbandingan Anda dan melihat apakah

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

info lebih lanjut di sini: http://www.qgis.org/en/docs/pyqgis_developer_cookbook/

pengguna24956
sumber
Jika lebih banyak orang akan tertarik pada alat seperti ini, mungkin kita bisa membiayai pengembangan.
tobias47n9e
Itu terdengar seperti ide yang menarik
user24956
Mereka harus memiliki formulir untuk itu di situs web QGIS :)
tobias47n9e
1

Mengikuti tema .dbf apakah Anda sudah mencari pembanding .dbf secara langsung? Saya belum menemukan solusi gratis segera, tetapi sesuatu seperti: dbfCompare

cokrzys
sumber
0

Cukup buka file .dbf di Libreoffice Calc atau Excel, simpan saja sebagai file baru. Saya menyimpannya sekali dan shapefile itu tidak baik.

LandArch
sumber