QGIS를 사용하여 백만 포인트 이상 매핑


9

메타 데이터가없는 미국에서 백만 개 이상의 위도 / 경도 포인트로 CSV를 매핑하려고합니다. 나는이 많은 데이터를 매핑하려고 시도하지 않았으며 내가 취해야 할 단계를 알고 싶습니다. QGIS에 대한 데이터가 너무 많다는 것을 알고 있으므로 100,000 줄 CSV로 분할하려고 시도했지만 어떻게 해야할지 모르는 많은 파일을 얻었습니다. 인구 조사 블록으로 포인트를 집계하는 것이 가장 좋을지 모르겠지만 Javascript (Python을 사용한 적이 없음) 또는 명령 줄 도구를 사용하여 가장 좋은 방법을 모르십니까? 어떤 제안?


2
PostGIS를 사용하면 CSV를 데이터베이스에 쉽게로드 한 다음 위도 / 경도 열을 지오메트리로 변환 할 수 있습니다! 그런 다음 PostGIS에서 원하는 센서스 블록으로 요약 / 집계 할 수 있습니다. Turf로 무엇을 하시겠습니까?
DPSSpatial

2
안녕하세요, GIS stackexchange에 오신 것을 환영합니다. QGIS와 잘 연동되는 공간적으로 활성화 된 데이터베이스 엔진 인 PostgreSQL / PostGIS를 살펴 보는 것이 좋습니다. 데이터가 데이터베이스에로드되면 센서스와 같이 조인하거나 집계하거나 클러스터링을 수행하는 것이 비교적 간단합니다.
raphael

라파엘의 의견은 지금까지 가장 좋은 '답변'이라고 생각합니다. 백만 포인트는 PostGIS에로드 된 후에는 사용하기 쉽지 않으며 QGIS-PostGIS 인터페이스 도구는 매우 좋습니다.
Alexander

@mapBaker와 @raphael 감사합니다! 나는 그런 Postgis를 사용하는 것에 대해 생각하지 못했습니다. QGUS에서 CSV를 가져 왔습니다. 어쨌든 PostGIS로 변환 할 수 있습니까?
user63623

@raphael 백만 개가 넘는 레코드가있을 때 PostGIS에서 X, Y를 기하학으로 변환하는 좋은 방법을 알고 있습니까? ST_MakePoint 메서드를 사용하여 이것을 복제하려고 시도했지만 메모리가 폭증되었습니다. ST_GeomFromText가 기존 X 및 Y 열을 사용할 수 있습니까?
DPSSpatial

답변:


9

PostgreSQL / PostGIS는 QGIS가 기본적으로 지원하고 다른 공간 데이터 (모두 센서스와 같은)와 결합 할 수있는 편리한 내장 함수가 있으므로 데이터베이스를 사용하면 큰 데이터 세트의 메모리 문제를 제한해야합니다. 권장되는 단계는 다음과 같습니다. SQL 명령을 실행하기 위해 PGAdmin 또는 QGIS 를 사용할 수 있습니다 . 전자는 쿼리에 대한 정보 오류를 더 많이 제공하고 후자는 쿼리 결과를 맵에 레이어로로드 할 수있게합니다. 후자에 액세스하려면 Database > DB Manager > DB Manager두 번째 버튼으로 이동 하십시오.

  1. PostGIS와 설정 시작 , 또한 빠른 설치를
  2. QGIS SQL 창 또는 PGAdmin의 SQL 창에서 CREATE TABLE명령 ( example )을 사용하여 데이터베이스에 테이블을 작성하십시오.
  3. PGAdmin에서 테이블을 마우스 오른쪽 버튼으로 클릭하고을 클릭하여 COPY sql 명령 또는 PGAdmin의 내장 가져 오기 기능을 사용 하여 csv를 가져옵니다 Import....
  4. PGAdmin 또는 QGIS SQL 창에서 다음 SQL을 실행하여 테이블에 기하 열을 추가하십시오.

    ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);
    
  5. 다음과 같은 것을 사용하여 포인트 지오메트리 생성

    UPDATE yourtable SET geom = ST_SetSRID(ST_MakePoint( x, y), 4326);
    
  6. SELECT다음과 같은 명령문을 사용하여 데이터의 서브 세트 표시LIMIT 50000

  7. 또는 다음과 같은 인구 조사 데이터에 가입하십시오.

    SELECT는 c.geom을 c.gid
    C 센서스
    INNER yourdata ST_Within에 ON을 JOIN (yourdata.geom, c.geom)

기능 참조 :
ST_Within
ST_MakePoint
ST_SetSRID


답장을 보내 주셔서 감사합니다. 3 단계를 시도했지만 QGIS에서 테이블을 편집 할 수 없습니다. 플러그인을 사용하지 않고 열을 추가하는 다른 방법이 있습니까?
user63623

@ user63623 문제를 해결하는 추가 단계를 포함하도록 답변을 업데이트했습니다.
raphael

덕분에 1과 2 사이에 누락 된 단계가 있다고 생각합니다. csv 레이어를 QGIS로 가져올 때 데이터베이스를 만들려면 shp 파일로 저장해야합니다. 권리? 그래도 시도하면 얼어 붙습니다. PGAdmin을 사용해 보았지만 가져 오기 기능을 찾을 수 없습니다.
user63623

PGAdmin에서는 먼저 다음과 같은 SQL 쿼리를 사용하여 테이블을 작성해야합니다. stackoverflow.com/questions/9826833/create-table-in-postgresql 은 CSS의 모든 열이 올바르게 정의되어 있습니다. 그런 다음 테이블 이름을 마우스 오른쪽 버튼으로 클릭 Import...하고 가져 오기 마법사에 액세스하거나 COPY 명령 postgresql.org/docs/current/static/sql-copy.html을 사용할 수 있습니다 . 답변을 업데이트하겠습니다
raphael

3

최근에 CSV에서 가져온 140 만 점의 데이터 세트로 작업했습니다. CSV에서 관련이없는 필드를 삭제했는지 확인했습니다. 일부 프로세스를 실행하는 데 약간의 시간이 걸리더라도 잘 작동했습니다. (QGIS 2.12, 64 비트 Windows 7, 8Gb RAM)


2

의사 코드의 R 후보 Fwiw :

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

QGIS로 읽을 수있는 작업 디렉토리에 filepoints.tab이 나타납니다. 또는 "ESRI Shapefile"을 선택하여 filepoints.shp 또는 필요한 형식을 만듭니다. QGIS는 rgdal처럼 GDAL을 사용하므로 겹치는 부분이 많습니다. 비슷한 파이썬 메커니즘이 있습니다.

메타 데이터가 없으므로 proj4string (x) <-CRS ( "+ proj = something + etc")를 설정하기 위해 좌표 (x)를 할당 한 후 설정할 수 있지만 데이터 만 추측 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.