Mengubah xls menjadi csv di QGIS dengan definisi kolom yang benar dan mengekspor data ke postgis

Aug 18 2020

Saya menggunakan QGIS 3.10.2 A Coruna. Setelah membaca tutorial ini (https://ieqgis.wordpress.com/2015/02/08/importing-csv-files-into-postgresql-using-the-db-manager-in-qgis/) Saya pikir saya akhirnya menemukan cara sederhana untuk mengubah xls-Data di csv dan kemudian memuat csv-Data ini ke Postgis. Semua tindakan yang diambil sebelumnya di Memuat data langsung ke pgAdmin sangat melelahkan karena selalu ada masalah dengan mengimpor data dengan definisi kolom yang benar. Saat mengubah xls menjadi csv melalui qgis semua kolom diubah menjadi string, yang tidak benar. Adakah pemikiran bagaimana excel sheets dapat diubah menjadi csv dengan definisi kolom yang benar dan diimpor dengan format yang benar ini ke dalam Postgis?

Jawaban

1 bugmenot123 Aug 18 2020 at 21:25

Anda harus menambahkan file csvt sehingga QGIS dapat membaca tipe data yang diinginkan dari sana.

Lihat QGIS 3.2 - Memaksa tipe kolom saat mengimpor csv

Pertimbangkan untuk tidak menggunakan CSV melainkan XLS / XLSX sehingga Anda bisa menghindari semua itu.

1 DPSSpatial Aug 18 2020 at 23:38

Saya akan menghindari bergantung pada QGIS untuk memuat data CSV, terutama mengingat jumlah data non-spasial yang cenderung dimiliki CSV di mana tipe datanya dapat salah dibaca.

Sebagai gantinya, saya merekomendasikan menggunakan CSVKit untuk tidak hanya menentukan kolom di tabel yang akan dihasilkan dari impor CSV Anda, tetapi kemudian menggunakan fungsi PostGIS untuk membangun data spasial, dll.

CSVKit dapat membaca CSV dan membuat definisi kolom:

csvsql -i postgresql crime.csv

Menghasilkan hasil ini:

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

Tetapi lebih baik lagi, Anda menyelesaikan hal di atas dan memuat CSV dalam satu perintah:

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

Berikut adalah tutorial yang saya buat ketika saya perlu melakukan ini:

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

Saya juga merekomendasikan menggunakan DBeaver daripada PGAdmin untuk semua pekerjaan ini, karena ini adalah GUI yang jauh lebih ramah pengguna / dirancang oleh analis untuk database Anda daripada PGAdmin yang dirancang DBA (saya harus memperbarui tangkapan layar tutorial - PGAdmin 3 adalah OK, PGAdmin 4 terlalu berat, dan untungnya DBeaver datang untuk kita pada waktu yang tepat).