R语言对地形数据进行三维可视化

//http://blog.csdn.net/allenlu2008/article/details/49874111
标签: r语言三维可视化空间数据空间统计
  3812人阅读  评论(1)  收藏  举报
  分类:
GIS(111)   数据分析(117) 
通过R语言,可以对DEM数据进行可视化,无论是二维的可视化还是三维的可视化,都得心应手,先看看效果:

1、二维可视化:栅格渲染+等高线


2、三维可视化:网格白膜



3、三维渲染可视化。



下面通过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)

最后来一张珠穆朗玛峰的:



脚本和数据下载地址:
http://ncportal.esrichina.com.cn/arcgis/home/item.html?id=9cb5eb34f95f4a9b85fc3d523019098d

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Rayshader是一个R包,可以用于创建漂亮的2D和3D地图和地形图。虽然Rayshader的主要语言是R,但是你也可以在Python中使用它来创建美丽的地图和地形图。以下是在Python中使用Rayshader的步骤: 1. 安装rayshader和必要的依赖项。 首先,你需要在你的计算机上安装rayshader和必要的依赖项。你可以在命令行中使用以下命令安装它们: ``` pip install rayshader pip install rpy2 ``` 其中rpy2是一个Python包,可以让你在Python中调用R代码。 2. 导入必要的包和模块。 在Python程序中,你需要导入必要的包和模块。以下是一个典型的导入: ```python import rpy2.robjects as robjects import rpy2.robjects.packages as rpackages from rpy2.robjects import pandas2ri from rpy2.robjects.conversion import localconverter from rpy2.robjects.packages import importr rayshader = importr('rayshader') ``` 3. 将Python数据转换为R数据。 在Python中使用rayshader时,你需要将Python数据转换为R数据。你可以使用pandas2ri来执行此操作。以下是一个示例: ```python # Create a pandas dataframe import pandas as pd import numpy as np df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD')) # Convert the pandas dataframe to an R dataframe with localconverter(robjects.default_converter + pandas2ri.converter): r_dataframe = robjects.conversion.py2rpy(df) ``` 4. 使用rayshader创建地图或地形图。 现在,你可以使用rayshader创建漂亮的2D或3D地图或地形图。以下是一个基本的示例: ```python # Load the rayshader library import rayshader as rs # Create a 3D plot of the data rs.plot_3d(r_dataframe, zcol='C') ``` 这将创建一个3D图,其中数据框的第三列(C)用作高度数据。 这只是使用rayshader在Python中创建地图和地形图的基础。rayshader还有很多其他功能,可以用来创建更复杂的觉效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值