渲染大型图块数据集

时间:2019-04-25 08:38:52

标签: r shiny leaflet gdal r-leaflet

我花了很多时间解决SO上的此问题,但未能找到合适的答案。简而言之,我无法使用R Shinyleaflet查看本地存储的地图图块。

我已使用gdal2tiles.pyEPSG:27700中投影的原始高分辨率.tif文件创建了一个嵌套的图块目录。可以使用该函数的自动生成的.html文件(即googlemaps.html,leaflet.html,openlayers.html)查看切片过程的输出;请参见下文,其中提供了包含磁贴和leaflet.html的GitHub存储库链接,以供查看)。因此,我得出的结论是gdal2tiles.py正确生成了可以在浏览器中显示的图块。

尝试使用leafletR Shiny时出现问题。我已按照以下说明herehereleaflet指向我的本地图块,但是R Studio的查看器或浏览器中均未显示任何内容。令人沮丧的是,运行代码时没有错误打印到R控制台。我正在使用的代码基于我刚刚链接到的先前的SO答案,如下所示:

library(leaflet)
addResourcePath("mytiles", "C:/path/to/my/tiles/")

leaflet() %>% 
  addTiles(urlTemplate = "mytiles/{z}/{x}/{y}.png") %>% 
  addMouseCoordinates()

按照语法{z}/{x}/{y}正确命名文件夹和文件,例如目录结构如下:path/to/my/files/6/30/42.png。我也将文件上传到GitHub,并将回购URL传递到urlTemplate,但无济于事。如果可以帮助任何人,则可以here找到我正在使用的图块。就文件和文件夹的数量而言,回购协议相当庞大(输入栅格的分辨率为25m,我需要足够的缩放级别),但尺寸却不大。

我注意到-在leaflet.html中放大我的图块时-有多种灰色阴影。这很奇怪,因为输入.tif是二进制的。森林存在(1)或不存在(NoData或NA)。我提供了一个屏幕截图,想知道这是否是Chrome中的渲染问题,或者是否导致图块无法显示在Shiny中。可以查看here的屏幕截图。

有人可以帮我使用本地文件在R Shiny中显示我的图块吗?如果最好的解决方案是使用GitHub托管的磁贴,但我希望显示本地存储的文件,我将接受一个答案。

1 个答案:

答案 0 :(得分:0)

我从软件包的Github repo问题页面获得了解决方案。对于将来可能遇到问题的任何人,事实证明tms=TRUE中需要标记tileOptions。感谢Barret Schloerke在此方面的帮助。他的完整(有效)代码已复制到下面,可以在Github上here找到。

library(leaflet)
library(rgdal)
library(leaflet.extras)
library(mapview)

leaflet() %>%
  addMouseCoordinates() %>%

  # Set high zoom level as I have only created tiles at zoom level 6 for a quick example. If you can get this to display, it'll be tough to discern as it's quite zoomed out!

  # This should center the view somewhere over the UK where my tiles have been created  
  setView(0, 51.5135085, zoom = 6) %>%
  # Added toner provider tiles as the white background makes it easier to see my custom tiles
  addProviderTiles(group = "Toner", providers$Stamen.Toner) %>%
  addTiles(group="test", urlTemplate = "https://simon-tarr.github.io/tilestest/tiles/{z}/{x}/{y}.png",
           options = tileOptions(tms = TRUE, minZoom = 6, maxZoom = 6)) %>% 
  addLayersControl(
    overlayGroups = c("test"),
    options = layersControlOptions(collapsed = FALSE)

  )