實(shí)驗(yàn)準(zhǔn)備:
一、分幅DEM。
二、準(zhǔn)備檢測點(diǎn),且檢測點(diǎn)根據(jù)DEM同樣分幅。
關(guān)于獲取檢測點(diǎn),方法同樣有很多,但比較常用的是用GPS到實(shí)地測量,現(xiàn)場采集高程點(diǎn),根據(jù)DEM的分幅,每幅盡量均勻分幅,疏密適中,具體要求可參考檢測DEM的相關(guān)規(guī)范。
三、把GPS測量點(diǎn)轉(zhuǎn)為shp格式的點(diǎn)要素文件。其方法可以導(dǎo)入CAD生成DWG文件,再用ArcMap轉(zhuǎn)為shp格式。
四、打開Python IDE,Ctrl+N新建File。
輸入代碼:
運(yùn)行結(jié)果生成“CG.shp”且屬性表已計(jì)算差值。
原理:主要使用arcpy.sa.ExtractValuesToPoints()方法來檢測。這個方法的功能是把GPS測量采集的檢測點(diǎn)疊加到檢查tif格式的DEM影像上,然后提取在DEM上疊加的檢測點(diǎn)同位置的高程值,然后在屬性表中計(jì)算差值,然后做平差或相關(guān)統(tǒng)計(jì)來評估DEM的精度。如上圖計(jì)算成果height字段是檢測點(diǎn)測量的高程值,RASTERVALU字段是在DEM上提取過來的高程值,系統(tǒng)自行添加該字段。而Difference字段是后來添加的字段,通過簡單的字段計(jì)算計(jì)算兩高程值之差。
知識小點(diǎn):
arcpy.env.workspace=path 當(dāng)前工作空間的環(huán)境設(shè)置,在前面設(shè)好路徑,接下來需要用到輸入或輸出路徑的參數(shù)就不必再填具體的路徑了。參數(shù)path是 數(shù)據(jù)輸入或輸出的默認(rèn)位置。
arcpy.ListRasters({wild_card}, {raster_type}) 返回工作空間中柵格數(shù)據(jù)的列表函數(shù)。wild_card可選參數(shù),用結(jié)果限制返回,如as*就回返回帶as字母的名字的柵格數(shù)據(jù),默認(rèn)返回所有。raster_type返回柵格的文件格式,有JPG,TIF,PNG等格式。
arcpy.ListFeatureClasses({wild_card}, {feature_type}, {feature_dataset})返回工作空間的要素類。
其參數(shù)與ListRasters()方法差不多,feature_type可選參數(shù)可在Pyyhon中print arcpy.ListFeatureClasses.__doc__查看。
arcpy.sa.ExtractValuesToPoints((in_point_features, in_raster, out_point_features, {interpolate_values}, {add_attributes}) Spatial Analyst模塊下的分析工具,是用點(diǎn)要素提取柵格像元值,并把這些值保存到輸出要素中。
參數(shù):
in_point_features必選參數(shù)是用于提取像元的點(diǎn)要素
in_raster必選參數(shù)是被提取的柵格數(shù)據(jù)
out_point_features必選參數(shù)是把提取值保存輸出要素的保存路徑和要素名稱,其余可用.__doc__方法查看。還有注意的是用法。
arcpy.management.AddField(in_table, field_name, field_type, {field_precision}, {field_scale}, {field_length}, {field_alias}, {field_is_nullable}, {field_is_required}, {field_domain}) 向要素添加字段的方法。參數(shù)非常多,還可以用__doc__方法查看。
參數(shù):in_table需要添加字段的要素表
field_name添加字段的名稱
field_type添加字段的類型
問題延伸一下,能否把這個方法應(yīng)用到等高線的精度檢測呢?把繪制等高線的高程點(diǎn)生成DEM,再利用這個方法,但不知道能不能符合相關(guān)規(guī)范,有待試驗(yàn)。
寫的有點(diǎn)混亂,如果看官能湊合看就點(diǎn)個贊吧!
本文作者:pythonGIS
本文作者:pythonGIS