一、实现“隐藏”其他要素的方式及与其他方法对比
网上教程或者相关文章,对于出图时需要“隐藏”其他要素的方式,大多采用“数据驱动”+“数据框裁剪”,或是“压白”等利用其他要素盖住不需要的图形的方法。
对于“数据驱动”+“数据框裁剪”:会裁剪图形符号,标注的放置也不尽如人意,建立缓冲区进行裁剪又不能满足相邻、相近图斑的出图,会显示出部分相邻图斑,导致出现“线头”等情况。
对于“压白”:这个槽点就有点多了,会压盖底图要素,不能盖住标注等等。
本方法采用“数据驱动” + “页面定义” 的方式,实现“隐藏”其他要素。可以完美避开以上问题,并且不需要任何额外的插件、脚本等。(不包括批量出图,批出图的脚本及参数设置在下边)
-----可能稍微有点长、有点复杂,请耐心看完-----
-----下面正式开始方法介绍-----
二、方法介绍
(1)演示数据说明-----------------------------------
矢量数据包含:界址点;登记单元;地类图斑;
ps:本次演示以”登记单元“为单位,进行制图。
数据属性表:
登记单元:有1个字段,内容为”登记单元号“
界址点:有2个字段,”登记单元号“及”界址点号“
ps:也就是一个单元对应多个界址点。地类图斑字段无需在意,仅作为底图展示。
(2)开始调试-----------------------------------
1)将“登记单元”图层复制一个,命名为“登记单元-复制”,并将其轮廓、填充改为“无颜色”
“登记单元-复制”图层,需要关闭标注!!!!!!!!!
ps:复制是选中登记单元图层,复制后,右键“图层”,“粘贴图层”。
2)“数据驱动”复制的图层,名称字段调整为“登记单元号”
ps:名称字段 依据你的数据自定义,但“界址点”(也就是你想要同时隐藏的要素)内需要有字段和“驱动的名称字段”值相同
3)调整“登记单元”和“界址点”的页面定义,如下图,
ps:“页面名称字段”需要与数据驱动字段内存在相同值,也只就同时显示的。本方法是每次显示一个“登记单元”和与其单元号相同的“界址点”
效果如下:其他的单元和其所属界址点就被“隐藏”了
跳转一下数据驱动,试试:
-----只显示当前驱动要素的方法介绍完毕-----
三、批量出图
------------------------------------
arcgis导入脚本方法站内有很多,这里就不介绍了,
然后这个脚本可以自定义命名,但只能出PNG懒得把其他的函数复制上来,
为了自定义命名可以往下翻一下,
站内还有其他批量用数据驱动导图的方法,可以移步,我这边仅自嗨,算是学了大半年交点作业
------------------------------------
出图脚本参数介绍:
1.工程文件:调整好出图布局后保存.mxd工程,可以不关闭工程,此处选择保存的工程,
2.数据驱动要素:选择当前驱动的要素,也就是“登记单元-复制”
3.数据驱动名称字段:(与数据驱动内选择字段一致)
4.文件命名字段:导出PNG图片名字(不需要后缀),不选默认为数据驱动字段
5.6.略
脚本参数配置:
脚本代码:
import arcpy
import os
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
mxd_path = arcpy.GetParameterAsText(0)
fc_path = arcpy.GetParameterAsText(1)
ddp_FieldName = arcpy.GetParameterAsText(2)
Export_NameField = arcpy.GetParameterAsText(3)
output = arcpy.GetParameterAsText(4)
rtion = int(arcpy.GetParameterAsText(5))
if Export_NameField in ['', ' ', None]:
Export_NameField = ddp_FieldName
x = {}
cursor = arcpy.SearchCursor(fc_path)
for row in cursor:
x[row.getValue(ddp_FieldName)] = row.getValue(Export_NameField)
mxd = arcpy.mapping.MapDocument(mxd_path)
for pageName in x.keys():
pageID = mxd.dataDrivenPages.getPageIDFromName(pageName)
mxd.dataDrivenPages.currentPageID = pageID
arcpy.mapping.ExportToPNG(mxd, os.path.join(output, '{}.png'.format(x[pageName])), resolution=rtion)
del mxd