.csvファイルとのテーブル結合により、結合後にフィールドがnullになる


8

.dbfファイルについて既に尋ねられた質問と同様に、私は.csvファイルをQGISの.gdbまたはシェープファイルカバレッジに結合しようとしています。結合の前にQGISに追加されたテーブルは正常に見えますが、結合が完了すると、結合されたテーブルには結合されたすべてのフィールドのNULL値が含まれます。同じことがさまざまな異なるテーブルで発生し、シェープファイルと.gdbファイルのどちらに参加するかに関係なく。

OSX 10.8.5でQGIS 2.0.1を実行しています。元のテーブルファイルは.mdb形式で含まれているので、購入してMDB ACCDB Viewerを使用して.CSVにエクスポートしました。個別に表示すると問題ないという事実から、問題は結合手順にあるのではなく、結合手順にあると思います。テーブル自体。

提案?


[リンク](gis.stackexchange.com/questions/63804/…)に関連
KMT

csv の列が、ターゲットのシェープファイル/ gdbで結合されている列と同じタイプであることを確認できますか?通常、[ フィールド ]タブに移動すると、各レイヤーのプロパティウィンドウにフィールドタイプが表示されます。
SaultDon 2014年

1
Aha-つまり、シェープファイルには整数フィールドがあり、すべてのテーブルフィールドは文字列フィールドです。.mdbから.csvへの変換でフィールドタイプが失われましたか?プロパティダイアログでフィールドタイプを変更できますか?
KMT

完全に一致するかどうかを確認してください。フィールドタイプが一致した場合でも、この問題が発生しました。問題が判明したのは、文字列の先頭に空白があったことです。これは、QGIS trim(oldField)機能を使用して新しいフィールドを作成することにより修正されました。
Lauren

回答:


2

QGISの.csvファイルは、デフォルトですべてのデータを文字列としてインポートします。どの列をどのデータタイプとして指定するかをQGISに指示する.csvtテキストファイルを作成する必要があります。

A .csvt file contains only one line and the types for each column have to be quoted and comma separated, e.g.

"Integer","Real","String"

引用元:http : //anitagraser.com/2011/03/07/how-to-specify-data-types-of-csv-columns-for-use-in-qgis/

その後、データは同じタイプになり、結合は機能するはずです。


@Amos Buddeに感謝します。私は.csvtルートも試しますが、結局のところ、両方の文字列フィールドを含む別のシェープファイルとテーブルを試しましたが、それでも機能しません-結合されたテーブルにnull値が表示されます。私のデータは上記で共有されています-試してみる機会はありますか?
KMT

.csvtファイルを試してみましたが、まだうまくいきません。それはあなたのために働きますか?
KMT

2

2つのフィールドのデータ型が同じであることを確認することをお勧めします。

シェープファイルのフィールドタイプは変更できません。しかし、新しい空のテキストフィールドを作成し、それを整数フィールドと同じにするのは簡単です。

次のようなフィールド計算式を使用できます 。実際の整数フィールドの名前にtostring( "INT_FIELD" )置き換えるだけINT_FIELDです。

CSVレイヤーの属性値をテキスト<->番号から簡単に変更することもできます。


更新

null値を取得している場合は、結合を維持してみますが、その属性テーブルを閉じて再度開き、結合した値が存在するかどうかを確認します(またはQGISを閉じたり、再度開いたりします)。

フィールドタイプが混在しているcsvをシェープファイルに正常に結合できたので、文字列と整数のどちらも問題にはなりません。


アップデート2

null値を取り除くには、結合が行われている対応するテーブルに実際に一致するレコードが必要です。しかし、下の画像では、一部に一致するレコードがあることがわかります。

黄色で成功した参加


それらが両方とも文字列値である場合でも、結合されたテーブルでNULL値の問題が発生しています。他の考え?
KMT

属性テーブルまたはQGISを閉じたり開いたりしても運がありません。
KMT

@KMT誰でもテストできるように共有できるデータがありますか?
SaultDon 2014年

承知しました。でシェープファイルdropbox.com/sh/jvbh2pafm2dreec/lr0GiFiq2t (「デルタカバー」ファイルを使用して)。でテーブルdropbox.com/sh/qw25uxmaoo6pgqh/s8EKrU9DfL( "Covers_Survey"テーブルを使用して)。また、dropbox.com / sh / 8vdalc68jjd2c7i / iFpsm7MgADに.gdbファイル(シェープファイルと同じ)があります。「Covlnk_text」(シェイプファイル)および「Covlnktxt」(テーブル)フィールドに基づいて結合します。
KMT

1
@KMT値がまだ一致しないため、フィールドデータタイプの変換がまったく役に立たないと思います。私はソースデータ(mdb)に戻り、出力csvの値をmdbテーブルと比較します(おそらく、途中で混乱した可能性があります)。LibreOffice Baseはmdbも開くことができます。
SaultDon 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.