Tạo nút trong ArcMap để chạy chương trình Python?


10

Tôi có một tập lệnh mà tôi muốn chạy trong ArcMap khi nhấp vào nút trên thanh công cụ và cho đến nay tôi chỉ có thể biến tập lệnh thành công cụ tập lệnh. Tôi cần nó để chạy như một lệnh, không phải là một công cụ xử lý địa lý.

Chạy nó như một công cụ xử lý địa lý mất nhiều thời gian hơn so với khi cùng một mã được thực thi từ cửa sổ dòng lệnh. Tôi mới bắt đầu tìm hiểu về ArcObjects, nhưng tôi muốn bắt đầu sử dụng nó nếu đó là thứ tôi cần sử dụng.

Nếu bất cứ ai có bất kỳ mã mẫu hoặc tài nguyên nào để tạo nút, điều đó sẽ rất tuyệt.


Bạn đang cố gắng làm điều này trong ArcMap hay trong ứng dụng độc lập ArcGIS Engine?
MathiasWestin

Tôi muốn làm điều này trong ArcMap 10.
Tanner

1
phiên bản 9.3 của câu hỏi này là Arcmap: đính kèm tập lệnh python vào nút
matt wilkie

Câu trả lời:


8

Nếu bạn không cần bất kỳ thông số đầu vào hoặc đầu ra nào, mẫu này có thể được sử dụng để chạy tập lệnh trong lệnh tùy chỉnh Tận dụng ArcPy trong ứng dụng .NET , ví dụ 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
Cũng lưu ý rằng đây không phải là trăn cụ thể. Nó có thể được sử dụng để chạy bất kỳ lệnh bên ngoài.
matt wilkie

Nhưng nó có hoạt động không, @Tanner?
Richard

Thành thật mà nói tôi không bao giờ làm cho nó hoạt động, nhưng sau đó kinh nghiệm lập trình duy nhất của tôi là một số Python hạn chế. Tôi cảm thấy như bây giờ tôi có thể cho nó một cú đánh công bằng nếu tôi có thời gian và vẫn cần thiết để tạo một nút.
Tanner

5

Sử dụng [Thêm công cụ ...] trong Thanh công cụ / Tùy chỉnh để thêm tập lệnh vào danh mục. Sau đó kéo tập lệnh vào thanh công cụ lựa chọn.


Đó là những gì tôi đã làm. Sử dụng phương pháp đó, tập lệnh chạy như một công cụ tập lệnh và đưa ra một cửa sổ xử lý địa lý, làm cho tập lệnh mất nhiều thời gian hơn để thực thi.
Tanner

3

Nhấp chuột phải vào một vùng trống bên cạnh thanh công cụ của bạn> mở cửa sổ tùy chỉnh> nhấp vào tab lệnh> cuộn xuống cuối danh sách và nhấp vào [Điều khiển giao diện người dùng]> Chọn Điều khiển giao diện người dùng mới> chọn loại điều khiển mà bạn muốn và sau đó nhấp vào Tạo và Chỉnh sửa. Điều này sẽ mở trình soạn thảo VBA cho điều khiển mới và bạn có thể viết mã của mình bên trong nghe và xác định sự kiện gọi mã. VBA được bao gồm 10 miễn phí nhưng bạn sẽ cần yêu cầu tệp giấy phép cho nó và sau đó đăng ký giấy phép đó. Gọi ESRI cho việc này và họ sẽ cung cấp cho bạn giấy phép miễn phí. Sau 10 điều này sẽ biến mất ...

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.