Python Script เพื่อสร้างตารางโดยใช้ Data Driven Pages


11

ฉันพยายามแปลงสคริปต์ python เพื่อแสดงตาราง (ตาม dbf) ของคุณสมบัติที่อยู่ภายในหน้าข้อมูลที่ขับเคลื่อนด้วย จนถึงตอนนี้ฉันมีสคริปต์ที่สามารถรีเฟรชแผนที่ไปยังตารางที่ระบุได้สำเร็จ แต่ไม่ได้อัปเดตตาราง

ฉันได้ตั้งค่าเป็นกล่องข้อความสามกล่องที่ควรปรับปรุงด้วยฟิลด์เฉพาะสามฟิลด์เมื่อผู้ใช้เรียกใช้สคริปต์จาก 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 กล่าวว่าองค์ประกอบถูกส่งคืนจริงหรือไม่ ฉันจะเพิ่ม arcpy.AddMessage ("Found Table1Column1") ในแต่ละถ้า statment แล้วเพิ่ม arcpy.AddMessage (tab1Col1Txt.text + tab1Col2Txt.text + tab1Col3Txt.text) ใน if count <30 พื้นที่ สิ่งนี้จะช่วยให้ทราบถึงปัญหาที่เกิดขึ้นได้ดีขึ้น
eseglem

จากรหัสไม่ชัดเจนว่ามีการกำหนดวัตถุ tab1Col1Txt, tab1Col2Txt และ tab1Col3Txt ไว้อย่างไร ก่อนอื่นให้ลองตรวจสอบสิ่งที่ได้รับคืนโดย row.getValue ส่วน
Matej

คำตอบ:


2

บางทีตัวอย่างเหล่านี้อาจช่วยได้:

DDP ด้วยตารางและกราฟไดนามิก 10.1_v1

ตัวอย่างนี้แสดงให้เห็นถึงวิธีการใช้ arcpy.mapping API เพื่อขยายขีดความสามารถของ Data Driven Pages (DDP) เพื่อสร้างชุดแผนที่และตารางแบบไดนามิกและกราฟแบบไดนามิกอย่างแท้จริง

หนังสือแผนที่ arcpy.mapping พร้อมตารางกราฟิกแบบไดนามิก

โครงการนี้รวม Data Driven Pages และ arcpy.mapping เพื่อสร้างชุดแผนที่ที่มีตารางกราฟิกแบบไดนามิก


1
คุณสามารถให้เนื้อหาเพิ่มเติมในคำตอบของคุณ? ไม่ต้องการคำตอบเฉพาะลิงก์เนื่องจากลิงก์อาจเปลี่ยนแปลงตลอดเวลา
artwork21
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.