我试图将这个二进制文件(无符号字符,像素= 720和lines = 360)视为地图,我尝试了下面给出的一段代码。首先,我下载并保存为landcover.bin
。
conne <- file("C:\\landcover.bin", "rb")
sd<- readBin(conne, integer(), size=1, n=360*720, signed=F)
y<-matrix((data=sd), ncol=360, nrow=720)
image(y)
我有一张看起来很奇怪的地图,然后我将ncol和nrow换成
y<-matrix((data=sd), ncol=720, nrow=360)
image(y)
我得到了一张合理的地图但是倒挂了
我的问题可以告诉我如何将我的文件显示为(不应该是相同的)以及如何显示此地图上显示的经度和纬度:
答案 0 :(得分:4)
您必须镜像矩阵上的列才能获得正确的结果。使用abline
绘制你的拉特和长片。
conne <- file("Landcover.bin", "rb")
sd<- readBin(conne, integer(), size=1, n=360*720, signed=F)
y<-matrix(sd,ncol=360,nrow=720)
image(y[,360:1])
lats=seq(-90,90,by=30)
longs=seq(-180,180,by=30)
trans.lats=(lats+90) / 180
trans.longs=(longs+180) / 360
abline(h=trans.lats,v=trans.longs)
但是,正如@January所提到的,有许多处理地图的包。你应该使用其中一个。
答案 1 :(得分:4)
将raster
包用于基于地理位置的网格化数据。
你可以直接从带有一些rgdal技巧的二进制文件中读取它,但是可以通过矩阵来实现。
> require(raster)
> conne <- file("landcover.bin","rb")
> sd<- readBin(conne, integer(), size=1, n=360*720, signed=F)
> y<-t(matrix((data=sd), ncol=360, nrow=720))
> r = raster(y)
现在你有了一个栅格对象。但如果你绘制它,你会注意到三件事 - 很多绿色,比例高达250,轴从0到1。
该地图似乎使用了255海。如果我们将其重新编码为NA,我们将获得更好的地图:
> r[r==255]=NA
> plot(r)
看起来好多了。现在让我们来修复范围:
> extent(r) = extent(c(xmn=-180,xmx=180,ymn=-90,ymx=90))
> plot(r)
最后我们应该告诉R这是在lat-long坐标系中 - 很可能是epsg:4326:
> projection(r)=CRS("+init=epsg:4326")
> plot(r)
注意这仍然使用连续的配色方案,即使你有离散数据(我猜这是一个分类方案)。您可以使用栅格将数字映射到颜色,但这是另一个问题......
答案 2 :(得分:3)
要获得基于ggplot2
的解决方案,您可以使用geom_raster
。有关示例,请参阅我对此earlier question of yours的回答。 ggplot2
显示lat lon行,要调整此内容,请参阅我对this other question of yours的回答,特别是breaks
的{{1}}参数。
scale_{x,y}_*
需要data.frame,而不是ggplot2
或matrix
,请使用array
进行此转换(例如here)。要获得正确的lat lon值,请注意melt
具有正确的array
,请参阅dimnames
以获取更多信息。
答案 3 :(得分:2)
也许R地图包中的地图更适合你?
library( maps )
map( "world" )
points( -0.11832, 51.50939, pch= 19, col= "red" )
text( -0.11832, 51.50939, "London", pos=3, col= "red" )
abline( h= 0 )
text( -150, 0, "Equator", pos= 3 )
abline( v= 0 )
结果: