ArcGIS 每天一个高级制图诡计:2 浮雕效果
效果展示
如题所示,使用 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工具箱下载在文章最后。
结尾
有疑问欢迎留言询问