mapeo de más de un millón de puntos usando QGIS

9

Estoy tratando de mapear un CSV con más de un millón de puntos lat / lon en los Estados Unidos sin metadatos. Nunca he intentado asignar tantos datos y quiero saber qué pasos debo seguir. Sé que son demasiados datos para QGIS, así que intenté dividirlos en CSV de 100,000 líneas, pero luego obtuve muchos archivos con los que no sabía qué hacer. Estoy pensando que podría ser mejor agregar los puntos por bloque de censo, pero no sé la mejor manera de hacerlo usando Javascript (nunca he usado Python) o herramientas de línea de comandos. ¿Alguna sugerencia?

usuario63623
fuente
2
¡Usando PostGIS puede cargar fácilmente el CSV en la base de datos, luego convertir las columnas lat / lon a geometría y ya está! Luego puede hacer todo el resumen / agregación por bloque de censo que desee en PostGIS ... ¿qué está buscando hacer con Turf?
DPSSpatial
2
Hola, bienvenido a GIS stackexchange. Recomiendo que eche un vistazo a PostgreSQL / PostGIS, un motor de base de datos espacialmente habilitado que interactúa muy bien con QGIS. Una vez que sus datos se cargan en una base de datos, será relativamente trivial unirse y agregarse a, por ejemplo, secciones censales, o realizar agrupaciones en ellas.
raphael
Creo que el comentario de Raphael es la mejor "respuesta" hasta ahora. Es trivial trabajar con 1 millón de puntos una vez que se cargan en PostGIS y las herramientas de interfaz QGIS-PostGIS son muy buenas.
Alexander
Gracias @mapBaker y @raphael! No había pensado en usar Postgis así. Importé el CSV en QGUS. ¿Hay alguna forma de convertir eso a PostGIS?
user63623
@raphael, ¿conoces una buena manera de convertir X, Y a geometría en PostGIS cuando hay> 1 millón de registros? Intenté replicar esto usando un método ST_MakePoint, pero la memoria se desvaneció. ¿Puede ST_GeomFromText usar las columnas X e Y existentes?
DPSSpatial

Respuestas:

9

Recomendaría usar PostgreSQL / PostGIS, ya que es compatible de forma nativa con QGIS, tiene algunas funciones integradas útiles para unirse con otros datos espaciales (como secciones censales), y el uso de una base de datos debería limitar los problemas de memoria con grandes conjuntos de datos. Mi conjunto de pasos recomendado está a continuación. Para ejecutar comandos SQL, puede usar PGAdmin o QGIS, el primero le dará más errores informativos en las consultas, el segundo le permitirá cargar los resultados de las consultas como capas en un mapa. Para acceder a este último, vaya Database > DB Manager > DB Managery haga clic en el segundo botón.

  1. Comience a configurar PostGIS , también instaladores rápidos
  2. Cree una tabla en su base de datos usando el CREATE TABLEcomando ( ejemplo ) en la ventana QGIS SQL o en la ventana SQL de PGAdmin
  3. Importe su csv con un comando COPY sql o la función de importación incorporada de PGAdmin haciendo clic derecho en su tabla en PGAdmin y haciendo clic en Import...(este último puede ser delicado, por lo que recomendaría COPIAR para conjuntos de datos más grandes).
  4. Agregue una columna de geometría a su tabla ejecutando el siguiente SQL en PGAdmin o en la ventana QGIS SQL.

    ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);
    
  5. Cree las geometrías de puntos usando algo como

    UPDATE yourtable SET geom = ST_SetSRID(ST_MakePoint( x, y), 4326);
    
  6. Mostrar un subconjunto de datos mediante el uso de una SELECTdeclaración con algo comoLIMIT 50000

  7. O únete a los datos del censo con algo como

    SELECCIONE c.gid, c.geom
    DESDE el censo c
    INTERIOR ÚNASE a sus datos EN ST_Within (yourdata.geom, c.geom)

Referencias de funciones:
ST_Within
ST_MakePoint
ST_SetSRID

Rafael
fuente
Gracias por la respuesta. Intenté el paso 3 pero no puedo editar la tabla en QGIS. ¿Hay otra forma de agregar una columna sin usar un complemento?
user63623
@ user63623 Actualicé mi respuesta para incluir un paso adicional que debería abordar su problema.
raphael
gracias Creo que falta un paso entre 1 y 2. Cuando importa la capa csv a QGIS, debe guardarla como un archivo shp para crear una base de datos. ¿Derecha? Sin embargo, se congela cuando lo intento. También intenté usar PGAdmin pero no puedo encontrar la función de importación.
user63623
En PGAdmin, primero tendría que CREAR su tabla, utilizando una consulta sql como esta: stackoverflow.com/questions/9826833/create-table-in-postgresql , con todas sus columnas del csv correctamente definidas. Luego puede hacer clic con el botón derecho en el nombre de la tabla> Import...para acceder al asistente de importación, o usar un comando COPY postgresql.org/docs/current/static/sql-copy.html Actualizaré la respuesta
raphael
3

Recientemente trabajé con un conjunto de datos de 1,4 millones de puntos importados de un CSV. Me aseguré de eliminar cualquier campo irrelevante en el csv. Funcionó bien para mí, aunque algunos procesos tardaron un poco en ejecutarse. (QGIS 2.12, Windows 7 de 64 bits, 8 Gb de RAM)

HDunn
fuente
2

Un candidato R fwiw, en pseudocódigo:

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

Esto le dará una pestaña filepoints.tab en el directorio de trabajo que puede leer con QGIS. O elija "ESRI Shapefile" para crear un filepoints.shp, o el formato que necesite. QGIS usa GDAL al igual que rgdal, por lo que hay mucha superposición. Existen mecanismos análogos de Python.

Como no tiene metadatos, puede tener un conjunto después de asignar coordenadas (x) para establecer proj4string (x) <- CRS ("+ proj = something + etc") pero solo podemos adivinar sus datos.

mdsumner
fuente