การเพิ่มรหัสโดยพลการใน ArcGIS ModelBuilder?


11

มีวิธีใดที่จะเพิ่มข้อมูลโค้ดโดยพลการลงในโมเดล ArcGIS?

ฉันมองเห็นบางสิ่งบางอย่างที่คล้ายกับ "โชว์การป้องกันรหัส" สร้างการแสดงออกในการติดฉลากขั้นสูงหรือเครื่องคิดเลขฟิลด์

ตัวอย่างเช่นโครงการของฉันในขณะนี้อาจได้รับประโยชน์อย่างมากจากการดึงชื่อผู้ใช้ของผู้ใช้เครื่องมือ import os; os.environ.get('USERNAME')ฉันรู้ว่าในหลามนี้อยู่ที่เรียบง่าย ฉันคิดว่าฉันสามารถเขียนข้อมูลโค้ดget_username.pyนั้นเพิ่มลงในกล่องเครื่องมือใน Arccatalog จากนั้นเพิ่มเครื่องมือนั้นลงในแบบจำลองและใช้เป็นพารามิเตอร์แบบจำลองที่จำเป็นสำหรับเครื่องมือปัจจุบันของฉัน นั่นเป็นจำนวนมากของการทำงานสำหรับการดังกล่าวเป็นสิ่งเล็ก ๆ และในครั้งต่อไปผมอาจจะต้องการอย่างอื่นเช่นแทนค่าตัวแปรแบบอินไลน์หรือตัวแปรสารประกอบ

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


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

2
ที่จริงแล้วสิ่งที่ฉันทำจริงๆคือห้องสมุด Python ทั้งหมดที่จะต้องสัมผัสกับตัวสร้างแบบจำลองเช่นเดียวกับเครื่องมืออาร์คจิส แต่นั่นเป็นเพียงการพูดคุยอย่างบ้าคลั่ง (ใช่ไหม)
แมตต์ wilkie

ความคิดที่ดี! คุณต้องการที่จะเขียนตัวอย่างโค้ดในทันทีเป็น "เครื่องมือ" ที่จะประมวลผลตัวอย่างและส่งกลับผลลัพธ์ใช่มั้ย? ดังนั้นในตัวอย่างของคุณ "เครื่องมือ" จะส่งกลับ <ชื่อผู้ใช้ปัจจุบัน> ซึ่งสามารถนำไปใช้กับเครื่องมืออื่น ๆ แบบดาวน์สตรีมได้
RyanKDalton

@ RyanDalton ใช่ถูกต้องแล้ว
matt wilkie

คำตอบ:


3

คำตอบใหม่สำหรับโพสต์เก่าเพื่อชี้แจงวิธีสร้างโมเดลที่ใช้งานซ้ำได้เพื่อทำสิ่งนี้

เปิดโมเดลแทรก -> เครื่องมือเฉพาะรุ่น -> คำนวณค่า

ในนิพจน์ให้พิมพ์: getuser()

ใน Code Block ให้พิมพ์:

def getuser():
    import getpass
    return getpass.getuser()

(โปรดดู " การรับชื่อผู้ใช้ในรูปแบบเฉพาะ " เพื่อดูข้อมูลรหัสผู้ใช้จาก @ChadCooper)

Stringสำหรับชนิดของข้อมูลให้เลือก

ป้อนคำอธิบายรูปภาพที่นี่

usernameเปลี่ยนชื่อวงกลมออกไป ตัวแบบผลลัพธ์สุดท้ายจะมีลักษณะดังนี้: การใช้เครื่องมือคำนวณค่า

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


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

@mattwilkie คุณไม่จำเป็นต้องป้อนพารามิเตอร์ใด ๆ เพราะสคริปต์ python จะ "อ่าน" อินพุตจากระบบของคุณ อย่างไรก็ตามคุณต้องสร้างเอาต์พุต (ชื่อผู้ใช้) พารามิเตอร์เพื่อให้คุณสามารถใช้ผลลัพธ์ไปยังโมเดลอื่นหรือสคริปต์ไพ ธ อน ขั้นตอนต่อไปคือการส่งพารามิเตอร์ชื่อผู้ใช้ไปสู่ ​​"อีเมลสคริปต์" ที่จะใช้พารามิเตอร์เอาต์พุต uesrname โดยอัตโนมัติเป็นอินพุตไปยังที่อยู่อีเมล "ถึง"
RyanKDalton

10

จริงๆคุณสามารถทำเช่นนี้กับการคำนวณค่า (การจัดการข้อมูล)เครื่องมือ

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

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

มูลค่าการคำนวณมีให้ในทุกระดับสิทธิ์การใช้งานสำหรับ Arcgis v10 ด้วย v9.x จะสามารถใช้งานได้กับ Arcview เฉพาะเมื่อมีการติดตั้งส่วนขยาย Spatial หรือนักวิเคราะห์ 3 มิติ ( อ้างอิง )


ขอบคุณ! สิ่งนี้ทำงานได้ค่อนข้างดีสำหรับสิ่งที่ฉันต้องการในวันนี้ (แทรก%USERNAME%ลงในการเชื่อมต่อฐานข้อมูล. sde) ตกลงบรรณาธิการไม่คุ้มค่าของชื่อที่ทำงานได้ดีเป็นปลายทางวาง
matt wilkie

1
Re: 9.x ถ้อยคำของหน้า CV ช่วยเหลือระบุเครื่องมืออาจจะใช้ได้ถ้านามสกุล SA / 3D เป็นเพียงการติดตั้ง อาจเป็นไปได้ที่จะใช้โดยไม่ต้องมีการอนุญาตหรือเปิดใช้งานส่วนขยาย
matt wilkie

"ฉันขอแนะนำให้เขียนโมดูลที่คุณสามารถนำเข้า" - นั่นเป็นความคิดที่ยอดเยี่ยมจริงๆ!
เคอร์ติสราคา

2

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

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Integrating_scripts_within_a_model/002w0000006n000000/

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//001500000006000000.htm

ในความเป็นจริงคุณสามารถใช้ / รวมภาษาสคริปต์อื่น ๆ ได้หลายภาษาด้วย (R ในตัวอย่างนี้):

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//002w0000007w000000



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