采用envi或ArcGIS将等高线转网格DEM

CAD文件在通常的GIS软件中,都会对应多个图层,至少点、线、面层各一个,当然可能一些层中没有数据。cad格式的等高线主要应该是线信息,也可能有面和特征点。如果面层有数据,需将面转为线,然后将线部分倒成一个gis线数据层。如果有特征点,则导成一个点层。本案例中的等高线数据中面层和点层没有数据。     
   方法1:利用ArcGIS和Envi组合将等高线转为grid dem: 
   
   在ArcGIS中生成数据库文件,导入等高线 
   1、在ArcCatalog中创建一个Personal GeoDatabase(Access文件)tempdb(不直接用shp文件是有原因的,后面会讲到)。 
   2、右键点击tempdb,“导入”要转的cad文件的线层,导入名为Contour1。 
   注意:导入时的命名,我之前就因为文件名用了“-”而一直不成功;不要选择“导出”功能,不知为何,从cad文件的线层“导出”到tempdb中,转出的数据特别大! 
   
   在ArcGIS中对冗余数据进行处理 
   导入CAD过程中产生中产生一些数据冗余。因此,数据处理前,需要先排除冗余数据的干扰。 
   从CAD导入的数据Contour1,在ArcMap中打开,多了很多很小的点和线(不知为何形成)。经观察得出规律,这些多出来的数据的属性“Entity”为“Insert”或“Line”,而有效数据“Entity”属性为“Polyline”。 
   1、点击“StartEditing”开始编辑数据。 
   2、“Selection->Select by Attribute”中选择属性为“Insert”和“Line”的数据,删除。 
   3、“StopEditing”,保存编辑结果。   
   从CAD文件中导入的图层Contour1,有很多没用的属性,可以在“ArcCatalog”或“ArcMap”中将其删掉,只保留“Elevation”字段(等高线的高度)(本来,Contour1的“shape”字段,也就是空间数据字段,已经包含了高度信息,我们之所以保留“Elevation”字段,是因为后面即将采用的envi中不支持这个高度信息)。鉴于Elevation字段跟我们下面用的envi存在冲突,需要对其重命名。由于Arcgis不支持属性字段名的修改(很奇怪),我们在Access中打开tempdb,修改Contour表的Elevation字段为Elev。导出tempdb中的contour1层为.shp文件contour1.shp。 
   
    在envi中将等高线生成Grid DEM(操作软件为envi4.0) 
  1、采用envi导入contour1。(注:直接在envi导入dxf格式的等高线会产生错误(不知为何)。将其导入后,信息会变得混乱,图像也发生错误。) 
    2、导入后,Envi会生成contour1.evf(envi自己的格式)。 
    3、选择菜单Topographic->Convert Contours to dem,选择contour1.evf,在“Convert Vector Elevation Contours to Raster DEM”对话框中要设置: 
    Elevation Attribute Column:Elev 
    Output Pixel Size: 5 
    Output Data Type: Floating Point 
    Gridding Interpolation Method:Linear(选Quintic出来的图不对) 
    Extrapolate to Edge of Image:No(选yes花很长时间出来的结果还不对) 
    4、从Envi的菜单File->Save File As->Tiff/GeoTiff将envi的dem文件转存为geoTiff格式。 
    附:在envi中导入.shp数据的时候,可以加入多个.shp数据,不知这是否能用来加入高程特征点。 
   
    方法2:只采用ArcGIS软件,将等高线转为Grid DEM 
    要点简介:用ArcGIS的Toolbox工具集中选择“Spatial Analyst Extension (SAE)”和“3D Analyst Extension (3DAE)”生成Grid DEM。   
   
    以下是具体步骤: 
    1、在ArcMap中打开cad等高线文件,导出为contour1.shp。 
    2、在3DAE中选择Create/MOdify Tin->Create Tin From Features,选定文件contour1.shp,“Height source”对应选择“Elevation”字段,选择“Triangulate as MassPoint”,请看ArcGIS的相关文档确定其他几个选项的意义。 
    3、生成Tin。如果有特征点,可通过Add Features to Tin来添加。 
    4、利用Convert->Tin to Raster将Tin转为Raster。 
    5、在ArcMap中,将生成的Raster数据保存为GeoTiff的Grid DEM。   
   
    注意:a.还可以将Tin的节点保存为一个point数据集,然后利用Interpolate->中的任何一种方法来生成Raster。   
    b.ArcMap保存的GeoTiff的Grid DEM的无效值是很奇怪的一个值,需要修改为合适的高程值,0或-9999之类。       
    c.直接用CAD文件的Polyline层数据生成grid总是出错(不知为何),所以将数据先转为ArcGIS的数据(比如.shp格式)再进行处理,避免出错。   
    d.Arcgis的SAE中,有一个功能直接将Feature数据转为Raster,此文件与上述方法生成的Grid DEM有区别。此方法出来的结果,矢量对应坐标有高程的,对应raster的位置值为这个高程,其他位置为空。 
    e.ArcGIS的工作路径中不能含有中文,我就是因为这个而试了很久,所以改用所以改用了envi很麻烦的生成DEM。

 

++++++++++++++++++

dem如果只用等高线生成,不是很好,最好配合高程点,还有山区用的断裂线,不过如果只是为三维展现用,10m左右精度,用那种方式都可以