Mengubah xls menjadi csv di QGIS dengan definisi kolom yang benar dan mengekspor data ke postgis
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
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.
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).