lập bản đồ trên một triệu điểm bằng cách sử dụng QGIS


9

Tôi đang cố gắng lập bản đồ CSV với hơn một triệu điểm lat / lon ở Hoa Kỳ không có siêu dữ liệu. Tôi chưa bao giờ thử lập bản đồ nhiều dữ liệu này và muốn biết tôi nên thực hiện các bước nào. Tôi biết đó là quá nhiều dữ liệu cho QGIS vì vậy tôi đã thử chia nó thành 100.000 dòng CSV nhưng sau đó có rất nhiều tệp mà tôi không biết phải làm gì. Tôi nghĩ có lẽ tốt nhất là tổng hợp các điểm theo khối điều tra dân số nhưng không biết cách tốt nhất để làm điều đó bằng Javascript (Tôi chưa bao giờ sử dụng Python) hoặc các công cụ dòng lệnh? Bất kỳ đề xuất?


2
Sử dụng PostGIS, bạn có thể dễ dàng tải CSV vào cơ sở dữ liệu, sau đó chuyển đổi các cột lat / lon thành hình học và bạn đã hoàn tất! Sau đó, bạn có thể thực hiện tất cả việc tóm tắt / tổng hợp theo khối điều tra dân số mà bạn muốn trong PostGIS ... bạn đang muốn làm gì với Turf?
DPSSpatial

2
Xin chào, chào mừng bạn đến với stackexchange. Tôi khuyên bạn nên xem PostgreSQL / PostGIS, một công cụ cơ sở dữ liệu được kích hoạt không gian, giao diện độc đáo với QGIS. Khi dữ liệu của bạn được tải vào cơ sở dữ liệu, việc tham gia và tổng hợp theo, chẳng hạn như các vùng điều tra dân số hoặc để thực hiện phân cụm trên nó sẽ tương đối tầm thường.
raphael

Tôi nghĩ bình luận của Raphael là "câu trả lời" tốt nhất cho đến nay. 1 triệu điểm là không đáng kể để làm việc với một khi chúng được tải vào PostGIS và các công cụ giao diện QGIS-PostGIS rất tốt.
Alexander

Cảm ơn @mapBaker và @raphael! Tôi đã không nghĩ về việc sử dụng Postgis như thế. Tôi đã nhập CSV trong QGUS. Có cách nào để chuyển đổi nó thành PostGIS không?
dùng63623

@raphael Bạn có biết một cách hay để chuyển đổi X, Y thành hình học trong PostGIS khi có> 1 triệu bản ghi? Tôi đã cố gắng sao chép điều này bằng phương pháp ST_MakePoint, nhưng bộ nhớ bị đánh bom - ST_GeomFromText có thể sử dụng các cột X và Y hiện tại không?
DPSSpatial

Câu trả lời:


9

