现在很多的水动力学模型都采用非结构网格,像SMS或者MIKE生的网格文件结构都比较简单,可以很容易提取每个网格的顶点以及顶点坐标。有了这些,就可以将四边形网格或者三角形网格转成ArcGIS能够识别的SHP文件。具体思路也比较简单,大概有以下几个步骤:

1)用程序读取网格文件的信息,提取每个网格三个(或者三个以上)顶点的顶点坐标(X,Y)坐标。

2)编写代码生成如下格式的文本文件:

 

上图中开头的polygon和结尾的end直接照写,接下来的两个数据第一个为单元格ID(从0开始),第二个数为”0,这个”0”直接照写,中间为一个空格。再接下来的数据,为单元格每个顶点的编号(从0开始),顶点X,顶点Y,后面两个“1.#QNAN”可以照写,所有间隔均为一个空格(不能为TAB)。注意第一个点和最后一个点是重复的,这样才会首尾相接。这意味着对于三角形网格来讲,每个单元需要用四个点表示。

3)在ArcGIS9.2或者9.3版本中,Creat feature from Text功能中,导入文本,生成shp文件。注意新版的ArcGIS 10.0去掉了这个功能,这让人很郁闷。

这个方法比较简单,程序设计也不太难,我已经做过一遍了。对于线状的生成原理跟上面类似,不详述。有了Shp文件,对水动力学模拟,模型结果显示便可以借助GIS强大的显示与做图功能了,这包括Arc Scene,ArcMap。





共24条评论
    零点研究室

    方明泽

    2012年11月20日 00:55:42

    请教一下,mike21打网格的原理是什么?

    2012年11月22日 09:32:30

    To 方明泽: 你可以关注一下这个文章 http://www.zlvo.com/archives/85.html 至于MIKE用什么原理打网格,未曾深究。

    零点研究室

    yiyimargaret

    2013年09月13日 16:47:06

    楼主,你好,想请教下我的水陆边界文件是shp格式,怎么转成要求的xyz格式呢?

    2013年09月13日 19:56:55

    To-yiyimargaret:建议在GIS中提取线的转折点,导出转折点的坐标,然后导入MIKE模型。

    零点研究室

    yiyimargaret

    2013年09月14日 20:06:29

    我是这样做的,我创建的land.xyz文件里第一列是边界点的经度,第二列是纬度,这样导入的但是无法显示出来,我想问下是不是还缺什么呢,我看了例子里的边界线文件有四列,是因为没有其他两列文件的原因么?不知道其他两列是代表什么意思?另外,那个高程直接从DEM上提取行么?

    2013年09月14日 20:11:36

    To-yiyimargaret:一般来讲边界文件数据共分为5列,第一列为x坐标,第二列为y坐标,第三列为连接属性,第四列为z坐标,第五列为节点类型,其中前三列为必须数据,后两列可以省略。第三列如果当前点与下一个点相连则为1,否则为0。高程可以从DEM中提取。

    零点研究室

    yiyimargaret

    2013年09月14日 20:59:51

    谢谢先生对我这个初学者如此耐心细致的解答,下面一步要求导入水深数据,例子上有好多实测的水深点数据,而我现在有的数据是SRTM的DEM和一些测点的水位数据,我可以导入测点的水位数据么这里?如果导入水位数据的话应该导入初始第一天的水位数据还是后面任意一天的水位数据呢?

    2013年09月14日 21:11:29

    To-yiyimargaret:所谓水深数据实际是用来反应水下地形的,一般输入河底高程数据,这与水位无关。

    零点研究室

    tfc

    2013年09月30日 23:59:13

    楼主,你好!
    现在我搞这个mesh网格怎么搞成GIS里的shp文件,已经搞了半个多月了,还是一无所获,您看看好心把软件分享一下呗,迫切需要您的帮助,提前说声谢谢哈~~~

    零点研究室

    tfc

    2013年10月01日 00:00:45

    楼主,您好!
    抱歉,忘了留在联系方式了,方便的话请发到我的qq邮箱吧:1043984170@qq.com

    2013年10月01日 11:23:43

    To tfc: 你好,建议你采用本站下载页面中的网格转CAD这个小程序将mesh转成cad,然后将cad文件转成shp文件,这样做是完全没有问题的,国庆快乐。

    零点研究室

    tfc

    2013年10月01日 11:29:01

    楼主,您好!
    国庆快乐哈!
    我也想到了这样的方法,但是特别的浪费时间,电脑的工作量好大啊!
    而且这样做的话呢,我觉得是不是还有一个问题存在呢:mesh和shp文件的网格编号是否一致,到时候我想根据编号对应在GIS中绘制,求您解惑,谢谢,万分感谢!!!

    2013年10月01日 11:40:24

    To tfc:采用CAD这种间接方法确普有你所讲的两个问题的存在,id是不对应的,不过更快的方法是用这个mesh计算出一个结果文件来,将结果文件转成shp文件,这个高版本的MIKE工具箱是有这个功能的,还请注意在导入mesh计算时,不要勾选重编号(reordering)。

    零点研究室

    TOM

    2013年11月14日 15:16:16

    我按照方法生成了shp文件,但是显示出来的网格线无法去掉,有什么办法吗?

    2013年11月14日 20:05:27

    这应该与程序无关。

    零点研究室

    木棉

    2014年04月11日 16:23:44

    大瓜,请教你,如果想从dfsu结果文件中提取最大淹没水深,转成shp文件,如何实现?

    2014年04月11日 16:32:42

    To 木棉:结果文件中若有输出水深才有得提取,至于HD FM的结果输出选项中各自水深的含义可参考本站另一文章:http://www.zlvo.com/archives/1211.html。本文中转SHP的方法比较笨拙,转shp只需要用到mesh文件,无需结果文件。结果文件中结果可以作为属性赋值到shp中的要素中去。另外,新版的MIKE中似乎可以直接转shp,你可以留意一下。

    零点研究室

    木棉

    2014年04月11日 16:36:12

    感谢大瓜先生,在你的网站上受益匪浅

    2014年04月11日 16:59:16

    To 木棉:有空多关注。

    零点研究室

    木棉

    2014年04月11日 17:11:17

    大瓜先生,我在你在另一个博文给别人回复解答中发现,mesh输出的是shp节点文件,而结果中是一个网格一个水深,这样的话,如何使网格水深属性值跟shp节点文件对应呢?

    零点研究室

    木棉

    2014年04月11日 17:13:51

    刚表达有误了,mesh转shp是网格的节点数据,而水深一个格网一个,数目不同,如何使之对应呢

    2014年04月11日 22:44:14

    To 木棉:按照文中的方法,生成的SHP文件是面文件,也就是一个网格对应一个要素,数量与单元水深是对应的。

    零点研究室

    木棉

    2014年04月12日 22:45:40

    非常感谢

    零点研究室

    master

    2017年09月04日 18:28:02

    博主,你好。想请教一个问题,在SMS把糙率分区设置好以后,能不能把这些糙率值给导出来呢?就比如前两列上节点的x,y坐标,第三列是节点的糙率值,可否指点一下?

评论