如何使用R在地图上显示经度和纬度线?

时间:2012-10-15 13:56:39

标签: r plot ggplot2

我试图将这个二进制文件(无符号字符,像素= 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)

我得到了一张合理的地图但是倒挂了

我的问题可以告诉我如何将我的文件显示为(不应该是相同的)以及如何显示此地图上显示的经度和纬度:

4 个答案:

答案 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)

enter image description here

但是,正如@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)

classified world map

注意这仍然使用连续的配色方案,即使你有离散数据(我猜这是一个分类方案)。您可以使用栅格将数字映射到颜色,但这是另一个问题......

答案 2 :(得分:3)

要获得基于ggplot2的解决方案,您可以使用geom_raster。有关示例,请参阅我对此earlier question of yours的回答。 ggplot2显示lat lon行,要调整此内容,请参阅我对this other question of yours的回答,特别是breaks的{​​{1}}参数。

scale_{x,y}_*需要data.frame,而不是ggplot2matrix,请使用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 )

结果:

enter image description here