Script Python pour créer une table à l'aide de pages dynamiques


11

J'essaie de convertir un script python pour afficher un tableau (basé sur un dbf) de fonctionnalités situées dans une page spécifique pilotée par les données. Jusqu'à présent, le script a réussi à actualiser la carte dans la table spécifique, mais il ne met pas à jour la table.

Je l'ai configuré en trois zones de texte qui doivent être mises à jour avec trois champs spécifiques lorsque l'utilisateur exécute le script à partir d'ArcToolbox.

Des suggestions sur la raison pour laquelle ma table ne se met pas à jour?

import arcpy, sys, os

#Reference current MXD
mxd = arcpy.mapping.MapDocument("current")

#Get input parameter
Name = arcpy.GetParameterAsText(0)

#Reference  data frames
mapatlasDF = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
locatorDF = arcpy.mapping.ListDataFrames(mxd, "Locator Map")[0]

#Reference appropriate layers
atlasLyr = arcpy.mapping.ListLayers(mxd, "PinalCreekMapAtlas_HalfMile", mapatlasDF)[0]
locatorLyr = arcpy.mapping.ListLayers(mxd, "Locator Map", locatorDF)[0]
atlasoutlineLyr = arcpy.mapping.ListLayers(mxd, "Map Atlas Outline", locatorDF)[0]

#Reference layout elements by calling ListLayoutElements 
for elm in arcpy.mapping.ListLayoutElements(mxd):
  if elm.name =="Table1Column1": tab1Col1Txt = elm
  if elm.name =="Table1Column2": tab1Col2Txt = elm
  if elm.name =="Table1Column3": tab1Col3Txt = elm

#Reference the Data Driven Page object
ddp = mxd.dataDrivenPages

#Set the current page to be the one selected in the script tool
arcpy.AddMessage(Name)

pageID = mxd.dataDrivenPages.getPageIDFromName(str(Name))
mxd.dataDrivenPages.currentPageID = pageID

#Set the appropriate definition queries
atlasLyr.definitionQuery = "Name = '" + Name +  "'"
locatorLyr.definitionQuery = "Name = '" + Name +  "'"
atlasoutlineLyr.definitionQuery = "Name <> '" + Name +  "'"

#Update Sheet Index data frame
arcpy.SelectLayerByAttribute_management(locatorLyr, "NEW_SELECTION", "\"Name\" = '" + Name + "'")
locatorDF.panToExtent(locatorLyr.getSelectedExtent())

#Reference Affected Parcels table and select appropriate records
parcelTable = arcpy.mapping.ListTableViews(mxd, "AffectedParcels")[0]

#Build query and create search cursor to loop through rows
parcelFieldValue = "Page " + Name
queryExp = "\"MapPage\" = '" + parcelFieldValue + "'"  #e.g., "MapPage" = 'Page 01'
parcelRows = arcpy.SearchCursor(parcelTable.dataSource, queryExp)

#Clear all table text values
tab1Col1Txt.text = " "; tab1Col2Txt.text = " "; tab1Col3Txt.text = " "

#iteate through each row, update appropiate text
count = 0
for row in parcelRows:
  if count < 30: #Table1 - static position
    tab1Col1Txt.text = tab1Col1Txt.text + row.getValue("OwnerName") +"\n"
    tab1Col2Txt.text = tab1Col2Txt.text + row.getValue("APN") + "\n"
    tab1Col3Txt.text = tab1Col3Txt.text + row.getValue("LengthTrail") + "\n"
  if count ==30:  
    arcpy.AddMessage("Table Overflow") #The code could be reworked to show the last 90 records
  count = count + 1

arcpy.RefreshActiveView()
arcpy.AddMessage("PROCESS COMPLETED")

Je commencerais par essayer de réduire votre script à un exemple plus simple. Les objets sont-ils retournés par ListLayoutElementstype TextElement? Pouvez-vous mettre à jour une seule valeur de texte dans le script, sans aucun autre code?
scw

comme l'a dit scw, les éléments sont-ils réellement retournés? J'ajouterais arcpy.AddMessage ("Found Table1Column1") dans chaque instruction if, puis ajouter arcpy.AddMessage (tab1Col1Txt.text + tab1Col2Txt.text + tab1Col3Txt.text) dans la zone if count <30. Cela vous donnera une meilleure idée de l'endroit où le problème se produit.
eseglem

Du code n'est pas clair où sont les objets tab1Col1Txt, tab1Col2Txt et tab1Col3Txt sont définis. Essayez d'abord de vérifier ce qui est retourné par la partie row.getValue
Matej

Réponses:


2

Ces exemples pourraient peut-être aider:

DDP avec tableaux et graphiques dynamiques 10.1_v1

Cet exemple montre comment l'API arcpy.mapping est utilisée pour étendre les capacités des pages dynamiques (DDP) afin de produire une série de cartes de tableaux et graphiques vraiment dynamiques

Arcpy.mapping Map Book avec tableaux graphiques dynamiques

Ce projet intègre des pages dynamiques et arcpy.mapping pour créer une série de cartes comprenant des tableaux graphiques dynamiques.


1
Pouvez-vous fournir plus de contenu dans vos réponses? Les réponses de lien uniquement ne sont pas préférées car le lien peut changer avec le temps.
artwork21
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.