Мне нужно добавить метки к многоугольникам, и я обычно использую центроид, однако центроид не попадает внутрь многоугольника. Я нашел этот вопрос Рассчитать центроид ВНУТРИ / ВНУТРИ пространственного многоугольника, но я использую пакет SF.
Ниже представлены данные игрушки
rm(list = ls(all = TRUE)) #start with empty workspace
library(sf)
library(tidyverse)
library(ggrepel)
pol <- st_polygon(list(rbind(c(144, 655),c(115, 666)
,c(97, 660),c(86, 640)
,c(83, 610),c(97, 583)
,c(154, 578),c(140, 560)
,c(72, 566),c(59, 600)
,c(65, 634),c(86, 678)
,c(145, 678),c(144, 655)))) %>%
st_sfc()
a = data.frame(NAME = "A")
st_geometry(a) = pol
a <- a %>%
mutate(lon = map_dbl(geometry, ~st_centroid(.x)[[1]]),
lat = map_dbl(geometry, ~st_centroid(.x)[[2]]))
ggplot() +
geom_sf(data = a, fill = "orange") +
geom_label_repel(data = a, aes(x = lon, y = lat, label = NAME))
что приводит к следующему
~st_centroid
на~st_point_on_surface
. То есть, если вас не волнует истинный центроид любого многоугольника. - person Mitch   schedule 26.09.2018st_PointOnSurface
от postgis gis .stackexchange.com / questions / 76498 / - person Mitch   schedule 26.09.2018