Chuyển đổi dữ liệu điểm thành khung dữ liệu có lưới để phân tích biểu đồ bằng R?


14

Tôi rất mới sử dụng dữ liệu GIS và chỉ có kinh nghiệm khiêm tốn với R. Tôi đã đọc về cách phân tích dữ liệu không gian bằng cách sử dụng sách PDF spatial-analyst.net, vì vậy tôi không thể mô tả được vấn đề của tôi và mọi người có thể đề xuất ý tưởng.

Tôi có một bộ dữ liệu với khoảng 2000 phép đo ở các tọa độ lat / long khác nhau, mặc dù tôi có thể sẽ chia nhỏ bộ dữ liệu này vì dữ liệu được thu thập trong 3 năm và điều kiện thay đổi theo thời gian. Hãy gọi biến được đo là "IP."

Tôi muốn tạo một bản đồ IP trong toàn bộ khu vực được đề cập bằng cách sử dụng Kriging hoặc một số phương pháp nội suy khác trên dữ liệu mẫu. Sau đó, tôi muốn tạo một biểu đồ đo lượng đất trong các thùng IP khác nhau. Tôi cũng sẽ cần tạo một biểu đồ cho thấy số lượng mẫu trong mỗi nhóm (lưu ý một mẫu có thể có IP thực tế cao hơn hoặc thấp hơn so với những gì dự đoán về vùng đất của nó).

Tôi làm theo cách tải dữ liệu vào SpatialPointsDataFrame và chạy phân tích phá hoại, trong đó tôi gặp khó khăn là làm thế nào để chuyển đổi dữ liệu đó thành một khung dữ liệu có lưới để tôi có thể thực hiện phân tích biểu đồ.

Bất kỳ đề xuất để chuyển đổi điểm thành lưới?

Câu trả lời:


12

Bạn nói đúng ... nó khá dễ! Gói "raster" có một số cách khá đơn giản để xử lý việc tạo và thao tác các raster.

library(maptools)
library(raster)

# Load your point shapefile (with IP values in an IP field):
pts <- readShapePoints("pts.shp")

# Create a raster, give it the same extent as the points
# and define rows and columns:

rast <- raster()
extent(rast) <- extent(pts) # this might be unnecessary
ncol(rast) <- 20 # this is one way of assigning cell size / resolution
nrow(rast) <- 20

# And then ... rasterize it! This creates a grid version 
# of your points using the cells of rast, values from the IP field:
rast2 <- rasterize(pts, rast, pts$IP, fun=mean) 

Bạn có thể chỉ định kích thước và độ phân giải lưới theo một số cách - hãy xem kỹ tài liệu gói raster.

Các giá trị của các ô raster từ rasterize có thể được tính bằng một hàm - 'mean' trong ví dụ trên. Hãy chắc chắn rằng bạn đặt cái này vào: nếu không nó chỉ sử dụng giá trị của IP từ điểm cuối cùng mà nó đi qua!


Từ một CSV:

pts <- read.csv("IP.csv")
coordinates(pts) <- ~lon+lat
rast <- raster(ncol = 10, nrow = 10)
extent(rast) <- extent(pts)
rasterize(pts, rast, pts$IP, fun = mean)

Này, điều này rất hữu ích, nhưng mã sẽ trông như thế nào nếu tôi bắt đầu với các điểm trong một CSV đơn giản với lat / long thay vì shapefile? Các cột trong CSV sẽ là IP, Lat, Long, v.v., v.v.
user1080253

Bạn đã chỉ ra rằng bạn đã tải dữ liệu vào SpatialPointsDataFrame ... đó chính xác ptslà những gì trong ví dụ của tôi ở trên. Chỉ cần chạy mã trên đối tượng SpatialPointsDataFrame của bạn!
Simbamangu

4
Câu trả lời này, mặc dù xuất sắc, dường như không giải quyết được những gì cần thiết. (Có vẻ như cung cấp một giải pháp cho gis.stackexchange.com/questions/20018 .) Thách thức là nội suy 2000 điểm hoặc hơn, không chỉ gán giá trị của chúng cho các ô raster. Cho rằng OP tuyên bố đã "chạy một phân tích giết người", câu hỏi này đưa ra để trích xuất các giá trị của một raster (giả sử r) để sử dụng trong một histthủ tục giống như, đó đơn giản chỉ là vấn đề của một biểu thức hist(getValues(r)).
whuber

@whuber - Có vẻ như OP hỏi "tôi gặp rắc rối ở đâu là làm thế nào để chuyển đổi dữ liệu đó thành một khung dữ liệu có lưới để tôi có thể phân tích biểu đồ ... bất kỳ đề xuất nào để chuyển đổi điểm thành lưới" như câu hỏi thực tế và biết cách để tạo SpatialPointsDataFrame và chạy phần mềm. Nhưng bạn đã đúng, nó dường như là một bản sao của 20018 (ngoại trừ đầu vào có lưới).
Simbamangu

Xin lỗi, @ user1080253 ... Tôi đọc 'lưới' là 'raster' không chính xác và không hữu ích cho việc giết người; xem ở đây để có ý tưởng tốt hơn về việc tạo lưới thông thường và nội suy dữ liệu của bạn vào lưới đó.
Simbamangu

3

Gói plotKML có một chức năng gọi là vect2rast . Hàm này về cơ bản mở rộng rasterizechức năng có sẵn trong gói raster. Ưu điểm của vect2rast; tuy nhiên, là nó không yêu cầu đầu vào từ phía người dùng, nghĩa là nó tự động xác định kích thước ô lưới và hộp giới hạn dựa trên các thuộc tính của tập dữ liệu đầu vào. Kích thước ô lưới được ước tính dựa trên mật độ / kích thước của các tính năng trong bản đồ ( nndistchức năng trong gói spatstat).

library(plotKML)
Rast2 <- vect2rast(pts)

# for large data sets use SAGA GIS:
Rast2 <- vect2rast(pts, method = "SAGA")
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.