天天看點

R語言對地形資料進行三維可視化

通過R語言,可以對DEM資料進行可視化,無論是二維的可視化還是三維的可視化,都得心應手,先看看效果:

1、二維可視化:栅格渲染+等高線

R語言對地形資料進行三維可視化

2、三維可視化:網格白膜

R語言對地形資料進行三維可視化

3、三維渲染可視化。

R語言對地形資料進行三維可視化

下面通過R語言腳本,來解釋如何制作這樣的可視化效果:

##########################################

#### 紐西蘭的芒格法奧火山地形可視化   ####

##########################################

#首先加載volcano.csv資料,并且設定沒有列頭名稱

volcanodem <- read.csv("E:/volcanodem", header=FALSE)

#将資料集轉換為矩陣

volcano <- as.matrix(volcanodem)

#設定高程值

z <- volcano

#x坐标,每個網格為10米分辨率,方向由南向北

x <- 10*(1:nrow(z))   

#y坐标,每個網格為10米分辨率,方向由東向西

y <- 10*(1:ncol(z))    

## 二維可視化:栅格+等高線(見圖檔1)

par(mar=rep(0.5,4))              

image(x, y, z, col=terrain.colors(100), axes=F)

contour(x, y, z, levels=seq(from=min(z), to=max(z), by=10),axes=F, add=T)

## 三維可視化(見圖檔2)

par(mar=rep(0,4))    

#三維網格模式顯示(白膜)

persp(x,y,z,theta=120,phi=15,scale=F,axes=F)

## 帶色帶的三維模式渲染(見圖檔3)

#設定高程值為2倍拉伸

z <- 2 * volcano

x <- 10 * (1:nrow(z))

y <- 10 * (1:ncol(z))

## 建立一份新的用于繪制的網格資料集

#z0是用于設定栅格邊緣的顔色

z0 <- min(z) - 20

#用z0的顔色,把整個栅格包裹起來

z <- rbind(z0, cbind(z0, z, z0), z0)

#用x的最小值和最大值,把x包裹起來,對應上面那個z0

x <- c(min(x) - 1e-10, x, max(x) + 1e-10)

#用y的最小值和最大值,把x包裹起來,對應上面那個z0

y <- c(min(y) - 1e-10, y, max(y) + 1e-10)

## 建立用于顯示顔色的矩陣

#預設全部使用綠色

fcol <- matrix("green3", nr = nrow(z)-1, nc = ncol(z)-1)

#用灰色把所有的綠色都包裹起來,即設定四周的邊界值

fcol[ , i2 <- c(1,ncol(fcol))] <- "gray"

fcol[i1 <- c(1,nrow(fcol)) , ] <- "gray"

## Take average of four neighboring values for palette

##将上面設定的預設色,用都取相鄰的四個格網顔色的平均值進行替換

zi <- (volcano[ -1,-1] + volcano[ -1,-61] + volcano[-87,-1] + volcano[-87,-61])/4

pal <- terrain.colors(20)[cut(zi, quantile(zi, seq(0,1, len = 21)), include.lowest = TRUE)]

fcol[-i1,-i2] <- pal

## 繪圖

par(mar=rep(0,4))

persp(x, y, z, theta=120, phi=15, col = fcol, scale = FALSE, shade = 0.4, border = NA)

最後來一張珠穆朗瑪峰的:

R語言對地形資料進行三維可視化

繼續閱讀