Python Script per creare una tabella usando le pagine guidate dai dati


11

Sto cercando di convertire alcuni script Python per visualizzare una tabella (basata su un dbf) di funzionalità che si trovano all'interno di una specifica pagina guidata dai dati. Finora, ho lo script in grado di aggiornare correttamente la mappa alla tabella specifica, ma non aggiorna la tabella.

L'ho impostato come tre caselle di testo che dovrebbero essere aggiornate con tre campi specifici quando l'utente esegue lo script da ArcToolbox.

Qualche suggerimento sul perché la mia tabella non si aggiorna?

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

Comincerei cercando di ridurre la tua sceneggiatura a un esempio più semplice. Gli oggetti restituiti sono ListLayoutElementsdi tipo TextElement? Puoi aggiornare un singolo valore di testo nello script, senza alcun altro codice?
scw,

come ha detto scw, gli elementi vengono effettivamente restituiti? Aggiungerei arcpy.AddMessage ("Found Table1Column1") in ciascuna istruzione if e quindi aggiungere arcpy.AddMessage (tab1Col1Txt.text + tab1Col2Txt.text + tab1Col3Txt.text) nell'area if count <30. Questo darà un'idea migliore di dove si sta verificando il problema.
eseglem,

Dal codice non è chiaro dove sono definiti gli oggetti tab1Col1Txt, tab1Col2Txt e tab1Col3Txt. Prima prova a verificare cosa viene restituito dalla parte row.getValue
Matej

Risposte:


2

Forse questi esempi potrebbero aiutare:

DDP con tabelle e grafici dinamici 10.1_v1

Questo esempio dimostra come l'API arcpy.mapping viene utilizzata per estendere le funzionalità di Data Driven Pages (DDP) per produrre una serie di mappe tabelle e grafici veramente dinamici

arcpy.mapping Map Book con tabelle grafiche dinamiche

Questo progetto incorpora Data Driven Pages e arcpy.mapping per creare una serie di mappe che include tabelle grafiche dinamiche.


1
Puoi fornire più contenuti nelle risposte? Le risposte solo al link non sono preferite poiché il link potrebbe cambiare nel tempo.
artwork21
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.