cartographie de plus d'un million de points à l'aide de QGIS

9

J'essaie de cartographier un CSV avec plus d'un million de points lat / lon aux États-Unis sans métadonnées. Je n'ai jamais essayé de mapper autant de données et je veux savoir quelles mesures prendre. Je sais que c'est trop de données pour QGIS, j'ai donc essayé de les diviser en 100 000 CSV de ligne, mais j'ai ensuite obtenu beaucoup de fichiers dont je ne savais pas quoi faire. Je pense qu'il serait préférable d'agréger les points par bloc de recensement, mais je ne sais pas la meilleure façon de le faire en utilisant Javascript (je n'ai jamais utilisé Python) ou des outils en ligne de commande? Aucune suggestion?

user63623
la source
2
En utilisant PostGIS, vous pouvez facilement charger le CSV dans la base de données, puis convertir les colonnes lat / lon en géométrie et vous avez terminé! Ensuite, vous pouvez faire tout le résumé / agrégat par bloc de recensement que vous voulez dans PostGIS ... que cherchez-vous à faire avec Turf?
DPSSpatial
2
Bonjour, bienvenue sur GIS stackexchange. Je vous recommande de jeter un œil à PostgreSQL / PostGIS, un moteur de base de données activé spatialement qui s'interface bien avec QGIS. Une fois vos données chargées dans une base de données, il sera relativement simple de les rejoindre et de les agréger, par exemple, dans les secteurs de recensement, ou d'effectuer des regroupements dessus.
raphael
Je pense que le commentaire de Raphael est la meilleure «réponse» jusqu'à présent. Il est facile de travailler avec 1 million de points une fois qu'ils sont chargés dans PostGIS et que les outils d'interface QGIS-PostGIS sont très bons.
Alexander
Merci @mapBaker et @raphael! Je n'avais pas pensé à utiliser Postgis comme ça. J'ai importé le CSV dans QGUS. Est-il possible de convertir cela en PostGIS?
user63623
@raphael connaissez-vous un bon moyen de convertir X, Y en géométrie dans PostGIS quand il y a> 1 million d'enregistrements? J'ai essayé de reproduire cela en utilisant une méthode ST_MakePoint, mais la mémoire a explosé - ST_GeomFromText peut-il utiliser les colonnes X et Y existantes?
DPSSpatial

Réponses:

9

Je recommanderais d'utiliser PostgreSQL / PostGIS, car il est pris en charge nativement par QGIS, dispose de quelques fonctions intégrées pratiques pour se joindre à d'autres données spatiales (comme les secteurs de recensement), et l'utilisation d'une base de données devrait limiter les problèmes de mémoire avec les grands ensembles de données. Mon ensemble d'étapes recommandé est ci-dessous. Pour exécuter des commandes SQL, vous pouvez utiliser PGAdmin ou QGIS, le premier vous donnera des erreurs plus informatives sur les requêtes, le second vous permettra de charger les résultats des requêtes sous forme de couches sur une carte. Pour accéder à ce dernier, allez sur Database > DB Manager > DB Manageret cliquez sur le deuxième bouton.

  1. Commencez à configurer PostGIS , également des installateurs rapides
  2. Créez une table dans votre base de données à l'aide de la CREATE TABLEcommande ( exemple ) dans la fenêtre SQL QGIS ou dans la fenêtre SQL de PGAdmin
  3. Importez votre csv avec une commande COPY sql ou la fonction d'importation intégrée de PGAdmin en cliquant avec le bouton droit sur votre table dans PGAdmin et en cliquant sur Import...(cette dernière peut être délicate, je recommanderais donc COPY pour des jeux de données plus volumineux).
  4. Ajoutez une colonne de géométrie à votre table en exécutant le SQL suivant dans PGAdmin ou dans la fenêtre SQL de QGIS.

    ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);
    
  5. Créez les géométries de points en utilisant quelque chose comme

    UPDATE yourtable SET geom = ST_SetSRID(ST_MakePoint( x, y), 4326);
    
  6. Afficher un sous-ensemble de données en utilisant une SELECTinstruction avec quelque chose commeLIMIT 50000

  7. Ou joignez-vous aux données du recensement avec quelque chose comme

    SELECT c.gid, c.geom
    FROM Census c
    INNER JOIN yourdata ON ST_Within (yourdata.geom, c.geom)

Références de fonction:
ST_Within
ST_MakePoint
ST_SetSRID

raphael
la source
Merci pour la réponse. J'ai essayé l'étape 3 mais je ne peux pas modifier la table dans QGIS. Existe-t-il une autre façon d'ajouter une colonne sans utiliser de plugin?
user63623
@ user63623 J'ai mis à jour ma réponse pour inclure une étape supplémentaire qui devrait résoudre votre problème.
raphael
merci je pense qu'il manque une étape entre 1 et 2. Lorsque vous importez une couche csv dans QGIS, vous devez l'enregistrer en tant que fichier shp pour créer une base de données. Droite? Cela gèle quand j'essaye. J'ai également essayé d'utiliser PGAdmin mais je ne trouve pas la fonction d'importation.
user63623
Dans PGAdmin, vous devez d'abord CRÉER votre table, en utilisant une requête SQL comme celle-ci: stackoverflow.com/questions/9826833/create-table-in-postgresql , avec toutes vos colonnes de la csv correctement définies. Ensuite, vous pouvez cliquer avec le bouton droit sur le nom de la table> Import...pour accéder à l'assistant d'importation, ou utiliser une commande COPIER postgresql.org/docs/current/static/sql-copy.html Je mettrai à jour la réponse
raphael
3

J'ai récemment travaillé avec un ensemble de données de 1,4 million de points importés d'un CSV. Je me suis assuré de supprimer tous les champs non pertinents dans le csv. Cela a bien fonctionné pour moi, même si certains processus ont pris un peu de temps à exécuter. (QGIS 2.12, 64 bits Windows 7, 8 Go de RAM)

HDunn
la source
2

Un candidat R fwiw, en 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")

Cela vous donnera un fichier pointspoint.tab dans le répertoire de travail que vous pouvez lire avec QGIS. Ou choisissez "ESRI Shapefile" pour créer un fichier points.shp, ou quel que soit le format dont vous avez besoin. QGIS utilise GDAL un peu comme rgdal, il y a donc beaucoup de chevauchements. Il existe des mécanismes Python analogues.

Puisque vous n'avez pas de métadonnées, vous pouvez avoir un ensemble après avoir attribué des coordonnées (x) pour définir proj4string (x) <- CRS ("+ proj = quelque chose + etc"), mais nous ne pouvons que deviner vos données.

mdsumner
la source