Как добавить метки в верхней оси Y моих полигонов в листовке (R)?
Я хочу добавить метки в верхнюю часть полигонов моих слоев на листовке. Мне нужно, чтобы они были близко к вершине (ось Y) моих полигонов, потому что они не должны быть скрыты, когда я включаю вид других слоев поверх этого слоя (с наименьшими прямоугольниками).
Взяв этот пример в качестве ссылки, я использовал функцию gCentroid, чтобы получить центроид многоугольника (с пакетом rgeos), и попробовал буклет "addLabelOnlyMarkers" с direction = "top". Также я пытался с некоторыми другими функциями в rgeos (gBoundary gConvexHull gEnvelope gPointOnSurface), но я ничего не нашел.
#--Dummy data for the reproducible example--#
#1. Loading required libraries
library(rgeos)
library(leaflet)
#2. Setting up the polygon
polygonX = readWKT(paste("GEOMETRYCOLLECTION(POLYGON((0 0,10 0,10 10,0 10,0 0)),",
"POLYGON((15 0,25 15,35 0,15 0)))"))
#3.- Getting the centroid of the polygon/s (in this case one, but in my real example they are several)
centers1 <- data.frame(gCentroid(polygonX , byid = TRUE))
#4.Adding the labels
l1 <- leaflet() %>%
addPolygons(data = polygonX ,
stroke = FALSE, smoothFactor = 0.2, fillOpacity = 0.3,
fillColor = "grey") %>%
addLabelOnlyMarkers(data = centers1,
lng = ~x, lat = ~y, label = ~x,
labelOptions = labelOptions(noHide = TRUE, direction = 'top', textOnly = TRUE))
Этот код предоставляет информацию поверх центроида, а мне она нужна под верхней границей многоугольника.
----- ОБНОВИТЬ -------На самом деле я смог сделать что-то относительно простоватое, но это копание в многоугольном объекте "x" и получение максимума из координат столбца y.
#---- modification (replacing the column in centers, with the max point in the top boundary of the polygon
arrayTopPolygon1 <- sapply(seq(1,length(polygonX@polygons)), function(i) {return(max(x@polygons[[i]]@Polygons[[1]]@labpt[,2]))}) #in my real example is coords[,2]
centers1 <- data.frame(gCentroid(polygonX , byid = TRUE))
centers1$y <- arrayTopPolygon1
#----
#4.Adding the labels
l1 <- leaflet() %>%
addPolygons(data = polygonX ,
stroke = FALSE, smoothFactor = 0.2, fillOpacity = 0.3,
fillColor = "grey") %>%
addLabelOnlyMarkers(data = centers1,
lng = ~x, lat = ~y, label = ~x,
labelOptions = labelOptions(noHide = TRUE, direction = 'bottom', textOnly = TRUE))
Пока это результат, но, возможно, его можно улучшить: