上一次讲罗马七丘的空间分析的时候,讲了一个Delaunay 三角测量——实际上这个东西也是泰森多边形的基础,泰森多边形就是在这个Delaunay三角上面进化出来的东西,所以很多同学在问我,这个东东怎么做啊?在ArcGIS里面有工具么?还是那句话:没有现成的工具……但是可以通过一系列手段来完成。
还有就是可以通过R语言来做Delaunay三角——这个是一个很神奇的东东……当然,python也行,高手自己写算法也行。
今天简单讲讲如何用ArcGIS和R语言来分别生成Delaunay三角网。
示例数据就直接用罗马七丘好了。
首先是ArcGIS,生成Delaunay三角,需要有ArcGIS 的3D Analyst扩展许可。
看到这个条件,估计对ArcGIS灰常熟悉的同学就应该知道我用啥方法了——没错,就是用构造TIN的方法,来做Delaunay三角。具体方法如下:
1、在ArcGIS里面构造TIN,是安装三维高程的方式来做的,所以你的数据需要有一个高程值,不过我们这个点默认是没有高程值的,怎么办?自己创建一个就可以了:添加一个字段比如,我这里命名为Z,并且字段类型是整型就可以了(当然你也可以用浮点)。
要求要给予这个Z值一个数字,为了构造出不同的三角顶点,所以Z值必须不同——最容易的方法,就是直接把OBJECTID的数据赋值给Z:
到现在,数据预处理就完成了。
2、调用ArcToolbox里面的Create TIN工具,工具的位置在:
3D Analyst Tools——Data Management ——TIN —— Create TIN
打开之后,设置如下:
注意一点,TIN在ArcGIS里面只能存储为文件,所以放不进GDB里面去的。
点击OK,运行之后,结果如下:
生成这一个TIN三角网文件,然后我们通过转换,就可以变成我们的Delaunay三角网要素了:工具箱如下:
比如,我们需要三角网线要素,就用TIN Edge如下:
要转成三角面要素,就用TIN Triangle
ArcGIS做Delaunay三角网打完收工。
下面我们推荐另外一种方法:用R语言来做Delaunay三角网。
首先推荐一个包“deldir”包,R语言的安装很容易,直接输入
install.packages("deldir")
看见提示,就可以安装成功了:
这个包是新西兰的奥克兰大学Rolf Turner贡献的,有关文档可以去CRAN上下载。
下面简单说说这个包的用法:
将罗马七丘的点数据加载到R语言里面去之后,就可以直接调用这个包了:
library(deldir)
rmd <- deldir(roma$X,roma$Y)
plot.deldir(rmd)
text(roma$X,roma$Y,roma$name)
结果如下:
可以发现,这个包不但可以做Delaunay三角,还可以做泰森多边形……当然,在绘图语句里面,还提供了参数选择,比如我们就看Delaunay三角网,参数如下:
plot.deldir(rmd,wlines="triang",col='blue')
text(roma$X,roma$Y,roma$name)
如果选择只看泰森多边形,选择参数可以是:tess
plot.deldir(rmd,wlines="tess",col='red')
text(roma$X,roma$Y,roma$name)
当然,这个包还有更多的参数,大家有兴趣的可以去参考他的帮助文档,下载PDF或者直接在R语言里面利用help命令都行。
还有就是可以通过R语言来做Delaunay三角——这个是一个很神奇的东东……当然,python也行,高手自己写算法也行。
今天简单讲讲如何用ArcGIS和R语言来分别生成Delaunay三角网。
示例数据就直接用罗马七丘好了。
首先是ArcGIS,生成Delaunay三角,需要有ArcGIS 的3D Analyst扩展许可。
看到这个条件,估计对ArcGIS灰常熟悉的同学就应该知道我用啥方法了——没错,就是用构造TIN的方法,来做Delaunay三角。具体方法如下:
1、在ArcGIS里面构造TIN,是安装三维高程的方式来做的,所以你的数据需要有一个高程值,不过我们这个点默认是没有高程值的,怎么办?自己创建一个就可以了:添加一个字段比如,我这里命名为Z,并且字段类型是整型就可以了(当然你也可以用浮点)。
要求要给予这个Z值一个数字,为了构造出不同的三角顶点,所以Z值必须不同——最容易的方法,就是直接把OBJECTID的数据赋值给Z:
到现在,数据预处理就完成了。
2、调用ArcToolbox里面的Create TIN工具,工具的位置在:
3D Analyst Tools——Data Management ——TIN —— Create TIN
打开之后,设置如下:
注意一点,TIN在ArcGIS里面只能存储为文件,所以放不进GDB里面去的。
点击OK,运行之后,结果如下:
生成这一个TIN三角网文件,然后我们通过转换,就可以变成我们的Delaunay三角网要素了:工具箱如下:
比如,我们需要三角网线要素,就用TIN Edge如下:
要转成三角面要素,就用TIN Triangle
ArcGIS做Delaunay三角网打完收工。
下面我们推荐另外一种方法:用R语言来做Delaunay三角网。
首先推荐一个包“deldir”包,R语言的安装很容易,直接输入
install.packages("deldir")
看见提示,就可以安装成功了:
这个包是新西兰的奥克兰大学Rolf Turner贡献的,有关文档可以去CRAN上下载。
下面简单说说这个包的用法:
将罗马七丘的点数据加载到R语言里面去之后,就可以直接调用这个包了:
library(deldir)
rmd <- deldir(roma$X,roma$Y)
plot.deldir(rmd)
text(roma$X,roma$Y,roma$name)
结果如下:
可以发现,这个包不但可以做Delaunay三角,还可以做泰森多边形……当然,在绘图语句里面,还提供了参数选择,比如我们就看Delaunay三角网,参数如下:
plot.deldir(rmd,wlines="triang",col='blue')
text(roma$X,roma$Y,roma$name)
如果选择只看泰森多边形,选择参数可以是:tess
plot.deldir(rmd,wlines="tess",col='red')
text(roma$X,roma$Y,roma$name)
当然,这个包还有更多的参数,大家有兴趣的可以去参考他的帮助文档,下载PDF或者直接在R语言里面利用help命令都行。
关于罗马七丘的数据需要的同学,可以给我发邮件索取:allenlu2008@163.com
最后预报一个很嗨皮的事件:我们上几次讲了手工打造蜂窝多边形,在ArcGIS 10.4版本里面,已经内置了这个工具了,位置如下:
ArcToolbox ——Data Management Tools —— Sampling ——Generate Tessellation
在参数里面选择 HEXAGON,就可以自动生成蜂窝六边形了。