mapeando mais de um milhão de pontos usando o QGIS

9

Estou tentando mapear um CSV com mais de um milhão de pontos lat / lon nos EUA sem metadados. Nunca tentei mapear tantos dados e quero saber quais etapas devo seguir. Sei que há muitos dados para o QGIS, então tentei dividi-los em 100.000 linhas de CSVs, mas obtive muitos arquivos com os quais não sabia o que fazer. Eu estou pensando que talvez seja melhor agregar os pontos por bloco de censo, mas não sei a melhor maneira de fazer isso usando Javascript (eu nunca usei Python) ou ferramentas de linha de comando? Alguma sugestão?

user63623
fonte
2
Usando o PostGIS, você pode facilmente carregar o CSV no banco de dados, depois converter as colunas lat / lon em geometria e pronto! Então você pode fazer todo o resumo / agregação por bloco de censo que deseja no PostGIS ... o que você está procurando fazer com o Turf?
usar o seguinte código
2
Olá, seja bem-vindo ao GIS stackexchange. Eu recomendo que você dê uma olhada no PostgreSQL / PostGIS, um mecanismo de banco de dados espacialmente ativado que faz uma interface agradável com o QGIS. Depois que seus dados são carregados em um banco de dados, será relativamente simples ingressar e agregar em, por exemplo, setores censitários ou executar agrupamentos nele.
Raphael
Eu acho que o comentário de Raphael é a melhor 'resposta' até agora. É fácil trabalhar com 1 milhão de pontos depois que eles são carregados no PostGIS e as ferramentas de interface QGIS-PostGIS são muito boas.
Alexander
Obrigado @mapBaker e @raphael! Eu não tinha pensado em usar o Postgis assim. Eu importei o CSV no QGUS. Existe alguma maneira de converter isso para PostGIS?
user63623
@raphael Você conhece uma boa maneira de converter X, Y em geometria no PostGIS quando houver> 1 milhão de registros? Eu tentei replicar isso usando um método ST_MakePoint, mas a memória foi bombardeada - ST_GeomFromText pode usar colunas X e Y existentes?
criar o seu alerta

Respostas:

9

Eu recomendaria o uso do PostgreSQL / PostGIS, uma vez que é suportado nativamente pelo QGIS, possui algumas funções internas úteis para se juntar a outros dados espaciais (como setores censitários), e o uso de um banco de dados deve limitar problemas de memória com grandes conjuntos de dados. Meu conjunto de etapas recomendado está abaixo. Para executar comandos SQL, você pode usar o PGAdmin ou o QGIS; o primeiro fornecerá erros mais informativos nas consultas, o último permitirá que você carregue os resultados das consultas como camadas em um mapa. Para acessar o último, acesse Database > DB Manager > DB Managere clique no segundo botão.

  1. Comece a configurar o PostGIS , também instaladores rápidos
  2. Crie uma tabela no seu banco de dados usando o CREATE TABLEcomando ( exemplo ) na Janela SQL do QGIS ou na Janela SQL do PGAdmin
  3. Importe seu csv com um comando COPY sql ou com a função de importação incorporada do PGAdmin clicando com o botão direito do mouse na sua tabela no PGAdmin e clicando em Import...(este último pode ser delicado, por isso recomendo COPY para conjuntos de dados maiores).
  4. Adicione uma coluna de geometria à sua tabela executando o seguinte SQL na janela PGAdmin ou QGIS SQL.

    ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);
    
  5. Crie as geometrias de pontos usando algo como

    UPDATE yourtable SET geom = ST_SetSRID(ST_MakePoint( x, y), 4326);
    
  6. Exiba um subconjunto de dados usando uma SELECTinstrução com algo comoLIMIT 50000

  7. Ou junte-se aos dados do censo com algo como

    SELECIONE c.gid, c.geom
    DO censo c
    INNER JOIN yourdata ON ST_Within (yourdata.geom, c.geom)

Referências de função:
ST_Within
ST_MakePoint
ST_SetSRID

raphael
fonte
Obrigado pela resposta. Eu tentei a etapa 3, mas não consigo editar a tabela no QGIS. Existe outra maneira de adicionar uma coluna sem usar um plugin?
user63623
@ user63623 Atualizei minha resposta para incluir uma etapa extra que deve solucionar seu problema.
Raphael
obrigado Eu acho que há uma etapa que falta entre 1 e 2. Quando você importa a camada CSV para o QGIS, precisa salvá-la como um arquivo shp para criar um banco de dados. Direita? Ele congela quando eu tento isso. Também tentei usar o PGAdmin, mas não consigo encontrar a função de importação.
user63623
No PGAdmin, você primeiro teria que CRIAR sua tabela, usando uma consulta sql como esta: stackoverflow.com/questions/9826833/create-table-in-postgresql , com todas as suas colunas do csv definidas corretamente. Em seguida, clique com o botão direito do mouse no nome da tabela> Import...para acessar o assistente de Importação ou use um comando COPY postgresql.org/docs/current/static/sql-copy.html Eu atualizarei a resposta
raphael
3

Recentemente, trabalhei com um conjunto de dados de 1,4 milhão de pontos importados de um CSV. Certifiquei-me de excluir quaisquer campos irrelevantes no csv. Funcionou bem para mim, apesar de alguns processos demorarem um pouco para serem executados. (QGIS 2.12, Windows 7 de 64 bits, 8 GB de RAM)

HDunn
fonte
2

Um candidato R fwiw, no 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")

Isso fornecerá a você um filepoints.tab no diretório de trabalho que você pode ler com o QGIS. Ou escolha "ESRI Shapefile" para criar um filepoints.shp ou qualquer formato que você precisar. O QGIS usa o GDAL da mesma forma que o rgdal, por isso há muita sobreposição. Existem mecanismos análogos do Python.

Como você não possui nenhum metadado, é possível definir um conjunto após atribuir coordenadas (x) para definir proj4string (x) <- CRS ("+ proj = algo + etc"), mas só podemos adivinhar seus dados.

mdsumner
fonte