Tôi khuyên bạn nên sử dụng PostgreSQL / PostGIS, vì nó được hỗ trợ bởi QGIS, có một số chức năng tích hợp sẵn để kết hợp với dữ liệu không gian khác (như vùng điều tra dân số) và việc sử dụng cơ sở dữ liệu sẽ hạn chế các vấn đề về bộ nhớ với bộ dữ liệu lớn. Bộ các bước được đề nghị của tôi là dưới đây. Để thực thi các lệnh SQL, bạn có thể sử dụng PGAdmin hoặc QGIS, cái trước sẽ cung cấp cho bạn nhiều lỗi thông tin hơn về các truy vấn, cái sau sẽ cho phép bạn tải kết quả của các truy vấn dưới dạng các lớp trên bản đồ. Để truy cập vào sau, đi đến Database > DB Manager > DB Managervà bấm vào nút thứ hai.

  1. Bắt đầu thiết lập PostGIS , cũng là trình cài đặt nhanh
  2. Tạo một bảng trong cơ sở dữ liệu của bạn bằng cách sử dụng CREATE TABLElệnh ( ví dụ ) trong Cửa sổ SQL QGIS hoặc trong Cửa sổ SQL của PGAdmin
  3. Nhập csv của bạn bằng lệnh COPY sql hoặc chức năng nhập được tích hợp sẵn của PGAdmin bằng cách nhấp chuột phải vào bảng của bạn trong PGAdmin và nhấp vào Import...(cái này có thể rất tinh tế vì vậy tôi khuyên dùng COPY cho các bộ dữ liệu lớn hơn).
  4. Thêm một cột hình học vào bảng của bạn bằng cách thực thi SQL sau trong PGAdmin hoặc cửa sổ SQLISIS.

    ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);
    
  5. Tạo hình học điểm bằng cách sử dụng một cái gì đó như

    UPDATE yourtable SET geom = ST_SetSRID(ST_MakePoint( x, y), 4326);
    
  6. Hiển thị một tập hợp con dữ liệu bằng cách sử dụng một SELECTcâu lệnh với nội dung nhưLIMIT 50000

  7. Hoặc tham gia dữ liệu điều tra dân số với nội dung như

    CHỌN c.gid, c.geom
    TỪ điều tra dân số c
    INNER THAM GIA yourdata TRÊN ST_Within (yourdata.geom, c.geom)

Tham khảo chức năng:
ST_Within
ST_MakePoint
ST_SetSRID


Cảm ơn vi đa trả lơi. Tôi đã thử bước 3 nhưng tôi không thể chỉnh sửa bảng trong QGIS. Có cách nào khác để thêm một cột mà không cần sử dụng plugin không?
dùng63623

@ user63623 Tôi đã cập nhật câu trả lời của mình để bao gồm một bước bổ sung cần giải quyết vấn đề của bạn.
raphael

cảm ơn tôi nghĩ rằng có một bước bị thiếu trong khoảng từ 1 đến 2. Khi bạn nhập lớp csv vào QGIS, bạn cần lưu nó dưới dạng tệp shp để tạo cơ sở dữ liệu. Đúng? Nó đóng băng khi tôi thử điều đó mặc dù. Tôi cũng đã thử sử dụng PGAdmin nhưng tôi không thể tìm thấy chức năng nhập.
dùng63623

Trong PGAdmin, trước tiên bạn sẽ phải TẠO bảng của mình, sử dụng truy vấn sql như thế này: stackoverflow.com/questions/9826833/create-table-in-postgresql , với tất cả các cột của bạn từ csv được xác định đúng. Sau đó, bạn có thể nhấp chuột phải vào tablename> Import...để truy cập Trình hướng dẫn nhập hoặc sử dụng lệnh COPY postgresql.org/docs/civerse/static/sql-copy.html Tôi sẽ cập nhật câu trả lời
raphael

3

Gần đây tôi đã làm việc với bộ dữ liệu 1,4 triệu điểm được nhập từ CSV. Tôi chắc chắn xóa bất kỳ trường không liên quan trong csv. Nó hoạt động tốt với tôi, mặc dù một số quy trình mất một chút thời gian để thực hiện. (QGIS 2.12, Windows 7 bit 64, RAM 8 Gb)


2

Một ứng cử viên R fwiw, trong mã giả:

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

Điều này sẽ cung cấp cho bạn một filepoints.tab trong thư mục làm việc mà bạn có thể đọc với QGIS. Hoặc chọn "ESRI Shapefile" để tạo filepoints.shp hoặc bất kỳ định dạng nào bạn cần. QGIS sử dụng GDAL giống như rgdal, vì vậy có rất nhiều sự chồng chéo. Có các cơ chế Python tương tự.

Vì bạn không có bất kỳ siêu dữ liệu nào, bạn có thể có một bộ sau khi gán tọa độ (x) để đặt proj4 chuỗi (x) <- CRS ("+ proj = Something + etc") nhưng chúng tôi chỉ có thể đoán dữ liệu của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.