使用R?将点数据转换为网格数据框以进行直方图分析。


14

我对使用GIS数据非常陌生,并且对R的使用不多。我一直在阅读有关如何使用space-analyst.net PDF书籍分析空间数据的知识,所以我并没有完全迷失,但我想我可以描述一下我的问题,人们可能会提出想法。

我有一个数据集,该数据集在不同的纬度/经度坐标下有约2000个测量值,尽管我可能会细分该数据集,因为数据是在3年内收集的,而且条件随时间而变化。我们将被测量的变量称为“ IP”。

我想在样本数据上使用Kriging或其他插值方法在整个问题区域创建IP映射。然后,我想创建一个直方图来测量各种IP桶中的土地数量。我还需要创建一个直方图,以显示每个存储桶中的样本数量(请注意,样本的实际IP可能比克里金预测的土地高或低)。

我遵循如何将数据加载到SpatialPointsDataFrame并运行kriging分析的方法,我遇到的麻烦是如何将数据转换为网格数据框,以便进行直方图分析。

有任何将点转换为网格的建议吗?

Answers:


12

您是对的……这很容易!“栅格”包具有一些处理创建和处理栅格的非常简单的方法。

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) 

您可以通过多种方式分配栅格大小和分辨率-仔细查看栅格数据包文档。

在上面的示例中,可以使用函数“均值”来计算来自栅格化的栅格像元的值。请确保将其放入:否则,它将仅使用从出现的最后一点起的IP值!


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

嘿,这非常有用,但是如果我以经/纬度而不是shapefile的简单CSV中的点开始,代码将如何显示?在CSV中的列是IP,纬度,经度,等,等,等
user1080253

您确实表明已经将数据加载到SpatialPointsDataFrame ...中,这正是pts我上面的示例中的内容。只需在SpatialPointsDataFrame对象上运行代码即可!
Simbamangu

4
该答复虽然很好,但似乎没有解决所需要的问题。(它似乎为gis.stackexchange.com/questions/20018提供了一种解决方案。)挑战在于内插 2000个左右的点,而不仅仅是将其值分配给栅格像元。鉴于OP声称已经进行了“ kriging分析”,因此这个问题归结为提取栅格(例如r)的值以用于类似hist过程,这只是一个类似的表达式hist(getValues(r))
ub

@whuber-好像OP询问“我遇到问题的地方是如何将数据转换为网格数据框,以便进行直方图分析……将点转换为网格的任何建议”,并知道如何制作SpatialPointsDataFrame并运行kriging。但是您是对的,它似乎是20018的副本(网格输入除外)。
Simbamangu

抱歉,@ user1080253 ...我将“ grid”读为“ raster”,这是不正确的,对kriging没有帮助;有关创建常规网格并将数据插值该网格的更好想法,请参见此处
Simbamangu

3

plotKML软件包具有一个称为的函数vect2rast。此功能基本上扩展rasterize了光栅包中可用的功能。的优势vect2rast; 但是,它是不需要用户方输入的,即它会根据输入数据集的属性自动确定网格单元格大小和边界框。网格单元的大小是根据地图nndist中要素的密度/大小(spatstat包中的功能)估算的。

library(plotKML)
Rast2 <- vect2rast(pts)

# for large data sets use SAGA GIS:
Rast2 <- vect2rast(pts, method = "SAGA")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.