Здесь вы можете увидеть группу маленьких и больших полигонов. Маленькие многоугольники обрезаются, так как меня интересуют только их свойства, например размер внутри больших многоугольников. У меня есть две цели, в которых мне нужна помощь:
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)