一、实现“隐藏”其他要素的方式及与其他方法对比

       网上教程或者相关文章,对于出图时需要“隐藏”其他要素的方式,大多采用“数据驱动”+“数据框裁剪”,或是“压白”等利用其他要素盖住不需要的图形的方法。

        对于“数据驱动”+“数据框裁剪”:会裁剪图形符号,标注的放置也不尽如人意,建立缓冲区进行裁剪又不能满足相邻、相近图斑的出图,会显示出部分相邻图斑,导致出现“线头”等情况。

        对于“压白”:这个槽点就有点多了,会压盖底图要素,不能盖住标注等等。

        本方法采用“数据驱动” + “页面定义” 的方式,实现“隐藏”其他要素。可以完美避开以上问题,并且不需要任何额外的插件、脚本等。(不包括批量出图,批出图的脚本及参数设置在下边)

        -----可能稍微有点长、有点复杂,请耐心看完-----

        -----下面正式开始方法介绍-----

二、方法介绍

        (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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