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工具箱下载在文章最后。


结尾


有疑问欢迎留言询问

(0)

相关推荐