【问题标题】:How to "addTiles" on top of "addPolygons" in R's Leaflet?如何在 R 的 Leaflet 中的“addPolygons”之上“addTiles”?
【发布时间】:2017-05-09 22:47:15
【问题描述】:

如何在 R 的小册子包中设置图层顺序,以使图块显示在填充了颜色的多边形之上?

这是我目前得到的:

require(leaflet)
require(acs)
require(tigris)
require(rgdal)
census.income.end.year = 2015
county = 17
nd.counties=acs.fetch(geography=geo.make(state="ND", county=county), 
                      table.number="B01003", endyear = 2015)

tracts <- tigris::tracts(state = 'ND', county = county, cb=FALSE, year = 2015)

# create a geographic set to grab tabular data (acs)
geo<-geo.make(state=c("ND"),
              county = county,
              tract="*")

# add in median income
median.income <- acs.fetch(endyear = census.income.end.year, 
                           geography = geo, 
                           variable = c("B19013_001"))
income_df <- data.frame(paste0(as.character(median.income@geography$state), 
                               str_pad(as.character(median.income@geography$county), 3, 'left', '0'), 
                               str_pad(as.character(median.income@geography$tract), 5, 'left', '0')), 
                        median.income@estimate)

rownames(income_df)<-1:nrow(income_df)
names(income_df)<-c("GEOID", "hhincome")
income_merged <- geo_join(tracts, income_df, "GEOID", "GEOID")

income_merged <- spTransform(income_merged, CRS("+init=epsg:4326"))

qpal <- colorQuantile("plasma", income_df$hhincome, n = 4)

leaflet() %>% 
  setView( -96.7898, 46.8772, zoom=11) %>% 
  addPolygons(data = income_merged, 
              fillColor = qpal(income_merged$hhincome), 
              fillOpacity = 1, 
              weight = 0.3) %>%
  addProviderTiles(providers$Hydda.RoadsAndLabels) 

最终,我希望使用自定义 MapBox 使用 addTiles(而不是上面代码中的 addProviderTiles)来执行此操作,但我无法弄清楚如何使此示例可重现...假设您需要一个键来访问自定义 MapBox 瓦片(顺便说一句,我创建了一个自定义 MapBox 瓦片,除了道路和标签外应该是透明的,所以底层的多边形应该“直通显示”。)

这是使用非 R 版本的传单在圆圈顶部添加图块的一种方法:http://jsfiddle.net/dcu9pz2w/,但我不知道如何在我的上下文中使其工作。我认为添加“窗格”可能是要走的路,但我在 R 传单中看不到该功能。另外,我探索了 z-index 值,但这似乎是一条死胡同。

非常感谢任何帮助!

【问题讨论】:

  • help(addTiles) 可能会为您提供解决方案。试试addTiles(urlTemplate="http://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}.png", attribution='&amp;copy; &lt;a href="http://www.openstreetmap.org/copyright"&gt;OpenStreetMap&lt;/a&gt; contributors, &amp;copy; &lt;a href="http://cartodb.com/attributions"&gt;CartoDB&lt;/a&gt;')
  • @kitman0804:谢谢,但我正在寻找一种排序层的方法,而不仅仅是添加图块。
  • 除非您找到提供矢量切片的切片提供商(按内容类型分隔 - 例如街道、水体、POI、标签等),或者您自己有这样的切片,否则您尝试做什么不可能。所有标准切片服务器都提供为每个缩放级别预先计算的光栅图像层(即 png 图像)。因此,您无法将单个组件与图像分开。
  • @TimSalabim:谢谢你的想法。但是,这里有一个例子似乎可以做到你所说的不可能:jsfiddle.net/dcu9pz2w。瓷砖提供者是 OpenStreetMaps,瓷砖似乎是 png 格式。这个例子的问题是我不知道如何在 R 的传单中进行这种分层工作。
  • 当前的传单实现似乎不允许正确设置 zIndexpane(平铺和图像放置在平铺窗格上,而多边形/线条/圆放在覆盖窗格上zIndex 较高)。我建议你在他们的github repository 上打开一个问题。如果我们也可以操纵图层顺序以在光栅图像上叠加多边形等,那将非常有用。

标签: r leaflet


【解决方案1】:

R 传单现在包含addMapPane 功能。此问题的解决方案是首先设置窗格顺序,然后添加图块/多边形。可重现的例子:

library(leaflet)
library(geojsonio)

# get polygon data
# https://github.com/simonepri/geo-maps/blob/master/info/countries-land.md
world <- geojson_read(
  "https://github.com/simonepri/geo-maps/releases/download/v0.6.0/countries-land-10km.geo.json", 
  what = "sp"
)

# generate random values
world@data$value <- runif(nrow(world@data))

# get color palette
color_pal <- colorNumeric(palette = "YlOrRd", domain = NULL)

# get leaflet map
leaflet() %>%
  setView(lat = 50, lng = 15, zoom = 4) %>%
  addMapPane("background_map", zIndex = 410) %>%  # Level 1: bottom
  addMapPane("polygons", zIndex = 420) %>%        # Level 2: middle
  addMapPane("labels", zIndex = 430) %>%          # Level 3: top
  addProviderTiles(
    providers$Esri.WorldTerrain,
    options = pathOptions(pane = "background_map")
  ) %>%
  addPolygons(
    data = world, stroke = FALSE, smoothFactor = 0.2,
    fillOpacity = 0.6, fillColor = ~color_pal(value),
    options = pathOptions(pane = "polygons")
  ) %>%
  addProviderTiles(
    providers$Stamen.TonerLabels,
    options = pathOptions(pane = "labels")
  )

【讨论】:

  • 乍一看,这看起来很完美。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 2019-06-22
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
相关资源
最近更新 更多