Как убрать озера / воду с карт в R
(Я заранее приношу извинения за то, что не представлял. Не могу приступить к работе, чтобы быть отдельным вопросом позже сегодня).
Я вытащил данные уровня ZCTA из переписи США, сколотил ZCTA в группы и создал карту хороплетов. Я хотел бы удалить различные границы озера. В тех местах, где особенности озера составляют большую часть общей площади (или находятся вблизи границ моих регионов), их границы являются чем-то вроде глазницы для зрителя.
library(tigris)
library(sf)
library(dplyr)
library(tidycensus)
library(stringr)
library(ggplot2)
var <- c(EduTotal = "B16010_001")
zip_sf <- get_acs(geography = "zcta",
variables = var,
year = 2017, survey = "acs5",
output = "wide", geometry = TRUE,
keep_geo_vars=TRUE
)
zip_sf %>%
filter(str_detect(ZCTA5CE10,'^1')) %>%
mutate(zip2=str_sub(ZCTA5CE10,1,2)) %>%
group_by(zip2) %>%
summarize(meanEd=mean(EduTotalE)) %>%
ggplot(aes(fill = meanEd)) +
geom_sf(col='red')
Почтовые индексы, начинающиеся с '1'
1 ответ
Я думаю, что вы хотите сделать, это нарисовать элемент, но только очертить внешнее кольцо, или, в случае элемента с островками, все внешние кольца.
В PostGIS Simple Features есть функция ST_ExternalRing, но, похоже, она не реализована в sf
Пакет еще. Вы могли бы спросить Эдзер приятно...
Между тем, это похоже на работу. Преобразуйте геометрии MULTIPOLYGON в LINESTRINGS, преобразуйте эти LINESTRINGS в POLYGONS, а затем объедините многоугольники. В процессе этого отверстия (озера) теряют свою идентичность как отверстия, и процесс UNION отбрасывает их.
Пример:
Бежать example(st_multipolygon)
создавать mp1
объект. Это объект MULTIPOLYGON из трех квадратов, два из которых имеют отверстия в них:
> plot(mp1)
Чтобы уронить дыры, сделайте:
> 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)
Обратите внимание, что квадратные отверстия (озера) не очерчены.
Это очевидно схематичное решение для одного объекта и использует базовую графику вместо ggplot
чтобы сделать заговор, но принципы, вероятно, здесь достаточно, чтобы вы могли адаптироваться к вашим данным. Могут возникнуть другие осложнения. Написать свой st_external_ring
Функция кольца на основе моего кода и настраивать его, пока он не будет работать лучше!