curlパケットのgetBinaryURLを使用して、Webからラスターデータ(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
それは機能しますが、生データの保存と読み込みの部分はあまり良くありません。だから私が好きなのは、「raw」(map_png)オブジェクトを「RasterLayer」(map)オブジェクトに直接渡すことです。このような:
map <- raster(map_png)
これをアーカイブする方法を知っている人はいますか?
-
pngをデコードしたり、packet 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])
}
)