Как добавить метки в верхней оси 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)) 

Этот код предоставляет информацию поверх центроида, а мне она нужна под верхней границей многоугольника.

LabelsCentered

----- ОБНОВИТЬ -------

На самом деле я смог сделать что-то относительно простоватое, но это копание в многоугольном объекте "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)) 

Пока это результат, но, возможно, его можно улучшить: solution1_labelontoppolygon

0 ответов

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