从网上搜集的资料,先收藏一下,以备后用。
CAD文件在通常的GIS软件中,都会对应多个图层,至少点、线、面层各一个,当然可能一些层中没有数据。cad格式的等高线主要应该是线信息,当然可能有面和特征点。如果面层有数据,需将面转为线,然后将线部分倒成一个gis线数据层。如果有特征点,则导成一个点层。这次的等高线数据中面层和点层没有数据。
下面是利用ArcGIS和Envi组合将等高线转为grid dem的步骤:
在ArcCatalog中创建一个Personal GeoDatabase(Access文件)tempdb。(不直接用shp文件是有原因的,后面会讲到)。右键点击tempdb,导入要转的cad文件的线层,导入名为Contour1。注意导入时取名字要有效,我之前就因为文件名用了-而一直不成功。不要选择cad文件的层导出到tempdb中,不知为何,这样转出的数据特别大!
在ArcMap中打开Contour1,看到多了很多很小的点和线,不知为何形成。看出规律,这些多出来的数据其属性Entity为Insert或Line,而有效数据Entity属性为Polyline。点击StartEditing开始编辑数据。通过Selection-> Select by Attribute中选择属性为Insert和Line的,删除,StopEditing,保存编辑结果。
从cad文件中导入的图层有很多没用的属性,可以在ArcCatalog或ArcMap中删掉这些属性,只要保留Elevation字段,这个字段是等高线的高度。(本来Contour1的shape字段,也就是空间数据字段已经包含了高度信息,但后面我们要用的envi中不支持这个高度信息,所以我们保留Elevation字段)。Elevation字段跟我们下面用的envi有冲突,所以要改掉。很奇怪,Arcgis不支持属性字段名的修改,所以我们在Access中打开tempdb,修改Contour表的Elevation字段为Elev。导出tempdb中的contour1层为.shp文件contour1.shp。
下面用Envi来通过等高线生成grid dem,我用的是envi4.0。envi支持一些常用的矢量数据。dxf本来是直接支持的,但其导入后,信息比较乱,图也不对,不知为何。用envi导入contour1,Envi会生成其自己的格式contour1.evf。选择菜单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花很长时间出来的结果还不对)
最后从Envi的菜单File-> Save File As-> Tiff/GeoTiff将envi的dem文件转存为geoTiff格式。
在envi中导入.shp数据的时候,可以加入多个.shp数据,不知这是否能用来加入高程特征点。
也可以只通过ArcGIS功能就能达到将等高线转为grid dem
用ArcGIS的Spatial Analyst Extension(SAE for short)和3D Analyst Extension(3DAE for short)生成Grid DEM。
以下是步骤:
注意:路径中不能有中文,我就是因为这个而试了很久,所以改用envi很麻烦的生成了dem。
在ArcMap中打开cad等高线文件,导出为contour1.shp。
将在3DAE中Create/MOdify Tin-> Create Tin From Features,选择contour1.shp,Height source为Elevation字段,Triangulate as MassPoint,其他几个选项的意义请看ArcGIS的相关文档。生成了Tin。如果有特征点,可通过Add Features to Tin来添加。
再利用Convert-> Tin to Raster将Tin转为Raster,最后在ArcMap中将这个Raster数据保存为GeoTiff的Grid DEM。
还可以将Tin的节点保存为一个point数据集,然后利用Interpolate-> 中的任何一种方法来生成Raster。
ArcMap保存的GeoTiff的Grid DEM的无效值是很奇怪的一个值,需要修改为合适的高程值,0或-9999之类。
不知为何直接用CAD文件的Polyline层数据生成grid总是出错,所以先将数据转为ArcGIS的数据(比如.shp格式)。
SAE有一个将Arcgis的Feature数据转为Raster,开始以为是生成grid dem,结果发现出来的结果,矢量对应坐标有高程的,对应raster的位置值为这个高程,其他位置为空。