Kartierung von über einer Million Punkten mit QGIS

9

Ich versuche, eine CSV mit über einer Million Lat / Lon-Punkten in den USA ohne Metadaten abzubilden. Ich habe noch nie versucht, so viele Daten abzubilden, und möchte wissen, welche Schritte ich unternehmen sollte. Ich weiß, dass es zu viele Daten für QGIS sind, also habe ich versucht, sie in CSVs mit 100.000 Zeilen aufzuteilen, habe dann aber viele Dateien erhalten, mit denen ich nicht umgehen konnte. Ich denke, es ist vielleicht am besten, die Punkte nach Zensusblock zu aggregieren, aber Sie wissen nicht, wie Sie dies am besten mit Javascript (ich habe noch nie Python verwendet) oder Befehlszeilentools tun können. Irgendwelche Vorschläge?

user63623
quelle
2
Mit PostGIS können Sie die CSV einfach in die Datenbank laden und dann die Lat / Lon-Spalten in Geometrie konvertieren, und schon sind Sie fertig! Dann können Sie in PostGIS alle gewünschten Zusammenfassungen / Aggregationen nach Volkszählungsblöcken durchführen. Was möchten Sie mit Turf tun?
DPSSpatial
2
Hallo, willkommen bei GIS stackexchange. Ich würde empfehlen, dass Sie sich PostgreSQL / PostGIS ansehen, eine räumlich aktivierte Datenbank-Engine, die sich gut mit QGIS verbinden lässt. Sobald Ihre Daten in eine Datenbank geladen wurden, ist es relativ trivial, sie beispielsweise zu Volkszählungsdaten zusammenzufassen und zu aggregieren oder Clustering durchzuführen.
Raphael
Ich denke, Raphaels Kommentar ist die bisher beste "Antwort". Es ist trivial, mit 1 Million Punkten zu arbeiten, sobald sie in PostGIS geladen sind, und die QGIS-PostGIS-Schnittstellentools sind sehr gut.
Alexander
Danke @mapBaker und @raphael! Ich hatte nicht daran gedacht, Postgis so zu verwenden. Ich habe die CSV in QGUS importiert. Gibt es überhaupt eine Möglichkeit, das in PostGIS umzuwandeln?
user63623
@raphael Kennen Sie eine gute Möglichkeit, X, Y in PostGIS in Geometrie zu konvertieren, wenn> 1 Million Datensätze vorhanden sind? Ich habe versucht, dies mit einer ST_MakePoint-Methode zu replizieren, aber der Speicher ist ausgebombt. Kann ST_GeomFromText vorhandene X- und Y-Spalten verwenden?
DPSSpatial

Antworten:

9

Ich würde die Verwendung von PostgreSQL / PostGIS empfehlen, da es von QGIS nativ unterstützt wird, einige praktische integrierte Funktionen zum Verknüpfen mit anderen räumlichen Daten (wie Zensusdaten) enthält und die Verwendung einer Datenbank Speicherprobleme bei großen Datenmengen einschränken sollte. Meine empfohlenen Schritte sind unten aufgeführt. Um SQL-Befehle auszuführen, können Sie entweder PGAdmin oder QGIS verwenden. Ersteres führt zu informativeren Fehlern bei Abfragen. Mit letzterem können Sie die Ergebnisse von Abfragen als Layer auf einer Karte laden. Um auf Letzteres zuzugreifen, gehen Sie zu Database > DB Manager > DB Managerund klicken Sie auf die zweite Schaltfläche.

  1. Beginnen Sie mit der Einrichtung von PostGIS , auch von Schnellinstallationsprogrammen
  2. Erstellen Sie eine Tabelle in Ihrer Datenbank mit dem CREATE TABLEBefehl ( Beispiel ) entweder im QGIS SQL-Fenster oder im SQL-Fenster von PGAdmin
  3. Importieren Sie Ihre CSV entweder mit einem COPY-SQL-Befehl oder der integrierten Importfunktion von PGAdmin, indem Sie mit der rechten Maustaste auf Ihre Tabelle in PGAdmin klicken und auf klicken Import...(letzteres kann schwierig sein, daher würde ich COPY für größere Datenmengen empfehlen).
  4. Fügen Sie Ihrer Tabelle eine Geometriespalte hinzu, indem Sie das folgende SQL entweder in PGAdmin oder im QGIS SQL-Fenster ausführen.

    ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);
    
  5. Erstellen Sie die Punktgeometrien mit so etwas wie

    UPDATE yourtable SET geom = ST_SetSRID(ST_MakePoint( x, y), 4326);
    
  6. Zeigen Sie eine Teilmenge von Daten an, indem Sie eine SELECTAnweisung mit so etwas wie verwendenLIMIT 50000

  7. Oder nehmen Sie an Volkszählungsdaten mit so etwas teil

    SELECT c.gid, c.geom
    AUS Zählung c
    INNER JOIN yourdata ON ST_Within (yourdata.geom, c.geom)

Funktionsreferenzen:
ST_Within
ST_MakePoint
ST_SetSRID

Raphael
quelle
Danke für die Antwort. Ich habe Schritt 3 versucht, kann die Tabelle jedoch nicht in QGIS bearbeiten. Gibt es eine andere Möglichkeit, eine Spalte hinzuzufügen, ohne ein Plugin zu verwenden?
user63623
@ user63623 Ich habe meine Antwort aktualisiert und einen zusätzlichen Schritt hinzugefügt, der Ihr Problem beheben soll.
Raphael
danke Ich denke, es fehlt ein Schritt zwischen 1 und 2. Wenn Sie die CSV-Ebene in QGIS importieren, müssen Sie sie als SHP-Datei speichern, um eine Datenbank zu erstellen. Richtig? Es friert ein, wenn ich das versuche. Ich habe auch versucht, PGAdmin zu verwenden, aber ich kann die Importfunktion nicht finden.
user63623
In PGAdmin müssten Sie zuerst Ihre Tabelle mit einer SQL-Abfrage wie der folgenden erstellen : stackoverflow.com/questions/9826833/create-table-in-postgresql , wobei alle Ihre Spalten aus der CSV ordnungsgemäß definiert sind. Dann können Sie mit der rechten Maustaste auf den Tabellennamen> klicken, um auf den Importassistenten Import...zuzugreifen, oder einen COPY-Befehl verwenden. Postgresql.org/docs/current/static/sql-copy.html Ich werde die Antwort aktualisieren
raphael
3

Ich habe kürzlich mit einem Datensatz von 1,4 Millionen Punkten gearbeitet, die aus einer CSV importiert wurden. Ich habe darauf geachtet, alle irrelevanten Felder in der CSV zu löschen. Es hat gut funktioniert, obwohl die Ausführung einiger Prozesse einige Zeit in Anspruch nahm. (QGIS 2.12, 64 Bit Windows 7, 8 GB RAM)

HDunn
quelle
2

Ein R-Kandidat fwiw im 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")

Dadurch erhalten Sie eine filepoints.tab im Arbeitsverzeichnis, die Sie mit QGIS lesen können. Oder wählen Sie "ESRI Shapefile", um eine filepoints.shp zu erstellen, oder welches Format auch immer Sie benötigen. QGIS verwendet GDAL ähnlich wie rgdal, daher gibt es viele Überlappungen. Es gibt analoge Python-Mechanismen.

Da Sie keine Metadaten haben, können Sie nach dem Zuweisen von Koordinaten (x) einen Satz haben, um proj4string (x) <- CRS ("+ proj = etwas + etc") zu setzen, aber wir können nur für Ihre Daten raten.

mdsumner
quelle