Я думаю, что вы хотите сделать, это нарисовать элемент, но только очертить внешнее кольцо, или, в случае элемента с островками, все внешние кольца.
В PostGIS Simple Feature есть функция ST_ExternalRing, но это пока не реализовано в пакете sf
.Вы могли бы хорошо спросить Эдзера ...
Между тем, похоже, это работает.Преобразуйте геометрии MULTIPOLYGON в LINESTRINGS, преобразуйте эти LINESTRINGS в POLYGONS, а затем объедините многоугольники.В процессе этого отверстия (озера) теряют свою идентичность как отверстия, и процесс UNION отбрасывает их.
Пример:
Выполнить example(st_multipolygon)
, чтобы создать mp1
объект.Это объект MULTIPOLYGON из трех квадратов, два из которых имеют отверстия в них:
> plot(mp1)
![enter image description here](https://i.stack.imgur.com/Gyo3y.png)
Чтобы бросить отверстия, выполните:
> mp1ext =
st_union(
st_cast(
st_cast(
st_boundary(st_sfc(mp1)),
"LINESTRING"),
"POLYGON")
)
Затем, чтобы сделать карту, нанесите на карту область с цветом и отсутствующим цветом контура, используя исходные данные с отверстиями:
> plot(mp1,col="green",border=NA)
, затем добавьте границы без отверстия с использованием нового объекта:
> plot(mp1ext, col=NA, lwd=3,add=TRUE)
![enter image description here](https://i.stack.imgur.com/smPse.png)
Обратите внимание, что квадратные отверстия (озера) не очерчены.
Это, очевидно, схематичное решение для одного объекта и использует базовую графику вместо ggplot
для построения графика, но, вероятно, здесь достаточно принципов, чтобы вы могли адаптироваться к вашим данным.Могут возникнуть другие осложнения.Напишите свою собственную st_external_ring
функцию вызова на основе моего кода и настраивайте ее, пока она не будет работать лучше!