1 任务需求

  首先,我们来明确一下本文所需实现的需求。

  现有通过这篇博客(https://blog.csdn.net/zhebushibiaoshifu/article/details/123527646)所绘制的北京市在2019年05月18日00时至23时(其中不含19时)等23个逐小时PM2.5浓度插值数据栅格图层,每小时一个图层,因此共23个图层;以当日10时为例,该时刻的栅格图层如下所示。

  我们希望做到的有两点。首先,我们可以看到前述23个栅格图层的符号系统都为灰度拉伸的状态,因此希望按照一个给定的模板图层文件m.lyr,调整这23个栅格图层的样式(即拉伸的颜色),并分别以.lyr格式导出这23个栅格图层文件;且希望导出图层文件的文件名包含具体的时刻。如下图所示。

  第二点希望做到的是,将每一个栅格图层都设置为彩色后,添加图名、指北针、比例尺等地图要素,并导出为图片格式。以当日10时、20时为例,我们所希望导出的图片如下所示。

  且希望导出图片的文件名同样包含具体的时刻。

2 代码实现

  了解了需求后,我们就基于Python中的ArcPy模块,进行详细代码的撰写与介绍。

  这里需要说明的是:在编写代码的时候,为了方便执行,所以希望代码后期可以在ArcMap中直接通过工具箱运行,即用到Python程序脚本新建工具箱与自定义工具的方法;因此,代码中对于一些需要初始定义的变量,都用到了arcpy.GetParameterAsText()函数。大家如果只是希望在IDLE中运行代码,那么直接对这些变量进行具体赋值即可。关于Python程序脚本新建工具箱与自定义工具,大家可以查看这篇博客(https://blog.csdn.net/zhebushibiaoshifu/article/details/121518404)详细了解。

  上面提到需要初始定义的变量一共有七个,其中arcpy.env.workspace参数表示当前工作空间;mxd_file参数表示后期批量出图时,提供地图要素参考信息的地图文档.mxd文件;lyr_file参数表示后期批量出图时,提供地图着色参考信息的模板图层.lyr文件;mask_path参数表示前述插值栅格图层所保存的路径;new_lyr_path参数表示插值栅格图层经过样式修改,并转为图层文件后的保存路径;png_path参数表示最终出图结果的保存路径;dpi参数表示最终出图结果的图像分辨率,单位为DPI(Dots per Inch)。

  其中,上述第二个参数,即提供地图要素参考信息的地图文档.mxd文件需要由用户自行创建,并在其中配置好图名、图例、指北针、比例尺等地图要素的名称、文本、位置、样式等信息。或许这么说有点不清楚,大家看下面这幅图就能比较容易明白了。

  没错,这个提供地图要素参考信息的地图文档.mxd文件其实就是一个在Layout View中设置好各种地图要素位置、大小、字体、颜色等的地图文档文件;它就相当于是一个模板,这个模板里各种地图要素长什么样子,后期我们批量出图结果图的地图要素就长什么样子。

  此外,不知道为什么,在我的ArcMap中似乎偶尔会出现无法有效执行lyr.visible=Falsearcpy.mapping.RemoveLayer(data_frame,new_lyr[0])等代码情况;因此若直接在上述地图文档文件中配置图例,最终出图结果有时会出现多个图例堆叠,不能保证出图结果百分之百完美。基于此,选择将图例格式元素(elm.name==”title”)转换为由一个图片格式元素(elm.name==”pic”)与两个文本格式元素(elm.name==”text”)组成的新元素,从而实现最终结果图中图例的绘制。

  如果大家还是不明白,可以直接下载我的这一.mxd文件;下载链接:https://pan.baidu.com/s/18l0l-kjPfdjV1UYcpkKg-w?pwd=fkxx;提取码:fkxx。

  具体代码如下。

# -*- coding: utf-8 -*-
# @author: ChuTianjiaimport arcpyarcpy.env.workspace=arcpy.GetParameterAsText(0)
mxd_file=arcpy.GetParameterAsText(1)
lyr_file=arcpy.GetParameterAsText(2)
mask_path=arcpy.GetParameterAsText(3)
new_lyr_path=arcpy.GetParameterAsText(4)
png_path=arcpy.GetParameterAsText(5)
dpi=arcpy.GetParameterAsText(6)my_mxd=arcpy.mapping.MapDocument(mxd_file)
data_frame=arcpy.mapping.ListDataFrames(my_mxd)[0]
my_lyr=arcpy.mapping.Layer(lyr_file)
layer_list=arcpy.mapping.ListLayers(my_mxd)my_mxd.activeView="PAGE_LAYOUT"tif_file_list=arcpy.ListRasters("BJ_hour_*","TIF")
for raster in tif_file_list:# Import the mask layer into ArcMapraster_file=mask_path+"\\"+rasterarcpy.MakeRasterLayer_management(raster_file,raster.strip(".tif"))# Modify the style of the mask layer according to the reference layerarcpy.ApplySymbologyFromLayer_management(raster.strip(".tif"),lyr_file)new_lyr_file=new_lyr_path+"\\"+raster.strip(".tif")+".lyr"# Save and import the mask layer after modifying the stylearcpy.SaveToLayerFile_management(raster.strip(".tif"),new_lyr_file)arcpy.AddMessage("{0} has been saved.".format(raster.strip(".tif")+".lyr"))new_lyr=arcpy.mapping.Layer(new_lyr_file)arcpy.mapping.AddLayer(data_frame,new_lyr,"TOP")# Modify the image namefor element in arcpy.mapping.ListLayoutElements(my_mxd,"TEXT_ELEMENT"):if element.name=="title":element.text="Interpolation Map of PM2.5 Concentration\n at {0}:00 on May 18, 2019, Beijing".format(raster[8:10])new_lyr.visible=True# Modify the legend (see the program usage document for details)max_pixel=arcpy.GetRasterProperties_management(new_lyr,"MAXIMUM").getOutput(0)[0:5]min_pixel=arcpy.GetRasterProperties_management(new_lyr,"MINIMUM").getOutput(0)[0:5]for element in arcpy.mapping.ListLayoutElements(my_mxd,"TEXT_ELEMENT"):if element.name=="MAX":element.text="{:0>5.2f}".format(float(max_pixel))if element.name=="MIN":element.text="{:0>5.2f}".format(float(min_pixel))# Export to picture formatpng_file=png_path+"\\"+raster.strip(".tif")+".png"arcpy.mapping.ExportToPNG(my_mxd,png_file,resolution=dpi)arcpy.AddMessage("{0} has been saved.".format(raster.strip(".tif")+".png"))new_lyr.visible=Falsearcpy.mapping.RemoveLayer(data_frame,new_lyr[0])

3 运行结果

  执行上述代码,具体得到的结果其实在本文开头也就和大家讲了,这里就不再赘述。

  不过还有一点,就是如果大家是在ArcMap中直接通过工具箱运行上述代码,则可以看到代码运行过程中出现的提示——程序运行过程中,对每一个时刻的PM2.5浓度数据分别完成图层格式保存与图片格式保存等2个操作后,均会输出执行结果,方便用户获知程序的执行情况。

欢迎关注公众号/CSDN/知乎/微博:疯狂学习GIS

Python中ArcPy实现ArcGIS自动批量制图与地图要素批量设置相关推荐

  1. Python中ArcPy实现对大量长时间序列栅格遥感影像批量逐像元求取像素平均值

      本文介绍基于Python中ArcPy模块,对大量长时间序列栅格遥感影像文件的每一个像元进行多时序平均值的求取.   在遥感应用中,我们经常需要对某一景遥感影像中的全部像元的像素值进行平均值求取-- ...

  2. Python中ArcPy栅格裁剪栅格:批量对齐栅格图像范围并统一行数与列数

      本文介绍基于Python中ArcPy模块,实现基于栅格图像批量裁剪栅格图像,同时对齐各个栅格图像的空间范围,统一其各自行数与列数的方法.   首先明确一下我们的需求.现有某一地区的多张栅格遥感影像 ...

  3. Python中ArcPy实现栅格图像文件由HDF格式批量转换为TIFF格式

      本文介绍基于Python中Arcpy模块,实现大量HDF格式的栅格图像文件批量转换为TIFF格式的方法.   首先,来看看我们想要实现的需求.   在一个名为HDF的文件夹下,有五个子文件夹:每一 ...

  4. Python中使用sentinelsat包自动下载Sentinel系列数据

    Python中使用sentinelsat包自动下载Sentinel系列数据 前言 普通下载 使用工具批量下载Sentinel 数据 使用SNAP批量下载 第三方软件或网站批量下载 Sentinel-1 ...

  5. python脚本自动运行失败_解决Python中定时任务线程无法自动退出的问题

    python的线程有一个类叫Timer可以,用来创建定时任务,但是它的问题是只能运行一次,如果要重复执行,则只能在任务中再调用一次timer,但这样就存在新的问题了,就是在主进程退出后,不能正常退出子 ...

  6. python threading timer 退出_解决Python中定时任务线程无法自动退出的问题

    python的线程有一个类叫Timer可以,用来创建定时任务,但是它的问题是只能运行一次,如果要重复执行,则只能在任务中再调用一次timer,但这样就存在新的问题了,就是在主进程退出后,不能正常退出子 ...

  7. Python中ArcPy读取Excel表格数据创建矢量要素图层并生成属性表字段与内容

    1 任务需求   首先,我们来明确一下本文所需实现的需求.   现有一个记录北京市部分PM2.5浓度监测站点信息的Excel表格数据,格式为.xls:文件内包含站点编号.X与Y坐标.站点名称等四列数据 ...

  8. python set函数排序_python的set函数 Python中的set会自动排序

    python中如何在set中添加元素?语句是什么 python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), inters ...

  9. Python中ArcPy实现Excel时序数据读取、反距离加权IDW插值与批量掩膜

    1 任务需求   首先,我们来明确一下本文所需实现的需求.   现有一个记录有北京市部分PM2.5浓度监测站点在2019年05月18日00时至23时(其中不含19时)等23个逐小时PM2.5浓度数据的 ...

最新文章

  1. C/C++在Android开发中的应用
  2. boost::mpl模块实现inherit相关的测试程序
  3. android 半透明色值_Android 色值转换成透明度色值
  4. 基于点云的视觉引导系统
  5. Android不同版本下Notification创建方法
  6. python 桌面数据库_python数据库操作笔记
  7. 计算机绘图国标规定,机械制图教程(1.1)国家标准关于制图的一般规定
  8. 大屏可视化项目之智慧楼宇 智慧园区项目 智慧城市项目 智慧水库项目 RayData 效果 U3D项目 UE4项目 ventuz 系列 三维可视化 大屏可视化
  9. Unity3D Odin Inspector 简单介绍与入门
  10. 耗纸古文风之四--登高
  11. 两个tplink路由器有线桥接_如何装2个tplink无线路由器_两个tplink路由器怎么设置?-192路由网...
  12. Java面向对象练习题之银行卡类和用户类
  13. 关于SNES9X的编译
  14. 梅宏院士:大数据技术的四大挑战与十大趋势
  15. 计算机硬件科研cpu飞腾,电脑硬件飞腾cpu什么架构
  16. Oracle报错1031,dataguard 归档日志报1031错误的一次处理
  17. 车站椅子上密密麻麻的孔,是为了方便放屁吗?
  18. Java基础编程之分解质因数
  19. 【管理与控制】干线控制
  20. js中singleton模式解析及运用

热门文章

  1. python视频教程大全集下载啦!超级全的教程!
  2. 我的2012---动荡
  3. android短视频技术,Android短视频开发都需要什么技术?
  4. Microsoft365账号登录安全保护:使用microsoft authenticator应用验证
  5. emd_visu函数_学习笔记:EMD方法
  6. Syncnavigator破解版注册机
  7. 深入了解人工智能在建筑领域中的应用
  8. 大数据之Phoenix和Squirrel
  9. 让我们使用JavaScript制作一个可以正常工作的Guitar
  10. 轩辕传奇服务器合并信息,【数据更新】12月11日12月13日部分服务器数据互通公告...