【问题标题】:Create a GeoTiff from leaflet map从传单地图创建 GeoTiff
【发布时间】:2018-02-08 03:50:41
【问题描述】:

我正在尝试从传单地图创建 GeoTiff。我试图在网上找到答案,但似乎没有一个对我有用。我对使用 R 很陌生。 地理数据是一个 2000*10 矩阵,其中可以找到标题、经度和纬度。 这是我的代码:

install.packages('leaflet')
install.packages('rgdal')
install.packages('raster')
install.packages('sp')


library(leaflet)
library(raster)
library(rgdal)
library(raster)
library(sp)


sites <- data.frame(Name=(geodata[,2]),Long=(geodata[,10]),Lati=(geodata[,9]))

ma <- leaflet()
ma <- addTiles(ma)
ma <- addMarkers(ma, lng=sites$Long, lat=sites$Lati, popup=sites$Name)
ma

rast <- writeRaster(ma, filename="Worldmap.tif", format="GTiff")

最后一步“writeRaster”不起作用。我收到的错误消息如下所示:

Error in (function (classes, fdef, mtable)  : 
unable to find an inherited method for function 'writeRaster' 
for signature '"leaflet", "character"'

知道错误可能在哪里吗?

【问题讨论】:

    标签: r leaflet rstudio tiff geotiff


    【解决方案1】:

    Leaflet 基于 JavaScript 库并生成动态网络地图。

    没有直接的方法可以将动态地图保存为静态地图,例如 geotiff 或 png。如果您不需要自动执行此操作,您可以在 RStudio 中导出图像,它为您提供了保存为 PNG、JPEG 或 BMP 的选项。

    否则,有一些解决方法,您可以将传单地图保存为 html 文件,然后使用库 webshotmapview 抓取信息以创建图像文件,例如 png。 Webshot 和 mapview 让您可以将文件保存为 PNG、PDF 或 JPEG。

    library(leaflet)
    rand_lng = function(n = 10) rnorm(n, -93.65, .01)
    rand_lat = function(n = 10) rnorm(n, 42.0285, .01)
    ma <- addMarkers(ma, lng=rand_lng(50), lat=rand_lat(50), popup="a")
    
    ## With webshot and htmlwidgets:    
    library(webshot)
    saveWidget(ma, "temp.html", selfcontained = FALSE)
    webshot("temp.html", file = "Rplot.png", cliprect = "viewport")
    
    ## With mapview
    library(mapview)
    mapshot(ma, file = "Rplot.png", remove_url = TRUE)
    

    也请查看this

    如果您真的需要 GeoTiff,则必须再次在 R 中加载图像,将其转换为光栅,然后将其保存为 GeoTiff。这是一个简短的例子。您将不得不调整您的范围并添加参考系统。并且可能控制光栅的值,因为我不确定图像数据是如何加载到矩阵中的。这种转换似乎丢失了很多信息。

    library(png)
    library(raster)
    img <- readPNG("pathto/staticImage.png")
    
    img[img==1]=NA
    ar2mat <- matrix(img, nrow = nrow(img), ncol = ncol(img))
    ## Define the extent
    rast = raster(ar2mat, xmn=0, xmx=1, ymn=0, ymx=1)
    ## Define the spatial reference system
    proj4string(rast) <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
    
    plot(rast); extent(rast)
    writeRaster(rast, "pathto/png2tif.tif", format="GTiff", overwrite=TRUE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多