【问题标题】:Building SpatialPolygonsDataFrame - Error: Object length mismatch构建 SpatialPolygonsDataFrame - 错误:对象长度不匹配
【发布时间】:2019-05-04 16:58:51
【问题描述】:

我正在尝试制作一个由 400 个正方形 (20x20) 组成的空间网格,每个正方形的长度为 0.5 度。我已经使用“?SpatialPolygonsDataFrame”建议的工作流程(即Polygon > Polygons > SpatialPolygons > SpatialPolygonsDataFrame)成功地制作了SpatialPolygons 对象。尽管 SpatialPolygons 对象中有 400 个元素,但在附加数据(“坐标”对象)的最后阶段,R 会返回错误

Error in SpatialPolygonsDataFrame(grid, coords) : Object length mismatch:
 grid has 1 Polygons objects, but coords has 400 rows

目标是将不同的属性数据附加到此网格以显示各种环境变量。在此示例中,我想简单地重新附加坐标数据,但无论我尝试组合的信息如何,这个问题都会持续存在。为什么 SpatialPolygon 只有 1 个对象?完整代码可在此处获得。

lat=c(rep(-10,20),rep(-10.5,20),rep(-11,20),rep(-11.5,20),rep(-12,20),rep(-12.5,20),rep(-13,20),rep(-13.5,20),rep(-14,20),rep(-14.5,20),
  rep(-15,20),rep(-15.5,20),rep(-16,20),rep(-16.5,20),rep(-17,20),rep(-17.5,20),rep(-18,20),rep(-18.5,20),rep(-19,20),rep(-19.5,20))
lon=rep(c(0,-0.5,-1,-1.5,-2,-2.5,-3,-3.5,-4,-4.5,-5,-5.5,-6,
      -6.5,-7,-7.5,-8,-8.5,-9,-9.5), 20)
coords=cbind(lon, lat)
coords=as.data.frame(coords)
coords$latlon=paste(coords$lat,coords$lon)
coords$latlon=factor(coords$latlon)

f=vector('list',400)
result=vector('list',400)

for (i in 1:length(f)) {
temp = matrix(c(coords[i,2], coords[i,1],
              coords[i,2], coords[i,1]+0.5,
              coords[i,2]+0.5, coords[i,1]+0.5,
              coords[i,2]+0.5, coords[i,1]),
            ncol = 2, byrow = TRUE)
result[[i]] = Polygon(temp)
rm(temp)
}

grid = Polygons(result, ID = 'a')
grid = SpatialPolygons(list(grid), proj4string=CRS('+proj=longlat+datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0'))
grid = SpatialPolygonsDataFrame(grid, coords) #WHY DOESN'T THIS FINAL STEP WORK!!??

【问题讨论】:

    标签: gis geospatial polygon spatial


    【解决方案1】:

    我认为您的步骤 grid = Polygons(result, ID = 'a') 正在折叠您的多边形从 400 到 1,这会导致长度不匹配。

    这段代码是否产生了预期的结果?

    grid <- lapply(seq_along(result), function(x){
      Polygons(result[x], ID = (1:length(result))[x])
      })
    grid <- SpatialPolygons(grid, proj4string = CRS('+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0'))
    grid <- SpatialPolygonsDataFrame(grid, coords)
    

    如果您使用sp 包或R 标记您的问题,您可能会获得更好的回复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-24
      • 2022-10-05
      • 2018-07-22
      • 2021-02-16
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多