电竞比分网-中国电竞赛事及体育赛事平台

分享

更好的等值線

 GIS薈 2021-09-19

前言:直接使用等值線工具制作出的等值線非常丑,只需一小步,就能完全改變這種情況,制作出專業(yè)級的等值線圖。

等值線

等值線,是一大類的統(tǒng)稱,比如等高線、等溫線、等降雨線等,是一種非常非常常見的數(shù)據(jù)可視化方法,幾乎所有人都見過。

在我做耕地質(zhì)量評價的時候需要制作有機質(zhì)、有效磷等參數(shù)的等值線圖,然后我就直接使用 ArcGIS 自帶的等值線工具:Spatial Analyst 工具->表面分析->等值線。

等值線工具設(shè)置界面

直接使用該工具制作有機質(zhì)柵格的等值線圖,結(jié)果非常的“潦草”,基本上是不能使用的。

普通方法制作的等值線圖

那么如何才能制作出光滑清晰的等值線圖呢?

其實在使用等值線工具前最好對原始柵格數(shù)據(jù)進行“模糊”處理:

Spatial Analyst 工具->鄰域分析->焦點統(tǒng)計

焦點統(tǒng)計工具可以重新計算柵格中的每一個像元值,計算規(guī)則是根據(jù)指定的像元鄰域內(nèi)的值來計算,可以是鄰域范圍內(nèi)值中最大值、最小值、眾數(shù)、中位數(shù),當然最常見的、默認的是使用平均值,這也是為什么說是“模糊”處理的原因。

焦點統(tǒng)計工具設(shè)置界面

根據(jù)各自的情況選擇合適的領(lǐng)域設(shè)置后(高度、寬度多試試),點擊確認輸出處理后的柵格;

接著使用等值線工具,輸出的等值線結(jié)果如下,是不是順眼多了:

那么試試現(xiàn)成的30米分辨率的 DEM 數(shù)據(jù):

也是同樣的情況,下面左邊的是默認生成的等高線,間距是200米,線條比較曲折同時較為零碎,不利于解譯;

而在對原始 DEM 進行焦點統(tǒng)計后再生成的200米間隔的等高線就非常的平滑、美觀、易于理解。

左:處理前;右:處理后

一鍵制作工具

由于經(jīng)常使用這種功能,我直接寫了一個腳本工具(最后附下載),同時考慮了不規(guī)則柵格在較大鄰域范圍會出現(xiàn)結(jié)果柵格尺寸變大的情況。

# -*- coding:utf-8 -*-from __future__ import absolute_importimport arcpyarcpy.env.overwriteOutput = Truearcpy.CheckOutExtension("Spatial")arcpy.CheckOutExtension("3D")def better_isogram(input_raster, output, neighborhood, distance):    """   直接使用軟件自帶的等值線工具制作柵格的等值線,   線條比較曲折同時較為零碎,不利于解譯;   集成焦點統(tǒng)計工具對原始柵格數(shù)據(jù)處理后再生產(chǎn)等值線圖,   線條清晰光滑,易于解譯和使用。   :param input_raster: 輸入柵格   :param output: 輸出更好的等值線數(shù)據(jù)集。   :param neighborhood: {Int} 鄰域分析,指定的像元范圍   :param distance: {Double} 等值線間隔   :return:   """            # 進行焦點統(tǒng)計分析        fs = arcpy.sa.FocalStatistics    nrt = arcpy.sa.NbrRectangle    neighborhood = int(neighborhood)    neighborhood = nrt(neighborhood, neighborhood, "cell")    fs_result = fs(input_raster, neighborhood, "MEAN")            # 等值線計算        contour = "in_memory/contour"    arcpy.sa.Contour(fs_result, contour, float(distance))            # 獲得輸入柵格范圍矢量 ?注釋一?        domain = "in_memory/domain"    arcpy.RasterDomain_3d(input_raster, domain, "POLYGON")            # 擦除范圍外的線條 ?注釋二?        erase_left = "%scratchFolder%/out172005.shp"    arcpy.AddMessage(neighborhood)    arcpy.Erase_analysis(contour, domain, erase_left)    arcpy.AddMessage(neighborhood)    arcpy.Erase_analysis(contour, erase_left, output)    arcpy.Delete_management(erase_left)    if __name__ == '__main__':    args = tuple(        arcpy.GetParameterAsText(i) for i in range(            arcpy.GetArgumentCount()))    better_isogram(*args)

?注釋一?

RasterDomain_3d 可將柵格的范圍提取保存為矢量數(shù)據(jù)。

?注釋二?

在使用焦點統(tǒng)計功能的時候,設(shè)置到鄰域范圍的選取,如果該值取到50,可以明顯發(fā)現(xiàn)焦點統(tǒng)計后輸出的柵格數(shù)據(jù)大了一圈。

同時在工具箱環(huán)境中設(shè)置柵格范圍、掩膜都不起作用,所以無奈在最后一步使用擦除的方法解決外面多出來的區(qū)域。

最后

該工具命名為更好的等值線,已經(jīng)導入到海怪工具箱中。

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多