2011-08-01 21 views
21

主にシェーンの回答thisの投稿に続いて、rgl.surface()を使用して3次元マップを作成しました。自分のデータを使用して、私はこのマップにこの表面マップの上に3次元サーフェスマップの上に地図をオーバーレイする

enter image description here

を取得し、私は(ソフトウェアサーファーで得られた)このような何かを得るような植生密度のマップを追加したいと思います:

enter image description here

RにRGLと、またはそのことについては、他のパッケージをこれを行うことが可能ですかシェーンの答えのように二つのマップを持っている唯一のソリューションですか?

ありがとうございます。

編集:

は、GSK3の要求@に続いて、ここでこのマップのためのコードは次のとおりです。

library(rgl) 

# Read the z (i.e. elevation) dimension from file 
z1 = matrix(scan("myfile.txt"),nrow=256, ncol=256, byrow=TRUE) 
#create/open x y (i.e. easting and northing coordinates) dimensions 
y=8*(1:ncol(z)) # Each point is 8 m^2 
x=8*(1:nrow(z)) 

# See https://stackoverflow.com/questions/1896419/plotting-a-3d-surface-plot-with-contour-map-overlay-using-r for details of code below 
zlim <- range(z) 
zlen <- zlim[2] - zlim[1] + 1 
colorlut <- terrain.colors(zlen,alpha=0) # height color lookup table 
col <- colorlut[ z-zlim[1]+1 ] # assign colors to heights for each point 
open3d() 
rgl.surface(x,y,z) 

私は標高コードを投稿することはできません65536(すなわちX * yが存在するため= 256 * 256)ポイントですが、このような行列です。

  [,1]  [,2]  [,3]  [,4]  [,5] 
[1,] 1513.708 1513.971 1514.067 1513.971 1513.875 
[2,] 1513.622 1513.524 1513.578 1513.577 1513.481 

などです。 全く同じフォーマットで、それぞれのx * yポイントに対して単一の値を持つ植生密度マップと同じです。これで物事が少しはっきりしてくれることを願っています...?

編集2、最終版

これは、私はまだそれに伝説を持っていない私はR.で生産されているマップであるが、これは私が後の段階でやるものです。

enter image description here

このため最終的なコードは

library(rgl) 
z1 = matrix(scan("myfile.txt"),nrow=256, ncol=256, byrow=TRUE) 
# Multiply z by 2 to accentuate the relief otherwise it looks a little bit flat. 
z= z1*2 

#create/open x y dimensions 
y=8*(1:ncol(z)) 
x=8*(1:nrow(z)) 

trn = matrix(scan("myfile.txt"),nrow=256, ncol=256, byrow=TRUE) 
fv = trn*100 
trnlim = range(fv) 

fv.colors = colorRampPalette(c("white","tan4","darkseagreen1","chartreuse4")) ## define the color ramp 
colorlut =fv.colors(100)c(1,seq(35,35,length.out=9),seq(35,75,length.out=30),seq(75,100,length.out=61))] 

# Assign colors to fv for each point 
col = colorlut[fv-trnlim[1]+1 ] 
open3d() 
rgl.surface(x,y,z,color=col) 

である彼らの助けのためのthisポストの@ GSK3と@nullglobにありがとうございました。この投稿が他の多くの人に役立つことを願っています!

+0

興味深い質問ですが、詳細情報なしでは答えにくいです。あなたのコードを投稿してください。あなたの地図をどこかに書いたり、少なくともそれを記述してください。 1つの可能性は、植生分数をカラーマップとして置くことです。これは、 'rgl.surface()'がサポートすると確信しています。 –

+0

情報については、@ gsk3で示唆されているように植生分数をカラーマップとして配置する方法がわかりませんので、これを行う方法の例を得ることができれば素晴らしいでしょう。ありがとう。 – SnowFrog

+0

zマトリクスの代わりにテレインマトリクスを使用するように作業しているすべてのカラーラインを変更してください。 –

答えて

8

上記のコードを変更して回答します。地形は標高行列と同じ形式の行列でなければなりません。あなたが作成したカラーマトリックスを実際に使用するように、関数呼び出しに,color引数を追加しました。

library(rgl) 

# Read the z (i.e. elevation) dimension from file 
z1 = matrix(scan("myfile.txt"),nrow=256, ncol=256, byrow=TRUE) 
#create/open x y (i.e. easting and northing coordinates) dimensions 
y=8*(1:ncol(z)) # Each point is 8 m^2 
x=8*(1:nrow(z)) 

# Read the terrain types from a file 
trn = matrix(scan("terrain.txt"),nrow=256, ncol=256, byrow=TRUE) 

# See http://stackoverflow.com/questions/1896419/plotting-a-3d-surface-plot-with-contour-map-overlay-using-r for details of code below 
trnlim <- range(trn) 
trnlen <- trnlim[2] - trnlim[1] + 1 
colorlut <- terrain.colors(trnlen,alpha=0) # height color lookup table 
col <- colorlut[ trn-trnlim[1]+1 ] # assign colors to heights for each point 
open3d() 
rgl.surface(x,y,z,color=col) 
+0

ありがとうございました。私はまだ私が望むものを得ることはできませんが、私があなたに与えたカラーコードは、私が望むものには適していないからです。私はあなたの提案のおかげでそれを動作させ、私は私の最終的なコードと地図を私が完了したときに投稿します。 – SnowFrog

+0

ここでフォローアップしてくれてありがとう:-)。希望が助けてくれることを願っています。 –

関連する問題