ArcMap 数据驱动页面动态特征标签

0 投票
1 回答
3302 浏览
提问于 2025-04-16 14:22

我正在想办法在地图上切换两组标签。我有一张标注了邮政编码的地图,我想输出两张地图:一张显示邮政编码标签(ZIP),另一张显示我从数据中关联的一个字段的值(叫做chrlabel)。我的目标是让一张地图展示每个邮政编码的数据,另一张地图则作为参考显示邮政编码。

我最初的尝试是这样的,但我没能成功:
1) 我在地图上添加了第二个数据框,并增加了一个新图层,里面有两个多边形,分别命名为“zip”和“chrlabel”。
2) 我用这个框来启用数据驱动页面,然后把它隐藏在主框后面(我不想看到那些多边形,我只是想用它们来控制数据驱动页面)。
3) 在邮政编码标签中,我尝试写了一个VBScript表达式,像这样伪代码:
test = "
如果 test = "zip" 那么
label = ZIP
否则
label = CHRLABEL
结束如果

这样做不行,因为动态文本在VBScript中无法解析为页面名称。
有没有办法在VBScript中调用页面名称,以便我能让这个工作?

如果不行,还有其他方法吗?
我另一个想法是给图层添加一个新字段,里面填入1或0。这样我就可以把if-then测试条件替换为if NewField = 1。

然后我只需要写一个脚本,当数据驱动页面切换到第二页时,更新所有邮政编码特征的NewFields。有没有办法在数据驱动页面变化时触发一个脚本(Python或其他)?

谢谢

1 个回答

1

虽然已经晚了8个月,但为了后人着想……

你自己给自己增加了很多麻烦,其实设置一个重复的图层,用不同的图层,然后调整图层的可见性会简单得多。我对VBScript这类东西不太熟悉,但在Python中(使用ESRI的库),代码大概是这样的 [python 2.6, ArcMap 10 - 仅供参考,没调试过,但我经常做类似的事情]:

from arcpy import mapping

## Load the map from disk
mxdFilePath = "C:\\GIS_Maps_Folder\\MyMap.mxd"
mapDoc = mapping.MapDocument(mxdFilePath)

## Load map elements
dataFrame = mapping.ListDataFrames(mapDoc)[0]   #assumes you want the first dataframe; you can also search by name
mxdLayers = mapping.ListLayers(dataFrame)

## Adjust layers
for layer in mxdLayers:
    if (layer.name == 'zip'):
        zip_lyr = layer
    elif(layer.name == 'sample_units'):
        labels_lyr = layer

## Print zip code map
zip_lyr.visible = True
zip_lyr.showLabels = True
labels_lyr.visible = False
labels_lyr.showLabels = False

zip_path = "C:\\Output_Folder\\Zips.pdf"
mapping.ExportToPDF(mapDoc, zip_path, layers_attributes="NONE", resolution=150)

## Print labels map
zip_lyr.visible = False
zip_lyr.showLabels = False
labels_lyr.visible = True
labels_lyr.showLabels = True

labels_path = "C:\\Output_Folder\\Labels.pdf"
mapping.ExportToPDF(mapDoc, labels_path, layers_attributes="NONE", resolution=150)

## Combine files (if desired)
pdfDoc = mapping.PDFDocumentCreate("C:\\Output_Folder\\Output.pdf"")
pdfDoc.appendPages(zip_path)
pdfDoc.appendPages(labels_path)
pdfDoc.saveAndClose()

至于数据驱动页面,你可以一次性导出所有页面,或者用循环导出,并调整你想要的内容,虽然我不太明白如果你用类似上面的方法,为什么还需要这样做。ESRI的文档和示例其实写得很好。(你应该能很容易从那个页面找到其他Python的文档。)

撰写回答