สร้างปุ่มใน ArcMap เพื่อรันโปรแกรม Python หรือไม่?


10

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

การเรียกใช้เป็นเครื่องมือประมวลผลเชิงภูมิศาสตร์ใช้เวลานานกว่าเมื่อเรียกใช้รหัสเดียวกันจากหน้าต่างบรรทัดคำสั่ง ฉันเพิ่งเริ่มค้นหา ArcObjects แต่ฉันต้องการเริ่มใช้งานหากเป็นสิ่งที่ฉันจะต้องใช้

หากใครมีรหัสตัวอย่างหรือแหล่งข้อมูลสำหรับการสร้างปุ่มมันจะยอดเยี่ยม


คุณกำลังพยายามทำสิ่งนี้ใน ArcMap หรือในแอปพลิเคชันแบบสแตนด์อโลนของ ArcGIS Engine หรือไม่?
MathiasWestin

ฉันต้องการทำสิ่งนี้ใน ArcMap 10
Tanner

1
รุ่น 9.3 ของคำถามนี้คือArcmap: แนบ python สคริปต์กับปุ่ม
matt wilkie

คำตอบ:


8

หากคุณไม่ต้องการอินพุตหรือพารามิเตอร์ใด ๆ ตัวอย่างนี้ควรใช้เพื่อเรียกใช้สคริปต์ในคำสั่งที่กำหนดเองการใช้ประโยชน์จาก ArcPy ในแอปพลิเคชัน. NETตัวอย่าง C #:

// Executes a shell command synchronously.
// Example of command parameter value is
// "python " + @"C:\scripts\geom_input.py".
//
public static void ExecuteCommand(object command)
{
    try
    {
        // Create the ProcessStartInfo using "cmd" as the program to be run,
        // and "/c " as the parameters.
        // "/c" tells cmd that you want it to execute the command that follows,
        // then exit.
        System.Diagnostics.ProcessStartInfo procStartInfo = new
            System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);

        // The following commands are needed to redirect the standard output.
        // This means that it will be redirected to the Process.StandardOutput StreamReader.
        procStartInfo.RedirectStandardOutput = true;
        procStartInfo.UseShellExecute = false;

        // Do not create the black window.
        procStartInfo.CreateNoWindow = true;

        // Now you create a process, assign its ProcessStartInfo, and start it.
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo = procStartInfo;
        proc.Start();

        // Get the output into a string.
        string result = proc.StandardOutput.ReadToEnd();

        // Display the command output.
        Console.WriteLine(result);
    }
    catch (Exception objException)
    {
        Console.WriteLine(objException.Message);
        // Log the exception and errors.
    }
}

1
นอกจากนี้โปรดทราบว่านี่ไม่ใช่งูหลามที่เฉพาะเจาะจง มันสามารถใช้เพื่อเรียกใช้คำสั่งภายนอกใด ๆ
matt wilkie

แต่มันใช้งานได้ดี @ แทนเนอร์?
ริชาร์ด

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

5

ใช้ [เพิ่มเครื่องมือ ... ] ในแถบเครื่องมือ / ปรับแต่งเพื่อเพิ่มสคริปต์ในหมวดหมู่ จากนั้นดึงสคริปต์ไปยังแถบเครื่องมือที่เลือก


นั่นคือสิ่งที่ฉันทำ การใช้วิธีการนั้นสคริปต์จะทำงานเป็นเครื่องมือสคริปต์และเปิดหน้าต่างประมวลผลทางภูมิศาสตร์ขึ้นมาทำให้สคริปต์ใช้เวลาดำเนินการนานขึ้น
แทนเนอร์

3

คลิกขวาที่พื้นที่ว่างถัดจากแถบเครื่องมือของคุณ> เปิดหน้าต่างปรับแต่ง> คลิกที่แท็บคำสั่ง> เลื่อนไปที่ด้านล่างของรายการและคลิก [การควบคุม UI]> เลือกการควบคุม UI ใหม่> เลือกประเภทของการควบคุมที่คุณต้องการแล้ว คลิกสร้างและแก้ไข สิ่งนี้จะเปิดตัวแก้ไข VBA สำหรับการควบคุมใหม่และคุณสามารถเขียนรหัสของคุณภายในฟังและกำหนดเหตุการณ์ที่เรียกรหัส VBA รวมอยู่ใน 10 ฟรี แต่คุณจะต้องขอไฟล์ลิขสิทธิ์จากนั้นลงทะเบียนใบอนุญาตนั้น โทรหา ESRI เพื่อรับสิทธิ์ใช้งานฟรี หลังจาก 10 นี้จะหายไป ...

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