Построение SpatialPolygonsDataFrame - ошибка: несоответствие длины объекта - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь создать пространственную сетку из 400 квадратов (20х20) каждые 0,5 градуса в длину.Я успешно создал объект SpatialPolygons, используя рабочий процесс, предложенный «SpatialPolygonsDataFrame» (т. Е. Polygon> Polygons> SpatialPolygons> SpatialPolygonsDataFrame).Несмотря на то, что в объекте 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!!??

1 Ответ

0 голосов
/ 05 декабря 2018

Я думаю, что ваш шаг 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.

...