У меня есть шейп-файл, состоящий из морских и речных многоугольников в пределах государственной границы (обрезанный и замаскированный из карты земного покрова (растр) и границ штатов (шейп-файл многоугольника)). В пределах государственной границы у меня есть несколько многоугольников (в моем случае более 1500 различных многоугольников), и я хотел бы выделить область по краям и на 20 м внутрь (как внутренний буфер). Но в моем случае все мои полигоны не идеальной формы, некоторые из них - реки, некоторые - просто квадраты (10 * 10 м от растрового файла), а некоторые - большие озера. Моя проблема в том, как создать этот «внутренний буфер» для многоугольников, поскольку все многоугольники или даже не все части многоугольника должны иметь буфер (поскольку они меньше 40 м, буфер 20 м с каждой стороны)).
Позвольте мне показать вам мой код и то, как далеко я продвинулся.
poly <- jvk_18[53,]
cropped <- crop(mark_data, poly, snap = "near")
masked <- mask(cropped, poly)
sjo <- (masked == 61)
sjo <- clump(sjo, directions = 8, gaps = T)
Итак, вот только добыча,
cropping
,masking
иclumping
море и реки в пределах государственной границы.
Далее я преобразовал свои данные в МУЛЬТИПОЛИГОН
test <- st_as_stars(sjo)
test <- st_as_sf(test, merge = TRUE)
test <- st_cast(test, "MULTIPOLYGON")
После этого я нашел функцию st_centroid
для определения средней точки многоугольника. Вот мой следующий вопрос: можно ли создать buffer
от центроида до 20 м от краев? Возможно ли это и как в таком случае?
pol <- test[904, ]
cent <- st_centroid(pol)
Наконец, как упоминалось в начале, я хотел бы удалить эту «внутреннюю часть», чтобы в итоге получить только 20 м от краев и внутрь.