正しい列定義を使用してQGISでxlsをcsvに変換し、データをpostgisにエクスポートします

Aug 18 2020

私はQGIS3.10.2Aコルーニャを使用しています。このチュートリアルを読んだ後(https://ieqgis.wordpress.com/2015/02/08/importing-csv-files-into-postgresql-using-the-db-manager-in-qgis/)私はついにxls-Dataをcsvに変換し、このcsv-DataをPostgisにロードする簡単な方法を見つけたと思いました。データをpgAdminに直接ロードする前に実行したすべてのアクションは、正しい列の配置でデータをインポートする際に常に問題があったため、非常に負担がかかりました。qgisを介してxlsをcsvに変換すると、すべての列が文字列に変換されますが、これは正しくありません。Excelシートを正しい列定義でcsvに変換し、これらの正しい形式でPostgisにインポートする方法について何か考えはありますか?

回答

1 bugmenot123 Aug 18 2020 at 21:25

QGISがそこから目的のデータ型を読み取ることができるように、csvtファイルを追加する必要があります。

QGIS3.2を参照してください-csvをインポートするときに列タイプを強制する

CSVを使用せず、代わりにXLS / XLSXを使用することを検討してください。そうすれば、それをすべて回避できる可能性があります。

1 DPSSpatial Aug 18 2020 at 23:38

特にCSVが持つ可能性があり、データ型が誤読される可能性のある非空間データの量を考えると、CSVデータをロードするためにQGISに依存することは避けます。

代わりに、CSVKitを使用して、CSVインポートの結果となるテーブルの列を定義するだけでなく、PostGIS関数を使用して空間データなどを作成することをお勧めします。

CSVKitはCSVを読み取り、列定義を作成できます。

csvsql -i postgresql crime.csv

この結果が得られます:

CREATE TABLE crime (
    "INCIDENT_ID" FLOAT NOT NULL,
    "OFFENSE_ID" BIGINT NOT NULL,
    "OFFENSE_CODE" VARCHAR(4) NOT NULL,
    "OFFENSE_CODE_EXTENSION" INTEGER NOT NULL,
    "OFFENSE_TYPE_ID" VARCHAR(30) NOT NULL,
    "OFFENSE_CATEGORY_ID" VARCHAR(28) NOT NULL,
    "FIRST_OCCURRENCE_DATE" TIMESTAMP WITHOUT TIME ZONE NOT NULL,
    "LAST_OCCURRENCE_DATE" TIMESTAMP WITHOUT TIME ZONE,
    "REPORTED_DATE" TIMESTAMP WITHOUT TIME ZONE NOT NULL,
    "INCIDENT_ADDRESS" VARCHAR(97),
    "GEO_X" FLOAT NOT NULL,
    "GEO_Y" FLOAT NOT NULL,
    "GEO_LON" FLOAT,
    "GEO_LAT" FLOAT,
    "DISTRICT_ID" INTEGER,
    "PRECINCT_ID" INTEGER,
    "NEIGHBORHOOD_ID" VARCHAR(26),
    "IS_CRIME" INTEGER NOT NULL,
    "IS_TRAFFIC" INTEGER NOT NULL
);

しかし、さらに良いことに、上記を実行し、1つのコマンドでCSVロードします。

csvsql --db postgresql://username:password@servername/databasename --table denver_crime --insert crime.csv

これは、これを行う必要があるときに作成したチュートリアルです。

https://github.com/dpsspatial/Installation-Instructions/blob/master/csvkit.md

また、この作業にはPGAdminの代わりにDBeaverを使用することをお勧めします。これは、DBAが設計したPGAdminよりもはるかにユーザーフレンドリーでアナリストが設計したデータベースのGUIです(チュートリアルのスクリーンショットを更新する必要があります-PGAdmin3はOK、PGAdmin 4は重すぎるので、幸いなことにDBeaverが適切なタイミングでやって来ました)。