Извлечение атрибутов SpatialPolygonsDataFrame в фрейм данных в R. Назначение новых переменных на основе другого многоугольника в R - PullRequest
0 голосов
/ 07 февраля 2020

Здесь вы можете увидеть группу маленьких и больших полигонов. Маленькие многоугольники обрезаются, так как меня интересуют только их свойства, например размер внутри больших многоугольников. У меня есть две цели, в которых мне нужна помощь:

1 - Назначить новый атрибут field_id отдельным полигонам в Pol_small. Новое поле атрибута будет иметь либо 1, либо 2, и оно будет представлять, в пределах которого Pol_large находится отдельный Pol_small. Другими словами, все многоугольники слева (Pol1, Pol2, Pol3, Pol4) будут иметь 1 в столбце нового атрибута, а четыре многоугольника справа (Pol5, Pol6, Pol7, Pol8) будут иметь 2.

2. - Извлечь информацию о Pol_small_crop в dataframe. Каждая строка будет представлять каждый отдельный многоугольник в пределах Pol_small_crop, то есть всего 8 строк. Меня интересует площадь [в кв. Км] обрезанных полигонов (показана красным цветом) и перенос всех других атрибутов, таких как созданный field_id и другие. В этом примере только оставшиеся атрибуты будут ID.

library(sp)
library(raster)

create_poly <- function(coordin,id_number){
  coordinates = matrix(c(coordin[1], coordin[3],
                    coordin[1], coordin[4],
                    coordin[2], coordin[4],
                    coordin[2], coordin[3],
                    coordin[1], coordin[3]), 
                  ncol = 2, byrow = TRUE)


  P_1 = Polygon(coordinates)
  Ps_1 = SpatialPolygons(list(Polygons(list(P_1), ID = id_number)), proj4string=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"))
  ID_1 <- sapply(slot(Ps_1, "polygons"), function(x) slot(x, "ID"))
  df <- data.frame(rep(0, length(ID_1)), row.names=ID_1)
  Ps1_df <- SpatialPolygonsDataFrame(Ps_1, df)
  Ps1_df
}

# Create shapefile with polygon boundaries of interest:
Pol_large1 <- create_poly(c(80,100,20,40),1)
Pol_large2 <- create_poly(c(120,140,30,50),1)

# Join the polygons into one layer:
Pol_large <- do.call(rbind, list(Pol_large1, Pol_large2))

# Create smaller polygons:
Pol2 <- create_poly(c(79,83,19,30),2)
Pol3 <- create_poly(c(90,92,25,30),3)
Pol4 <- create_poly(c(90,95,33,37),4)
Pol5 <- create_poly(c(98,110,21,24),5)

Pol6 <- create_poly(c(119,123,29,35),6)
Pol7 <- create_poly(c(130,131,33,40),7)
Pol8 <- create_poly(c(130,137,45,47),8)
Pol9 <- create_poly(c(116,125,45,49),9)

# Join the polygons into one layer:
Pol_small <- do.call(rbind,list(Pol2, Pol3, Pol4, Pol5,
                                Pol6, Pol7, Pol8, Pol9))

plot(Pol_large, axes = TRUE)
plot(Pol_small, add=TRUE)

# Crop out polygons
Pol_small_crop <- crop(Pol_large,Pol_small)
plot(Pol_small_crop, border = "red", add=TRUE)

enter image description here

...