2011-03-24 1 views
0

J'essaye de trouver un moyen de changer entre deux séries d'étiquettes sur une carte. J'ai une carte avec les codes postaux qui sont étiquetés et je veux pouvoir produire deux cartes: une avec l'étiquette de code postal (ZIP) et une avec une valeur d'un champ que j'ai joint aux données (appelé chrlabel). Le but est d'avoir une carte montrant des données pour chaque code postal, et une seconde carte donnant le code postal comme référence.ArcMap Data Driven Pages Etiquettes d'entités dynamiques

Ma première tentative que je ne peux pas me travailler ressemble à ceci:
1) J'ai ajouté une seconde trame de données à ma carte et ajouter une nouvelle couche qui contient deux polygones avec des noms « zip » et « chrlabel ».
2) J'utilise ce cadre pour activer les pages pilotées par les données, puis je le cache derrière le cadre principal (je ne veux pas voir ces polygones, je veux juste les utiliser pour contrôler les pages pilotées par les données).
3) Dans les étiquettes de code postal J'ai essayé d'écrire une expression VBScript comme ce pseudo-code:
test = "
Si le test = "zip", puis
label = postal
autre
label = CHRLABEL
endif

cela ne fonctionne pas parce que le texte dynamique ne résout pas le nom de la page dans le VBScript.
Est-il possible d'appeler le nom de la page VBScript pour que je puisse faire ce travail?

Sinon, existe-t-il un autre moyen de le faire?
Mon autre pensée est d'ajouter un autre champ à la couche qui est remplie avec un ou un zéro. Ensuite, je pourrais remplacer la condition de test if-then par if NewField = 1.

Ensuite, je voudrais juste écrire un script qui met à jour tous les NewFields pour les fonctionnalités de code postal lorsque la page pilotée par les données avance à la deuxième page. Existe-t-il un moyen de déclencher un script (python ou autre) lorsqu'une page pilotée par les données change?

Merci

Répondre

1

8 mois trop tard, mais pour la postérité ...

Vous faites des choses difficiles sur vous-même - il serait beaucoup plus facile de mettre en place une double couche et utiliser différentes couches, puis ajuster la visibilité de la couche. Je ne suis pas familier avec VBScript pour ce genre de choses, mais en Python (en utilisant la bibliothèque d'ESRI) cela ressemblerait à quelque chose comme ça [python 2.6, ArcMap 10 - échantillon seulement, n'a pas débogué mais je fais des choses similaires assez souvent] :

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() 

en ce qui concerne les Pages dynamiques vont, vous pouvez les exporter à la fois ou en boucle, et régler tout ce que vous voulez, même si je ne sais pas pourquoi vous auriez besoin si vous utilisez quelque chose de semblable à ce qui précède. Les ESRI documentation and examples sont en fait assez bons à ce sujet. (Vous devriez pouvoir accéder facilement à toute la documentation de Python depuis cette page.)

+0

Merci, ce n'est plus vraiment un problème, mais comme je suis passé plus loin dans l'utilisation de python pour contrôler arcmap, cela semble être le cas ont été le meilleur moyen de le faire. – orh

+0

Avait parcouru mon profil utilisateur et remarqué cette question; soudainement réalisé que l'OQ demandait quelque chose de légèrement différent que je pensais. La meilleure option serait probablement de modifier l'étiquette du calque de la façon suivante: "layer.labelClasses [0] .expression = '[attr_field]'" (remarque: possibilité d'avoir plus d'une étiquette de classe) – brichins