จัดการเลเยอร์คำอธิบายประกอบด้วย arcpy


10

ฉันต้องการเข้าถึงเลเยอร์คำอธิบายประกอบโดยใช้ arcpy (วัตถุประสงค์คือเพื่อตรวจสอบสตริงข้อความเล็กน้อยในคำอธิบายประกอบข้อความ) เมื่อใช้คำอธิบายประกอบฉันหมายถึงวาดคำอธิบายประกอบเครื่องมือไม่ใช่ป้ายกำกับแบบไดนามิก เลเยอร์คำอธิบายประกอบเหล่านี้อยู่ภายใต้เลเยอร์กลุ่มด้วยชื่อ 'เริ่มต้น'

เอกสาร Esriพูดของวาดคำอธิบายประกอบเป็นชั้นตัวเอง:

มีชั้นสามประเภทในเอกสารแผนที่: เลเยอร์คุณสมบัติเลเยอร์กลุ่มและเลเยอร์แรสเตอร์ คุณสมบัติ isFeatureLayer, isGroupLayer และ isRasterLayer อนุญาตให้คุณระบุหรือแยกประเภทชั้นส่วนใหญ่ แต่ไม่ใช่ประเภทชั้นทั้งหมด มีเลเยอร์พิเศษและชุดข้อมูลไม่กี่รายการที่ไม่จัดอยู่ในหนึ่งในสามหมวดหมู่นี้: ซับคลาสย่อย, คุณสมบัติมิติ, ชุดข้อมูลเครือข่าย, ชุดข้อมูลภูมิประเทศ, ชุดข้อมูลภูมิประเทศ, ชุดข้อมูลโทโพโลยีและอื่น ๆ ในกรณีเหล่านี้คุณอาจต้องทดสอบคุณสมบัติอื่น ๆ เพื่อแยกชั้นของความสนใจก่อนที่จะทำอะไรลงไป

สิ่งหนึ่งที่ต้องระวังคือวิธีที่ ArcGIS จัดการกับคำอธิบายประกอบการวาดการกำหนดค่าเฉลี่ยสองค่าเป็นไปได้:

ArcGIS รองรับการเพิ่มความคิดเห็นสองประเภท: geodatabase และเอกสารแผนที่

ในกรณีของฉันมันเป็นเอกสารแผนที่


ในแง่ของเอกสารทั้งหมดนี้มันจึงปรากฏว่าคำอธิบายประกอบการวาดเป็นเลเยอร์เพียงดังนั้นรหัสง่ายๆเช่นนี้ควรจะทำงาน:

mxd = arcpy.mapping.MapDocument("some\mxdpath\here")
df = arcpy.mapping.ListDataFrames(mxd,"Layers")
lyr = arcpy.mapping.ListLayers(mxd,"current_annotation_layer",df) 

แต่ปัญหาคือคำอธิบายประกอบดูเหมือนจะไม่สามารถหาได้ผ่าน dataframe (ซึ่งเป็นเรื่องแปลกเมื่อพิจารณาเลเยอร์คำอธิบายประกอบแต่ละชั้นของฉันจะเชื่อมโยงกับเลเยอร์คุณลักษณะ)


คลาสอาร์คซี่เฉพาะใด ๆ ในการเข้าถึงคำอธิบายประกอบ (อันหนึ่งที่เทียบเท่ากับIAnnotationFeature2ของ ArcObject SDK)? วิธีแก้ปัญหาใด ๆ

ขอบคุณมาก!


คุณจัดการเพื่อแก้ไขกลุ่มคำอธิบายประกอบเอกสารแผนที่ของคุณผ่าน comptypes และ ArcObjects หรือไม่? ตัวชี้ใด ๆ สำหรับข้อมูลเพิ่มเติม? ขอบคุณมาก!!
Hélène

คำตอบ:


3

ArcPy ไม่เปิดเผย ArcObjects ทั้งหมด จากสิ่งที่ฉันสามารถบอกได้นี่เป็นหนึ่งในหลาย ๆ อินเตอร์เฟสที่ไม่เปิดเผยใน ArcPy องค์ประกอบเค้าโครงหน้าเท่านั้นที่แสดงใน arcpy: ListLayoutElements (arcpy.mapping)

หากคุณต้องการทำสิ่งนี้ทางเลือกเดียวของคุณคือ ArcObjects หากคุณต้องการใช้ Python ดูที่ฉันจะเข้าถึง ArcObjects จาก Python ได้อย่างไร

มิฉะนั้นคุณอาจต้องการค้นหาหรือสร้างแนวคิด ArcGISเกี่ยวกับเรื่องนี้ (ความคิดเดียวที่มีอยู่ที่เกี่ยวข้องที่ฉันพบคือแนวคิดนี้ )


สวัสดีฉันคาดหวังคำตอบนี้ แต่ขอบคุณและ +1 สำหรับลิงก์ซึ่งอาจช่วยได้
Akheloes

@Akheloes คุณจัดการเพื่อแก้ไขกลุ่มคำอธิบายประกอบในเอกสารแผนที่ของคุณผ่านคอมไพล์และ ArcObjects หรือไม่?
Hélène

0

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

รหัสควรเป็น:

df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
lyr = arcpy.mapping.ListDataFrames(mxd, "current_annotation_layer", df)[0]

นี่คือตัวอย่างที่ฉันใช้ arcpy เพื่อเข้าถึงเลเยอร์คำอธิบายประกอบของฉัน สำหรับแผนที่ของฉันฉันต้องการให้คำอธิบายประกอบเคลื่อนที่ใต้หน้ากากด้วยความโปร่งใส 20% ถ้าอยู่นอกพื้นที่ที่ฉันสนใจ

my_annotation_lyr = arcpy.mapping.Layer("Long_ProjectsAnno")
reference_lyr = arcpy.mapping.Layer("counties_mask")
arcpy.mapping.MoveLayer(df, reference_lyr, my_annotation_lyr, "AFTER")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.