데이터 기반 페이지를 사용하여 테이블을 작성하는 Python 스크립트


11

특정 데이터 기반 페이지에있는 기능의 테이블 (dbf 기반)을 표시하도록 일부 Python 스크립트를 변환하려고합니다. 지금까지 특정 테이블에 대한 맵을 새로 고칠 수있는 스크립트가 있지만 테이블을 업데이트하지는 않습니다.

사용자가 ArcToolbox에서 스크립트를 실행할 때 세 개의 특정 필드로 업데이트 해야하는 세 개의 텍스트 상자로 설정되어 있습니다.

내 테이블이 업데이트되지 않는 이유에 대한 제안 사항이 있습니까?

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

먼저 간단한 예제로 스크립트를 줄이려고합니다. 객체가 ListLayoutElements유형 으로 반환 TextElement됩니까? 다른 코드없이 스크립트에서 단일 텍스트 값을 업데이트 할 수 있습니까?
scw

scw가 말했듯이 실제로 요소가 반환됩니까? 각 if 문에 arcpy.AddMessage ( "Found Table1Column1")를 추가 한 다음 if count <30 영역에 arcpy.AddMessage (tab1Col1Txt.text + tab1Col2Txt.text + tab1Col3Txt.text)를 추가합니다. 문제가 발생한 위치를 더 잘 알 수 있습니다.
eseglem

tab1Col1Txt, tab1Col2Txt 및 tab1Col3Txt 객체가 어디에 정의되어 있는지 코드에서 명확하지 않습니다. 먼저 row.getValue 부분에 의해 반환됩니다 무엇을 확인하려고
마테이

답변:


2

아마도 이러한 예가 도움이 될 수 있습니다.

동적 테이블 및 그래프가 포함 된 DDP 10.1_v1

이 샘플은 arcpy.mapping API를 사용하여 DDP (Data Driven Pages)의 기능을 확장하여 맵 시리즈의 진정한 동적 테이블 및 그래프를 생성하는 방법을 보여줍니다.

동적 그래픽 테이블이있는 arcpy.mapping 맵북

이 프로젝트는 데이터 기반 페이지와 arcpy.mapping을 통합하여 동적 그래픽 테이블이 포함 된 맵 시리즈를 구축합니다.


1
답변에 더 많은 콘텐츠를 제공 할 수 있습니까? 링크는 시간이 지남에 따라 변경 될 수 있으므로 링크 전용 답변은 선호되지 않습니다.
artwork21
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.