การรีเฟรชตารางแอตทริบิวต์เปิดใน ArcMap โดยใช้ ArcPy แทนที่จะเป็น ArcObjects?


11

ฉันกำลังใช้เครื่องมือคำนวณฟิลด์ GP จากอาร์คpyใน ArcMap เมื่ออัปเดตค่าแถวแล้วจะไม่ปรากฏจนกว่าฉันจะใช้เครื่องมือ Reload Cache (ตัวเลือกตาราง> โหลดแคชใหม่) ฉันจะรีเฟรชตารางแอตทริบิวต์โดยอัตโนมัติโดยไม่ต้องใช้ ArcObjects ได้อย่างไร

ฉันได้ลองอัปเดตการค้นหาคำจำกัดความตามที่แนะนำโดย @ blah238 โดยใช้ python คุณจะ "reload cache" ตาราง Attribute ที่เปิดได้อย่างไร แต่วิธีนี้ไม่ได้ช่วย การรีเซ็ตแหล่งข้อมูลไม่ใช่ตัวเลือกเนื่องจากคลาสคุณลักษณะอาจอยู่ในเซสชันแก้ไขและฉันไม่ต้องการสูญเสียการเชื่อมต่อไปยังแหล่งข้อมูล


คุณใช้ ArcGIS 10.1 หรือไม่ ถ้าเป็นเช่นนั้นคุณใช้ Python Add-in หรือเครื่องมือสคริปต์ Python เพื่อเรียกใช้ Calculate Field?
PolyGeo

1
มันสำคัญจริงๆหรือ ฉันกำลังเรียกใช้เครื่องมือคำนวณสนาม GP จาก Python Add-in แต่สิ่งเดียวกันนี้จะสังเกตได้เมื่อเรียกใช้เครื่องมือ GP จากหน้าต่าง Python
Alex Tereshenkov

1
ฉันมักจะคิดเสมอว่าถ้าฉันพยายามทำซ้ำปัญหาที่เป็นไปได้มากที่สุดวิธีที่ฉันจะเห็นก็คือถ้าฉันทำตาม (หรือใกล้เคียงที่สุดเท่าที่จะทำได้) ขั้นตอนเดียวกันในการตั้งค่าเดียวกัน เคยเห็นมาก่อน
PolyGeo

คำตอบ:


4

ดูเหมือนว่าคุณจะมีข้อ จำกัด ของ ArcPy ในกรณีที่ไม่มี ArcObjects

ข้อ จำกัด ของ ArcPy.mapping ได้รับการอธิบายอย่างกว้างขวางที่นี่เป็น:

Arcpy.mapping ไม่ใช่การแทนที่สำหรับ ArcObjects แต่เป็นทางเลือกสำหรับสถานการณ์ต่าง ๆ ที่สนับสนุน ArcObjects ยังคงมีความจำเป็นสำหรับการพัฒนาและปรับแต่งแอปพลิเคชั่นอย่างละเอียดยิ่งขึ้นในขณะที่ arcpy.mapping นั้นมีจุดประสงค์เพื่อให้เนื้อหาของเอกสารแผนที่และไฟล์เลเยอร์ที่มีอยู่โดยอัตโนมัติ

หากคำแนะนำอื่น ๆ ของ @ blah238 เกี่ยวกับการใช้ ArcObjects จาก ArcPy ไม่ใช่ตัวเลือกสำหรับคุณคุณอาจส่งArcGIS Ideaให้ดีที่สุดเพื่อให้ฟังก์ชั่นนี้เปิดเผยต่อ ArcPy หากคุณโพสต์ลิงก์ไปยังแนวคิด ArcGIS ที่นี่ฉันยินดีที่จะลงคะแนนให้


ขอบคุณ PolyGeo น่าเสียดายที่เราไม่สามารถหาวิธีรีเฟรชตารางแอตทริบิวต์เมื่อคำนวณค่าฟิลด์นอกเซสชันการแก้ไข
Alex Tereshenkov

1
คุณอาจส่งคำขอการปรับปรุงไปยังฝ่ายสนับสนุนด้านเทคนิคของ ESRI ฉันขอความสามารถเพียงแค่มีปุ่มตัวเลือกเมนูหรือปุ่ม F เพื่อรีเฟรชตารางเพื่อแสดงการเปลี่ยนแปลงโดยไม่ต้องปิดและเปิดด้วยตนเอง ฉันบอกตารางควรอัปเดตด้วยตัวเองและเรื่องก็ปิดเพราะไม่ทำซ้ำในท้องถิ่น โดยปกติแล้วพวกเขาจะเป็นประโยชน์ ฉันได้รับความประทับใจที่พวกเขาไม่ได้ตระหนักถึงข้อ จำกัด
johns

