Как растворить отдельные полигоны в один большой?

У меня есть файл формы, который я могу прочитать в R следующим образом:

    library(rgdal)
    shape <- readOGR(dsn = "~/path", layer = "a")

Меня интересует вся область, покрывающая все полигоны (черная кривая здесь). Как растворить все полигоны, даже разделенные на один полигон, вот так?

Я открыт для решений от R или Qgis

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используя пакет R и sf, вы можете сделать выпуклую оболочку объединенного (при необходимости) шейп-файла. Поскольку вы не включили данные, я использовал данные nc, включенные в пакет sf, чтобы проиллюстрировать метод.

library(dplyr)
library(sf)
library(ggplot2)

# setting up sample data,
# you'll need to use st_read() to read your shapefile, not readOGR()
nc <-  st_read(system.file("shape/nc.shp", package = "sf"))
#> Reading layer `nc' from data source 
#>   `.../sf/shape/nc.shp' 
#>   using driver `ESRI Shapefile'
#> Simple feature collection with 100 features and 14 fields
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
#> Geodetic CRS:  NAD27


nc <- nc[c(1:30, 85:81),] #Use some non-contiguous counties

# make a convex hull of the unioned geometries
nc_hull <- st_convex_hull(st_union(nc))

ggplot() + 
  geom_sf(data = nc, fill = NA, color = 'red') +
  geom_sf(data = nc_hull, fill = NA, color = 'black')

Created on 2022-03-18 by the reprex package (v2.0.1)

Попробуйте st_make_valid() избавиться от ошибок геометрии ошибок. st_crop() работает для меня. В противном случае попробуйте your_sf[st_within(your_sf, hull_sf, sparse = F),] Мало что еще я могу сделать без некоторых данных для воспроизведения ошибок.

mrhellmann 18.03.2022 21:32

Я не уверен, что вы пытаетесь сделать с линией ext= ....

mrhellmann 18.03.2022 21:41

Это не то, как вы бы это сделали. Возможно, прочитайте r-spatial.github.io/sf/reference/index.html или опубликуйте образцы данных.

mrhellmann 18.03.2022 21:52

поля - это просто столбцы, а объекты SF - такие же, как data.frames. выберите столбцы с помощью dplyr::select() или подмножества в квадратных скобках nc[,3] (для третьего столбца) или любого другого метода выбора столбцов df.

mrhellmann 18.03.2022 22:16

Другие вопросы по теме