我使用 curl 数据包的 getBinaryURL 从网络接收光栅数据(png、tiff、...)并将数据保存到磁盘。该栅格数据稍后用于空间分析,我目前使用栅格(和 rgdal)数据包来加载栅格数据并创建栅格对象。
library(RCurl)
url<-"http://demo.mapserver.org/cgi-bin/wms?version=1.1.1&service=WMS&request=GetMap&VERSION=1.1.1&LAYERS=continents&WIDTH=500&HEIGHT=500&BBOX=0,45,15,60&SRS=EPSG:4326&FORMAT=image/png"
map_png = getBinaryURL(url)
#saving the png to disk
map_file <- file("C:/Users/.../map.png", "wb")
writeBin(map_png, map_file)
close(map_file)
#loading png as raster
library(raster)
map <- raster("C:/Users/.../map.png")
#projection and extend
projection(map)<-"+proj=longlat +datum=WGS84 +ellps=WGS84 towgs84=0,0,0"
map@extent@xmin<-0
map@extent@xmax<-15
map@extent@ymin<-45
map@extent@ymax<-60
它可以工作,但是原始数据的保存和加载部分并不是很好。所以我喜欢将“原始”(map_png)对象直接传递给“RasterLayer”(地图)对象。像这样:
map <- raster(map_png)
有人知道如何存档吗?
-
我知道我可以解码 png 或使用数据包 png 进行解码,但是对于许多不同的输入格式,这不是一种理想的方式。更具体地说,我举了一个例子,以获取时间增益,直接使用获取后已经可用的二进制对象getBinaryURL()
system.time(
for(i in 1:200){
map_file <- file("C:/.../map.png", "wb")
writeBin(map_png, map_file)
close(map_file)
map <- raster("C:/.../map.png")
}
)
system.time(
for(i in 1:200){
xx <- readPNG(map_png)
map <- raster(xx[,,2])
}
)