qgisの属性テーブルのプロパティを印刷しますか?


8

多くのシェープファイルを1つの素晴らしいシェープファイルにマージする必要があります。
したがって、属性テーブルのプロパティを比較して、各形状のテーブルプロパティ(タイプ、長さ、精度、名前など)に違いがあるかどうかを確認したいと思います。すべてのシェープファイルを標準化するつもり

例えば:

ここに画像の説明を入力してください

「フィールド」タブに表示されるテーブルプロパティのリストを印刷する方法、またはプロパティを.xlsまたは.dbfにエクスポートする方法はありますか?

または、標準化を行う自動化された方法はありますか?(おそらく、これは新しいスレッドの主題です...)

QGIS 1.8を使用しています(QGIS 2.2も可能です)。

ありがとう


確かに、私はそれを紙に印刷するつもりでした。しかし、より簡単な方法でそれを行う方法を私に提案できる場合。教えてください。
PieterB 2014

私は唯一のアークについての答えを見つけることができるが、それはQGISについても同様に動作するはずです:gis.stackexchange.com/questions/54034/...
tobias47n9e

「属性テーブルのプロパティ」とはどういう意味ですか?比較したいプロパティのリストと、それらを比較したい方法。分析の最終結果はどうなりますか?
Matthias Kuhn 14

@ Matthias:私は私の答えにいくつかの情報を追加しました
PieterB '27

@Spießbürger処理スクリプトソリューションを提供して私の回答をさらに洗練させました。お役に立てれば。
アントニオファルチャーノ2014年

回答:


7

OSGeo4Wシェルソリューション

属性テーブルのプロパティ(スキーマ)を抽出する最も簡単な方法は、OSGeo4Wシェルを開いて(Windows OSを使用しているため)、ディレクトリをデータフォルダーに変更し、次のように入力するだけです。

ogrinfo -so inputLayerName.shp inputLayerName

プロジェクション、スキーマ、機能数、範囲などの概要情報が表示されます。その後、多数のシェープファイルがあるためFOR、次のようなサイクルを実行できます。

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

これにより、ディレクトリ内のすべてのシェープファイルのプロパティを含む1つのtxtファイルが返されます(出力リダイレクト>>は、各出力をproperties.txtファイルに追加するため)。

または、シェープファイルごとに1つのプロパティファイルに関心がある場合:

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

標準化についてはいくつかの手法があります。RESIZEフィールドのサイズを最適なサイズに変更するには、マージ後にレイヤー作成オプションを使用することをお勧めします(たとえば、長すぎるテキストフィールドは短くなります)。例えば:

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

スクリプトソリューションの処理

QGISで処理ツールボックスを開き、新しいスクリプトを作成して(Scripts-> Tools->をクリックしてCreate new script)、次のように入力します。

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

好きなように保存してくださいogrinfo_so.py。次に、新しいスクリプトogrinfo (summary only)が処理ツールボックス-> Scripts-> User scriptグループに表示されます。そのまま、またはバッチモードで実行できます。

前に説明したように、フィールド長をサイズ変更するために同じ操作が可能です。

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

import subprocess

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

呼び出された新しいスクリプトResize fieldsは、Processingツールボックス-> Scripts-> User scriptsグループで使用できます。楽しめ!


面白い!また、OSGeo4Wシェルからテキストまたはexcelldocumentに情報を取得するにはどうすればよいですか?PS:そのOSGeo4Wシェルの使用方法に関する初心者向けのドキュメントはありますか?
PieterB 2014年

OSGeo4Wシェルはバッチ/ DOSシェルなので、テキストを選択してコピーし、テキストファイルに貼り付けることができます
Antonio Falciano


1
編集は@PieterB(彼に感謝)によって行われました。タイプミスを修正しました。
simo 14年

1
@afalciano:OSGeo4Wの世界を紹介してくれてありがとう。まだ学ぶべきことがたくさんあります...
PieterB

4

シェープファイルは.dbfファイルに属性を保持していますが、libreoffice calcなどのプログラムで.dbfファイルを直接開いてそこから印刷することはできませんか?あなたがあまりにも多くのファイルを持っていなければ、これはうまくいくはずです。

別のオプションは、機能の属性を(コンソールに)直接出力するか、またはそれらを比較するpythonスクリプトを作成することです。次のような機能の属性にアクセスできます。

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

比較するシェープファイルごとにこれを行う必要があります。

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

詳細はこちら:http : //www.qgis.org/en/docs/pyqgis_developer_cookbook/


より多くの人々がこのようなツールに興味があれば、おそらく私たちは開発にクラウドファンディングをすることができます。
tobias47n9e 2014

それは興味深いアイデアのように聞こえます
user24956 2014

QGISウェブサイトにフォームが必要です:)
tobias47n9e 2014

1

.dbfテーマに続いて、直接.dbfコンパレータを探しましたか?私はすぐに無料の解決策を見つけていませんが、次のようなものがあります:dbfCompare



0

Libreoffice CalcまたはExcelで.dbfファイルを開くだけで、新しいファイルとして保存できます。一度保存しましたが、シェープファイルは良くありませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.