如何显示,使用R在地图上的经度和纬度线?(How to display longitude and

2019-10-17 08:06发布

我想查看此二进制文件(无符号字符,像素= 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)

我有一个合理的地图,倒挂

我的问题谁能告诉我怎么可以显示我的文件(这不应该是同一个),以及如何显示经度和纬度,如同在本地图上显示:

Answer 1:

使用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)

请注意,这依然采用了连续的配色方案,即使你有离散数据(我的猜测是分类方案)。 您可以号映射到与栅格的颜色,但是这是一个整体的其他问题...



Answer 2:

你必须镜像对矩阵的列,以获得正确的结果。 使用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提到,有处理映射许多软件包。 您应该使用其中之一。



Answer 3:

为了得到一个ggplot2基础的解决方案,你可以使用geom_raster 。 见我回答这个你的早期问题的例子。 ggplot2显示纬度经度线,调整这个看我的回答你这个问题等 ,特别是breaks的说法scale_{x,y}_*

ggplot2需要data.frame,而不是一个matrixarray ,使用melt至(例如做这种转变在这里 )。 为了得到正确的纬度经度值,请注意,该array具有正确的dimnames ,请参阅?dimnames以获取更多信息。



Answer 4:

也许在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 )

结果:



文章来源: How to display longitude and latitude lines on a map using R?
标签: r plot ggplot2