Script Python para criar tabela usando páginas controladas por dados


11

Estou tentando converter algum script python para exibir uma tabela (com base em um dbf) de recursos localizados em uma página específica orientada a dados. Até agora, tenho o script capaz de atualizar o mapa para a tabela específica, mas ele não atualiza a tabela.

Eu tenho a configuração como três caixas de texto que devem ser atualizadas com três campos específicos quando o usuário executa o script no ArcToolbox.

Alguma sugestão de por que minha tabela não está sendo atualizada?

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

Eu começaria tentando reduzir seu script para um exemplo mais simples. Os objetos estão sendo retornados por ListLayoutElementstipo TextElement? Você pode atualizar um único valor de texto no script, sem nenhum outro código?
ACS

como o scw disse, os elementos estão realmente sendo retornados? Eu adicionaria arcpy.AddMessage ("Found Table1Column1") em cada declaração if e adicionaria arcpy.AddMessage (tab1Col1Txt.text + tab1Col2Txt.text + tab1Col3Txt.text) na área if count <30. Isso dará uma idéia melhor de onde o problema está ocorrendo.
precisa saber é

No código não está claro onde estão os objetos tab1Col1Txt, tab1Col2Txt e tab1Col3Txt. Tente primeiro verificar o que é retornado pela parte row.getValue
Matej

Respostas:


2

Talvez estes exemplos possam ajudar:

DDP com tabelas e gráficos dinâmicos 10.1_v1

Este exemplo demonstra como a API arcpy.mapping é usada para estender os recursos do Data Driven Pages (DDP) para produzir uma série de mapas tabelas e gráficos verdadeiramente dinâmicos

Arcpy.mapping Map Book com tabelas gráficas dinâmicas

Este projeto incorpora Data Driven Pages e arcpy.mapping para construir uma série de mapas que inclui tabelas gráficas dinâmicas.


1
Você pode fornecer mais conteúdo em suas respostas? As respostas apenas ao link não são preferenciais, pois o link pode mudar com o tempo.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.