我正在尝试制作一个长度为0.5度的400平方(20x20)的空间网格。我已经使用'?SpatialPolygonsDataFrame'建议的工作流程成功创建了SpatialPolygons对象(即Polygon> Polygons> SpatialPolygons> SpatialPolygonsDataFrame)。即使SpatialPolygons对象中有400个元素,在附加数据的最后阶段(“ coords”对象),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!!??
答案 0 :(得分:1)
我认为您的步骤def tasemed(järjend, tase = 0, tulemus = []):
for element in järjend:
if len(järjend) > 1:
return tasemed(len(järjend)-1, tase = 0,tulemus[tase].append(järjend[tase]))
else:
return tasemed(järjend, tase + 1, tulemus)
return tulemus
print(tasemed([1, [2, [3], [[4], 3], 2], 1, []]))
正在使您的多边形从400收缩到1,这导致长度不匹配。
此代码会产生预期的结果吗?
grid = Polygons(result, ID = 'a')
如果您使用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
标记问题,则可能会得到一个更好的答复。