Tập lệnh Python để tạo bảng bằng cách sử dụng các trang hướng dữ liệu


11

Tôi đang cố gắng chuyển đổi một số tập lệnh python để hiển thị bảng (dựa trên dbf) các tính năng nằm trong một trang điều khiển dữ liệu cụ thể. Cho đến nay, tôi có tập lệnh thành công có thể làm mới bản đồ vào bảng cụ thể, nhưng nó không cập nhật bảng.

Tôi có nó được thiết lập thành ba hộp văn bản cần được cập nhật với ba trường cụ thể khi người dùng chạy tập lệnh từ ArcToolbox.

Bất kỳ đề xuất về lý do tại sao bảng của tôi không cập nhật?

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

Tôi sẽ bắt đầu bằng cách cắt giảm tập lệnh của bạn thành một ví dụ đơn giản hơn. Là các đối tượng được trả về ListLayoutElementscủa loại TextElement? Bạn có thể cập nhật một giá trị văn bản trong tập lệnh mà không cần bất kỳ mã nào khác không?
scw

như scw đã nói, các yếu tố thực sự được trả lại? Tôi sẽ thêm arcpy.AddMessage ("Found Table1Column1") vào mỗi if statment và sau đó thêm arcpy.AddMessage (tab1Col1Txt.text + tab1Col2Txt.text + tab1Col3Txt.text) trong vùng if. Điều này sẽ cho một ý tưởng tốt hơn về nơi xảy ra vấn đề.
eseglem

Từ mã không rõ ràng các đối tượng tab1Col1Txt, tab1Col2Txt và tab1Col3Txt được xác định ở đâu. Trước tiên hãy thử xác minh những gì được trả về bởi hàng.getValue
Matej

Câu trả lời:


2

Có lẽ những ví dụ này có thể giúp:

DDP với các bảng động và đồ thị 10.1_v1

Mẫu này cho thấy cách sử dụng API arcpy.micking để mở rộng khả năng của Trang hướng dữ liệu (DDP) để tạo ra một chuỗi bản đồ và biểu đồ thực sự động

Arcpy.micking Sách bản đồ với các bảng đồ họa động

Dự án này kết hợp các trang hướng dữ liệu và arcpy.micking để xây dựng một loạt bản đồ bao gồm các bảng đồ họa động.


1
Bạn có thể cung cấp thêm nội dung trong câu trả lời của bạn? Câu trả lời chỉ liên kết không được ưa thích vì liên kết có thể thay đổi theo thời gian.
nghệ thuật21
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.