我想查看此二进制文件(无符号字符,像素= 720和行= 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)
我有一个地图,看起来奇怪,然后我换NcoI和nrow为
y<-matrix((data=sd), ncol=720, nrow=360)
image(y)
我有一个合理的地图,倒挂
我的问题谁能告诉我怎么可以显示我的文件(这不应该是同一个),以及如何显示经度和纬度,如同在本地图上显示:
使用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长的坐标系中的 - 最有可能EPSG:4326:
> projection(r)=CRS("+init=epsg:4326")
> plot(r)
请注意,这依然采用了连续的配色方案,即使你有离散数据(我的猜测是分类方案)。 您可以号映射到与栅格的颜色,但是这是一个整体的其他问题...
你必须镜像对矩阵的列,以获得正确的结果。 使用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提到,有处理映射许多软件包。 您应该使用其中之一。
为了得到一个ggplot2
基础的解决方案,你可以使用geom_raster
。 见我回答这个你的早期问题的例子。 ggplot2
显示纬度经度线,调整这个看我的回答你这个问题等 ,特别是breaks
的说法scale_{x,y}_*
。
ggplot2
需要data.frame,而不是一个matrix
或array
,使用melt
至(例如做这种转变在这里 )。 为了得到正确的纬度经度值,请注意,该array
具有正确的dimnames
,请参阅?dimnames
以获取更多信息。
也许在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 )
结果: