如何在leaflet中的多边形上方添加标签

14

我正在使用叶片R软件包。我有一个由多边形构成的分区系统,想将它们的ID放在它们的上方。下面是我的目标示例(使用其他软件)。

输入图像描述

感谢您的建议!

1个回答

22

由于没有可重复使用的数据,我决定使用我之前发布的与leaflet相关的帖子之一。从这篇文章中,您需要了解两件事:1)您需要创建一个包含目标区域中心点的数据框架,2)您需要使用addLabelOnlyMarkers()。您可以使用gCentroid()来实现第一件事。我将多边形数据集(英国)的行名称添加为字符到centers中。这用于标记。您需要考虑在自己的情况下使用哪些标签。一旦准备好此数据集,您就需要在addLabelOnlyMarkers()中使用它。

library(raster)
library(rgeos)
library(leaflet)

# Get UK polygon data
UK <- getData("GADM", country = "GB", level = 2)

# Find a center point for each region
centers <- data.frame(gCentroid(UK, byid = TRUE))
centers$region <- row.names(UK)

### Create dummy data
set.seed(111)
mydf <- data.frame(place = unique(UK$NAME_2),
                   value = sample.int(n = 1000, size = n_distinct(UK$NAME_2), replace = TRUE))

### Create five colors for fill
mypal <- colorQuantile(palette = "RdYlBu", domain = mydf$value, n = 5, reverse = TRUE)

leaflet() %>% 
addProviderTiles("OpenStreetMap.Mapnik") %>%
setView(lat = 55, lng = -3, zoom = 6) %>%
addPolygons(data = UK,
            stroke = FALSE, smoothFactor = 0.2, fillOpacity = 0.3,
            fillColor = ~mypal(mydf$value),
            popup = paste("Region: ", UK$NAME_2, "<br>",
                          "Value: ", mydf$value, "<br>")) %>%
addLabelOnlyMarkers(data = centers,
                    lng = ~x, lat = ~y, label = ~region,
                    labelOptions = labelOptions(noHide = TRUE, direction = 'top', textOnly = TRUE)) %>%
addLegend(position = "bottomright", pal = mypal, values = mydf$value,
          title = "UK value",
          opacity = 0.3)

输入图像描述


2
这是一个很好的例子,谢谢。我还想链接到我发现非凸多边形非常有帮助的答案:https://gis.stackexchange.com/a/265475/78424 - geneorama
@geneorama 感谢您的话。非常感激!也感谢您在这里留下了一个有用的链接。 - jazzurro
@jazzurro,非常好的回答。如何在缩放时更改字体大小。当标签是名称时,在缩小时会变得奇怪。是否有一种方法可以更改字体大小或使文本标签消失? - Paulo Marques

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接