使用spsample()对SpatialPolygonsDataFrame进行采样会导致seq.default()

时间:2016-07-31 21:33:30

标签: r gis geo sp

我正在尝试使用spsample()中的sp来使用GDAM中的SpatialPolygonsDataFrame对比利时境内的点进行采样。这会导致seq.default() - 调用错误。

be <- readRDS(gzcon(url('http://biogeo.ucdavis.edu/data/gadm2.8/rds/BEL_adm0.rds')))
spsample(be, type="hexagonal", cellsize=10)
  

seq.default(ll[1], ur[1] - dx/2, dx)中的错误:         错误签到'by'参数

str(be)

# Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
#   ..@ data       :'data.frame':   1 obs. of  68 variables:
#   .. ..$ OBJECTID     : int 1
# [snip]
#   .. ..$ LDC          : chr ""
#   ..@ polygons   :List of 1
#   .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#   .. .. .. ..@ Polygons :List of 3
#   .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#   .. .. .. .. .. .. ..@ labpt  : num [1:2] 3.37 51.36
# [snip]

进一步尝试:

  • 使用GDAM中的Shapefile版本会导致相同的错误。
  • 首先转换为SpatialPolygons - 对象会导致相同的错误。
packageVersion('sp')

# [1] ‘1.2.3’

1 个答案:

答案 0 :(得分:1)

您的cellsize太大了。

查看be

的边界框
bbox(be)
#         min      max
# x  2.555356  6.40787
# y 49.497215 51.50382

我不明白 以及spsample正在做什么,但是如果你看一下追溯你的错误的结果,你可以在代码中调试一下:< / p>

spsample(be, type="hexagonal", cellsize=10)
traceback()
# 9: stop("wrong sign in 'by' argument")
# 8: seq.default(ll[1], ur[1] - dx/2, dx)
# 7: seq(ll[1], ur[1] - dx/2, dx)
# 6: genHexGrid(dx, bb[, 1], bb[, 2])
# 5: hexGrid(bb, n = n, offset = offset, cellsize = cellsize)
# 4: sample.Spatial(as(x, "Spatial"), n_tot * (1 + its * 0.1), type = type, 
#        offset = offset, ...)
# 3: .local(x, n, type, ...)
# 2: spsample(be, type = "hexagonal", cellsize = 10)
# 1: spsample(be, type = "hexagonal", cellsize = 10)

您可以查看hexGrid / genHexGrid的代码(输入getAnywhere("hexGrid")或者,因为您可以通过输入{来猜测代码位于sp包中控制台上的{1}},您会看到sp:::hexGrid已分配给cellsize; dxur的{​​{1}}列; maxbbox(be)的{​​{1}}列。

因此,您尝试创建的ll序列实际上是:

min

因此,这是尝试创建一个从较高数字到较低数字的序列,以正数递增,这是不可能的。

相反,请尝试较小的bbox(be)

x

我能够通过x <- seq(2.555, 1.408, 10) 与谨慎使用cellsize相结合来解决这个问题。希望这个答案可以作为一个有用的调试工具箱。