mappatura di oltre un milione di punti usando QGIS


9

Sto cercando di mappare un CSV con oltre un milione di punti lat / lon negli Stati Uniti senza metadati. Non ho mai provato a mappare così tanti dati e voglio sapere quali passi dovrei prendere. So che ci sono troppi dati per QGIS, quindi ho provato a suddividerli in CSV da 100.000 righe ma poi ho ottenuto molti file con i quali non sapevo cosa fare. Sto pensando che potrebbe essere meglio aggregare i punti per blocco censimento ma non conosci il modo migliore per farlo usando Javascript (non ho mai usato Python) o gli strumenti da riga di comando? Eventuali suggerimenti?


2
Utilizzando PostGIS puoi caricare facilmente il CSV nel database, quindi convertire le colonne lat / lon in geometria e il gioco è fatto! Quindi puoi fare tutto il riepilogo / aggregazione per blocco censimento che vuoi in PostGIS ... cosa stai cercando di fare con Turf?
DPSSpatial

2
Ciao, benvenuto in GEX StackExchange. Ti consiglierei di dare un'occhiata a PostgreSQL / PostGIS, un motore di database abilitato spazialmente che si interfaccia perfettamente con QGIS. Una volta caricati i dati in un database, sarà relativamente banale unirsi e aggregarsi, ad esempio, a censure o eseguirne il clustering.
Raffaele,

Penso che il commento di Raffaello sia la migliore 'risposta' finora. 1 milione di punti è banale con cui lavorare una volta caricati in PostGIS e gli strumenti di interfaccia QGIS-PostGIS sono molto buoni.
Alexander,

Grazie @mapBaker e @raphael! Non avevo pensato di usare Postgis in quel modo. Ho importato il CSV in QGUS. Esiste un modo per convertirlo in PostGIS?
user63623

@raphael conosci un buon modo per convertire X, Y in geometria in PostGIS quando ci sono> 1 milione di record? Ho provato a replicarlo usando un metodo ST_MakePoint, ma la memoria è esplosa: ST_GeomFromText può usare le colonne X e Y esistenti?
DPSSpatial

Risposte:


9

Consiglierei di utilizzare PostgreSQL / PostGIS, poiché è nativamente supportato da QGIS, ha alcune utili funzioni integrate da unire ad altri dati spaziali (come i tratti del censimento) e l'uso di un database dovrebbe limitare i problemi di memoria con set di dati di grandi dimensioni. La mia serie di passaggi consigliata è di seguito. Per eseguire comandi SQL puoi usare PGAdmin o QGIS, il primo ti darà più errori informativi sulle query, il secondo ti permetterà di caricare i risultati delle query come livelli su una mappa. Per accedere a quest'ultimo vai a Database > DB Manager > DB Managere fai clic sul secondo pulsante.

  1. Inizia a configurare PostGIS , anche programmi di installazione rapida
  2. Creare una tabella nel database usando il CREATE TABLEcomando ( esempio ) nella finestra QGIS SQL o nella finestra SQL di PGAdmin
  3. Importa il tuo csv con un comando sql COPY o con la funzione di importazione integrata di PGAdmin facendo clic con il tasto destro sulla tabella in PGAdmin e facendo clic su Import...(quest'ultimo può essere delicato, quindi consiglierei COPY per set di dati più grandi).
  4. Aggiungi una colonna geometrica alla tabella eseguendo il seguente SQL in PGAdmin o nella finestra QGIS SQL.

    ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);
    
  5. Crea le geometrie dei punti usando qualcosa di simile

    UPDATE yourtable SET geom = ST_SetSRID(ST_MakePoint( x, y), 4326);
    
  6. Visualizza un sottoinsieme di dati usando SELECTun'istruzione con qualcosa di simileLIMIT 50000

  7. O unisciti a censire i dati con qualcosa del genere

    SELEZIONA c.gid, c.geom
    FROM census c
    INNER JOIN yourdata ON ST_Within (yourdata.geom, c.geom)

Riferimenti funzione:
ST_Within
ST_MakePoint
ST_SetSRID


Grazie per la risposta. Ho provato il passaggio 3 ma non riesco a modificare la tabella in QGIS. C'è un altro modo per aggiungere una colonna senza usare un plugin?
user63623

@ user63623 Ho aggiornato la mia risposta per includere un passaggio aggiuntivo che dovrebbe risolvere il problema.
Raffaello,

grazie credo che manchi un passaggio tra 1 e 2. Quando si importa un livello CSV in QGIS, è necessario salvarlo come file shp per creare un database. Giusto? Si blocca quando provo quello però. Ho anche provato a utilizzare PGAdmin ma non riesco a trovare la funzione di importazione.
user63623

In PGAdmin dovresti prima CREARE la tua tabella, usando una query sql come questa: stackoverflow.com/questions/9826833/create-table-in-postgresql , con tutte le tue colonne dal CSV correttamente definite. Quindi è possibile fare clic con il pulsante destro del mouse sul nome della scheda> Import...per accedere alla procedura guidata di importazione o utilizzare un comando COPY postgresql.org/docs/current/static/sql-copy.html Aggiornerò la risposta
raphael

3

Di recente ho lavorato con un set di dati di 1,4 milioni di punti importati da un CSV. Mi sono assicurato di eliminare tutti i campi irrilevanti nel CSV. Ha funzionato bene per me, anche se alcuni processi hanno richiesto un po 'di tempo per l'esecuzione. (QGIS 2.12, Windows 7 a 64 bit, RAM da 8 Gb)


2

Un candidato R prima della fine, in pseudocodice:

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

Questo ti darà un filepoints.tab nella directory di lavoro che puoi leggere con QGIS. Oppure scegli "ESRI Shapefile" per creare un filepoints.shp, o qualunque sia il formato che ti serve. QGIS usa GDAL in modo molto simile a rgdal, quindi ci sono molte sovrapposizioni. Esistono analoghi meccanismi Python.

Dato che non hai metadati, potresti averne un set dopo aver assegnato le coordinate (x) per impostare proj4string (x) <- CRS ("+ proj = qualcosa + ecc") ma possiamo solo indovinare per i tuoi dati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.