memetakan lebih dari satu juta poin menggunakan QGIS

9

Saya mencoba memetakan CSV dengan lebih dari satu juta poin lat / lon di AS tanpa metadata. Saya belum pernah mencoba memetakan data sebanyak ini dan ingin tahu langkah apa yang harus saya ambil. Saya tahu ini terlalu banyak data untuk QGIS jadi saya mencoba membaginya menjadi 100.000 baris CSV tetapi kemudian mendapat banyak file yang saya tidak tahu harus bagaimana. Saya pikir mungkin yang terbaik untuk mengumpulkan poin dengan blok sensus tetapi tidak tahu cara terbaik untuk melakukannya menggunakan Javascript (saya tidak pernah menggunakan Python) atau alat baris perintah? Ada saran?

pengguna63623
sumber
2
Dengan menggunakan PostGIS, Anda dapat dengan mudah memuat CSV ke dalam basis data, lalu mengonversi kolom lat / lon ke geometri dan Anda akan selesai! Kemudian Anda dapat melakukan semua peringkasan / agregasi berdasarkan blok sensus yang Anda inginkan di PostGIS ... apa yang Anda lakukan dengan Turf?
DPSSpatial
2
Hai, selamat datang di GIS stackexchange. Saya sarankan Anda melihat PostgreSQL / PostGIS, mesin basis data yang diaktifkan secara spasial yang berinteraksi dengan baik dengan QGIS. Setelah data Anda dimuat ke dalam basis data, akan relatif sepele untuk bergabung dan menggabungkan, misalnya, trus sensus, atau melakukan pengelompokan di atasnya.
raphael
Saya pikir komentar Raphael adalah 'jawaban' terbaik sejauh ini. 1 juta poin sepele untuk bekerja dengan begitu mereka dimuat ke PostGIS dan alat antarmuka QGIS-PostGIS sangat baik.
Alexander
Terima kasih @mapBaker dan @raphael! Saya tidak berpikir tentang menggunakan Postgis seperti itu. Saya mengimpor CSV di QGUS. Apakah ada cara untuk mengubahnya ke PostGIS?
user63623
@raphael, apakah Anda tahu cara yang baik untuk mengkonversi X, Y ke geometri di PostGIS ketika ada> 1 juta catatan? Saya sudah mencoba mereplikasi ini menggunakan metode ST_MakePoint, tetapi memori gagal - bisakah ST_GeomFromText menggunakan kolom X dan Y yang ada?
DPSSpatial

Jawaban:

9

Saya akan merekomendasikan menggunakan PostgreSQL / PostGIS, karena didukung secara native oleh QGIS, memiliki beberapa fungsi built-in yang berguna untuk bergabung dengan data spasial lainnya (seperti saluran sensus), dan penggunaan database harus membatasi masalah memori dengan dataset besar. Set langkah yang saya rekomendasikan ada di bawah ini. Untuk menjalankan perintah SQL Anda bisa menggunakan PGAdmin atau QGIS, yang pertama akan memberi Anda lebih banyak kesalahan informatif pada kueri, yang terakhir akan memungkinkan Anda memuat hasil kueri sebagai lapisan pada peta. Untuk mengakses yang terakhir, masuk Database > DB Manager > DB Managerdan klik tombol kedua.

  1. Mulailah mengatur PostGIS , juga instal cepat
  2. Buat tabel di database Anda menggunakan CREATE TABLEperintah ( contoh ) di QGIS SQL Window atau di PGAdmin's SQL Window
  3. Impor csv Anda dengan perintah COPY sql atau fungsi impor bawaan PGAdmin dengan mengklik kanan tabel Anda di PGAdmin dan mengklik Import...(yang terakhir ini bisa rumit jadi saya akan merekomendasikan COPY untuk kumpulan data yang lebih besar).
  4. Tambahkan kolom geometri ke tabel Anda dengan mengeksekusi SQL berikut di PGAdmin atau jendela QGIS SQL.

    ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);
    
  5. Buat titik geometri menggunakan sesuatu seperti

    UPDATE yourtable SET geom = ST_SetSRID(ST_MakePoint( x, y), 4326);
    
  6. Tampilkan subset data dengan menggunakan SELECTpernyataan dengan sesuatu sepertiLIMIT 50000

  7. Atau bergabung dengan data sensus dengan sesuatu seperti

    SELECT c.gid, c.geom
    DARI sensus c
    INNER GABUNGKAN data Anda PADA ST_Within (yourdata.geom, c.geom)

Referensi fungsi:
ST_Within
ST_MakePoint
ST_SetSRID

raphael
sumber
Terima kasih balasannya. Saya mencoba langkah 3 tetapi saya tidak dapat mengedit tabel di QGIS. Apakah ada cara lain untuk menambahkan kolom tanpa menggunakan plugin?
user63623
@ user63623 Saya memperbarui jawaban saya untuk memasukkan langkah ekstra yang harus mengatasi masalah Anda.
raphael
terima kasih saya pikir ada langkah yang hilang antara 1 dan 2. Ketika Anda mengimpor lapisan csv ke QGIS Anda perlu menyimpannya sebagai file shp untuk membuat database. Baik? Itu membeku ketika saya mencobanya. Saya juga mencoba menggunakan PGAdmin tetapi saya tidak dapat menemukan fungsi impor.
user63623
Di PGAdmin pertama-tama Anda harus MENCIPTAKAN tabel Anda, menggunakan kueri sql seperti ini: stackoverflow.com/questions/9826833/create-table-in-postgresql , dengan semua kolom Anda dari csv didefinisikan dengan benar. Kemudian Anda dapat mengklik kanan pada tablename> Import...untuk mengakses panduan Impor, atau menggunakan perintah COPY postgresql.org/docs/current/static/sql-copy.html Saya akan memperbarui jawabannya
raphael
3

Saya baru-baru ini bekerja dengan dataset 1,4 juta poin yang diimpor dari CSV. Saya memastikan untuk menghapus bidang yang tidak relevan di csv. Ini bekerja dengan baik untuk saya, meskipun beberapa proses membutuhkan sedikit waktu untuk dieksekusi. (QGIS 2.12, 64 bit Windows 7, 8 Gb RAM)

HDunn
sumber
2

Seorang calon R fwiw, dalam pseudocode:

library(rgdal) ## for spatial export
library(readr) ## for fast file read

x <- read_csv("file.csv") 
names(x)  ## some as yet unknown columns

coordinates(x) <- c("x", "y")  ## your coordinate names may be different

writeOGR(x, ".", layer = "filepoints", driver = "MapInfo File")

Ini akan memberi Anda filepoints.tab di direktori kerja yang dapat Anda baca dengan QGIS. Atau pilih "ESRI Shapefile" untuk membuat filepoints.shp, atau format apa pun yang Anda butuhkan. QGIS menggunakan GDAL seperti halnya rgdal, jadi ada banyak tumpang tindih. Ada mekanisme Python analog.

Karena Anda tidak memiliki metadata, Anda dapat memiliki set setelah menetapkan koordinat (x) untuk mengatur proj4string (x) <- CRS ("+ proj = something + etc"), tetapi kami hanya dapat menebak data Anda.

mdsumner
sumber