1

このバイナリ ファイル (符号なし文字、ピクセル = 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)

奇妙に見えるマップを取得したので、ncol と nrow を次のように入れ替えます。

y<-matrix((data=sd), ncol=720, nrow=360)
image(y)

私は合理的な地図を手に入れましたが、逆さまです

私の質問は、ファイルを次のように表示する方法(同じではないはずです)と、この地図に示されている経度と緯度を表示する方法を教えてください。

4

4 に答える 4

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)

これでラスター オブジェクトができました。しかし、プロットすると、3 つのことがわかります。たくさんの緑、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 に伝える必要があります。おそらく epsg:4326 です。

> projection(r)=CRS("+init=epsg:4326")
> plot(r)

分類された世界地図

離散データがあっても、これはまだ連続的な配色を使用していることに注意してください(これは分類スキームだと思います)。ラスターで数値を色にマッピングできますが、それはまったく別の問題です...

于 2012-10-15T16:39:53.563 に答える
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 が述べたように、マップを処理する多くのパッケージがあります。それらのいずれかを使用する必要があります。

于 2012-10-15T14:34:39.520 に答える
3

ベースのソリューションを取得するggplot2には、を使用できますgeom_raster。例については、この以前の質問に対する私の回答を参照してください。ggplot2緯度経度の行を表示します。これを微調整するには、この他の質問に対する私の回答、具体的にはのbreaks引数を参照してくださいscale_{x,y}_*

ggplot2この変換を行うには、matrixまたはではなくdata.frameをarray使用する必要があります(ここの例)。正しい緯度の値を取得するには、が正しいことを確認してください。詳細については、を参照してください。 meltarraydimnames?dimnames

于 2012-10-15T15:04:12.567 に答える
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 )

結果:

ここに画像の説明を入力

于 2012-10-15T14:32:09.353 に答える