ฉันขอแนะนำให้ทำทั้งสองอย่างข้างต้น แต่แนวคิด ArcGIS ช่วยให้คุณสามารถติดตามความนิยมและความคืบหน้าในการดำเนินการได้ง่ายกว่าการสนับสนุนในท้องถิ่นที่นี่
PolyGeo

1
@ John คุณรู้ไหมว่าคุณไม่ต้องปิดและเปิดตารางคุณสมบัติเพื่อรีเฟรช วิธีปัจจุบันในการทำเช่นนี้คือคลิกปุ่มตัวเลือกตาราง> โหลดแคชใหม่ อีกสิ่งหนึ่งที่ทำงานได้คือการเรียกใช้การคำนวณเขตข้อมูลในโหมดแก้ไขจากนั้นค่าในตารางแอตทริบิวต์จะได้รับการอัปเดตทันที
Alex Tereshenkov

1
@ Alex ขอบคุณสำหรับคำแนะนำ; มันทำให้ฉันกลับไปทดสอบปัญหาเพิ่มเติม ฉันใช้แคชรีโหลด แต่มันล้มเหลว / ล้มเหลวเมื่อฉันเพิ่มรูปหลายเหลี่ยมในโหมดแก้ไขในมุมมองเลย์เอาต์โดยใช้ addin เพื่อให้ได้ระดับของเลย์เอาต์ เมื่ออยู่ในมุมมองข้อมูลและฉันใช้ addin เดียวกันแล้วแคชโหลดใหม่ทำงาน ดังนั้นอย่างใดเกี่ยวข้องกับมุมมองเค้าโครง
Johns

3

สิ่งนี้อาจเป็นประโยชน์กับคุณสำหรับเวิร์กโฟลว์เฉพาะของคุณหรือไม่ก็ได้ ฉันพบว่าหากคุณเปลี่ยนการเลือกในเลเยอร์ของคุณตารางแอตทริบิวต์จะอัปเดตเช่นกัน

ดังนั้นฉันมักจะใช้

arcpy.SelectLayerByAttribute_management("MY-LAYER","CLEAR_SELECTION")

แน่นอนว่าถ้าคุณมีบางอย่างที่เลือกไว้ซึ่งคุณไม่ต้องการหลุดออกไปจากที่นี่มันก็ไม่ดี ในกรณีนี้คุณอาจเลือกจากเลเยอร์ที่ OID อยู่ในรายการ OID จากฟีเจอร์ที่เลือกในปัจจุบัน (โดยทั่วไปเปลี่ยนการเลือกเป็นสิ่งที่เลือกไว้ในปัจจุบัน) สิ่งนี้อาจใช้เวลานานกว่าจะเป็นจริงฉันไม่เคยลองในสถานการณ์จริง


1

คุณเคยลองไหม:

arcpy.RefreshCatalog(target) # Set the target to your layers data source

หรือ

arcpy.RefreshActiveView() # Refreshes the map

หรือ

arcpy.RefreshTOC() # I highly doubt this will do anything, but you never know

ฉันคิดว่าหนึ่งในนั้นจะทำงานได้ แต่ฉันรู้ว่าบางครั้งใน ArcMap ฉันต้องปิดตารางแอตทริบิวต์ด้วยตนเองจากนั้นเปิดใหม่อีกครั้งเพื่อดูการแก้ไขบางอย่าง ฉันไม่แน่ใจว่าการปิดและเปิดตารางสามารถทำได้ด้วย ArcPy หรือไม่ แต่นั่นก็เป็นตัวเลือกเช่นกัน


Thansk, Cody, น่าเสียดายที่ไม่มีงานนี้ การปิดและเปิดตารางแอตทริบิวต์ด้วยตนเองเป็นการหลอกลวง แต่ฉันกำลังมองหาสิ่งที่จะทำโดยทางโปรแกรม ตารางแอตทริบิวต์การเปิดและปิดไม่สามารถใช้กับ Python ได้เช่นกัน
Alex Tereshenkov

สิ่งเหล่านี้ไม่ได้รับการออกแบบมาเพื่อรีเฟรชตารางแอตทริบิวต์
เรดาร์

1

งานนี้:

    import arcpy

    definition_query = layer.definitionQuery
    # Change the Definition Query into something different
    if definition_query == '':
        oid = arcpy.ListFields(dataset = layer, field_type = 'OID')[0]
        layer.definitionQuery = '{} > 0'.format(oid.name)
    else:
        layer.definitionQuery = ''
    arcpy.RefreshActiveView()

    # Restore the Definition Query
    layer.definitionQuery = definition_query
    arcpy.RefreshActiveView()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.