效果展示如题所示,使用 ArcGIS 制作浮雕效果。
实现方法 实现思路使用 arcgis 自带工具实现。 面图层负缓冲 -> 计算欧式距离(裁剪) -> 山体阴影工具 先使用缓冲工具,缓冲距离填负值,在该示例位-6000。负缓冲能让图形往内缩。 接着使用上一步的成果进行欧式距离分析,该工具生成的成果为矩形,所以需要裁剪。 最后使用上一步的成果运行山体阴影工具。 *:缓冲区工具位于:分析工具-领域分析-缓冲区 *:欧式距离工具位于:Spatial Analyst工具-距离分析-欧式距离 *:山体阴影工具位于:Spatial Analyst工具-表面分析-山体阴影 最后设置一下栅格图层的透明度,再与原图层叠加。获得最后的效果。 实现代码由于步骤较多,手动实现较为麻烦。 调用 arcpy 包来实现该功能,然后将其封装为 ArcToolbox 工具,方便调用。 #!/usr/bin/env python# -*- coding:cp936 -*- # --------------------------------------------------------------------------- # Author: LiaoChenchen # Created on: 2020/4/22 16:44 # Reference: """ Description: 浮雕制作工具,构建阴影栅格,设置50%透明度置于图层下 * 已经导入工具箱 arcgis 10.3 Usage: """ # --------------------------------------------------------------------------- import arcpy def emboss(layer,buffer_distance,out_raster): """ %scratchGDB% :param layer: shapefile :param buffer_distance: inner buffer distance int -300 :param out_raster: output raster :return: None """ # inner buffer in_memory_buffer = "in_memory/buffer02011" arcpy.Buffer_analysis(layer, in_memory_buffer, buffer_distance, "FULL", "ROUND", "NONE", "", "PLANAR") # distance in_memory_euc = "in_memory/euc_distance" arcpy.gp.EucDistance_sa(in_memory_buffer, in_memory_euc, "", "", "") # clip in_memory_clip = "in_memory/clip_raster" arcpy.Clip_management(in_memory_euc, "", in_memory_clip, layer, "", True, False) arcpy.env.addOutputsToMap = True # hill shadow arcpy.gp.HillShade_sa(in_memory_clip, out_raster, "315", "45", "NO_SHADOWS", "1") if __name__ == '__main__': arcpy.env.overwriteOutput = True lyrr_name = arcpy.GetParameterAsText(0) arcpy.AddMessage(lyrr_name) arcpy.AddMessage(type(lyrr_name)) input_distance = arcpy.GetParameterAsText(1) output_raster = arcpy.GetParameterAsText(2) emboss(lyrr_name, input_distance, output_raster) arcpy.RefreshActiveView() arcpy.RefreshTOC() arctoolbox工具箱封装成功的toolbox工具箱下载在文章最后。 结尾 |
|