Thêm mã tùy ý vào ArcGIS ModelBuilder?


11

Có cách nào để thêm các đoạn mã tùy ý vào mô hình ArcGIS không?

Tôi hình dung một cái gì đó tương tự như "khối mã hiển thị" trình xây dựng biểu thức trong ghi nhãn nâng cao hoặc máy tính trường .

Ví dụ, dự án hiện tại của tôi có thể được hưởng lợi rất nhiều từ việc tìm nạp tên người dùng của người đang chạy công cụ. Tôi biết trong python đây là một đơn giản import os; os.environ.get('USERNAME'). Tôi nghĩ rằng tôi có thể viết đoạn mã đó vào get_username.py, thêm nó vào hộp công cụ trong Arccatalog, sau đó thêm công cụ đó vào mô hình và sử dụng nó làm tham số mô hình theo yêu cầu cho công cụ hiện tại của tôi. Đó là rất nhiều công việc cho một điều nhỏ như vậy, và lần tới tôi có thể muốn một cái gì đó khác, như thay thế biến nội tuyến hoặc một biến ghép .

Tôi nghĩ rằng một công cụ đoạn mã hoặc tương tự có thể giải quyết tất cả các nhu cầu này theo cách chung chung, hữu ích.


crazy think : thay vì trình xây dựng biểu thức, một cửa sổ dòng lệnh python lưu lịch sử cho mô hình để sử dụng lại thì sao?
matt wilkie

2
thực sự những gì tôi thực sự theo sau là toàn bộ thư viện Python được tiếp xúc với trình xây dựng mô hình giống như các công cụ arcgis. nhưng đó chỉ là một cuộc nói chuyện điên rồ (phải không?)
matt wilkie

Ý tưởng tuyệt vời! Bạn muốn viết đoạn mã nhanh chóng vào một "công cụ" sẽ xử lý đoạn mã và trả về kết quả, phải không? Vì vậy, trong ví dụ của bạn, "công cụ" sẽ trả về <tên người dùng hiện tại> mà sau đó có thể được áp dụng cho các công cụ khác.
RyanKDalton

@RyanDalton, vâng, điều đó hoàn toàn chính xác.
matt wilkie

Câu trả lời:


3

Câu trả lời mới cho một bài viết cũ, chỉ để làm rõ cách tạo một mô hình có thể sử dụng lại để làm điều này.

Mở mô hình, Chèn-> Công cụ chỉ mô hình-> Tính giá trị.

Trong biểu thức, gõ: getuser()

Trong Khối mã, gõ:

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

(Xem " Lấy tên người dùng ở định dạng cụ thể " để biết nguồn đoạn mã tên người dùng từ @ChadCooper)

Đối với Kiểu dữ liệu, chọn String.

nhập mô tả hình ảnh ở đây

Đổi tên vòng tròn đầu ra thành username. Mô hình kết quả cuối cùng sẽ trông như sau: Sử dụng công cụ tính toán giá trị

Và sau đó bạn có thể kéo mô hình này vào bất kỳ mô hình nào trong tương lai và tham chiếu biến có tên% username% trong bất kỳ mô hình hoặc tập lệnh nào trong tương lai. Chỉ cần chắc chắn mô hình này chạy trước khi bạn cố gắng truy cập biến% username%. Bạn có thể làm điều này bằng cách sử dụng một điều kiện tiên quyết .


Ryan có lẽ bạn có thể mở rộng lý do tại sao đầu ra là một tham số [P] và hiển thị ví dụ về mô-đun được đưa vào mô-đun khác. Ban đầu tôi rất bối rối tại sao P cho một đầu ra, vì các tham số thường là tất cả về đầu vào.
matt wilkie

@mattwilkie, bạn không cần bất kỳ tham số đầu vào nào vì tập lệnh python sẽ "đọc" các đầu vào từ hệ thống của bạn. Tuy nhiên, bạn cần đặt đầu ra (tên người dùng) thành một tham số để bạn có thể sử dụng kết quả vào một mô hình hoặc tập lệnh python khác. Bước tiếp theo sẽ là chuyển tham số tên người dùng vào một cái gì đó như "tập lệnh email" sẽ tự động sử dụng tham số đầu ra uesrname làm đầu vào cho địa chỉ email "Tới".
RyanKDalton

10

Thực tế bạn có thể làm điều này với công cụ Tính giá trị (Quản lý dữ liệu) .

Nó không đặc biệt thanh lịch (toàn bộ mã nguồn của công cụ được in trong nhật ký mỗi khi nó chạy) và trình soạn thảo (thực sự chỉ là một hộp văn bản) rất tệ.

Tôi sẽ đề nghị viết các mô-đun mà sau đó bạn có thể nhập và gọi các hàm từ đó và sau đó bạn chỉ cần viết các đoạn rất ngắn trong hộp thoại. Nếu không thì nó không sạch lắm.

Tính giá trị có sẵn ở tất cả các cấp giấy phép cho Arcgis v10. Với v9.x, nó chỉ khả dụng với Arcview nếu cài đặt tiện ích mở rộng Spatial hoặc 3D Analyst ( ref ).


cảm ơn bạn! Điều này hoạt động khá tốt cho những gì tôi cần ngày hôm nay (chèn %USERNAME%vào kết nối cơ sở dữ liệu .sde). Đồng ý rằng biên tập viên không xứng đáng với cái tên đó, hoạt động tốt như một đích đến dán.
matt wilkie

1
re: 9.x, từ ngữ của trang trợ giúp CV cho biết công cụ có thể khả dụng nếu tiện ích mở rộng SA / 3D chỉ được cài đặt . Có thể sử dụng nó mà không cần tiện ích mở rộng được cấp phép hoặc kích hoạt.
matt wilkie

"Tôi sẽ đề nghị viết các mô-đun mà sau đó bạn có thể nhập" - đó là một ý tưởng thực sự tuyệt vời!
Giá của Curtis

2

Có lẽ tôi đang hiểu nhầm câu hỏi nhưng có vẻ như chức năng công cụ kịch bản python, trong ArcToolBox, là thứ bạn đang tìm kiếm:

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.htmlm

Thực tế bạn cũng có thể sử dụng / kết hợp một số ngôn ngữ kịch bản lệnh khác (R trong ví dụ này):

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



3
Điều này hoạt động (và là cách tôi sẽ làm), nhưng Matt đặc biệt gọi phương pháp này là "rất nhiều công việc cho một việc nhỏ như vậy" trong câu hỏi của anh ấy :)
nmpeterson
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.