Trích xuất bằng thuộc tính bằng ModelBuilder với đầu vào của người dùng?


11

Sử dụng ModelBuilder, tôi muốn tạo một công cụ cho phép người dùng chọn giá trị hoặc giá trị sẽ được sử dụng để trích xuất một shapefile.

Tôi có một lớp bưu kiện với trường "Parcel_Type". Tôi muốn người dùng có thể chọn loại bưu kiện để giải nén. Vì vậy, nếu người dùng muốn trích xuất các bưu kiện với loại "EL" thì anh ta sẽ chỉ phải nhập "EL" dưới dạng một biến. Nếu anh ta muốn gõ "EL" và "CDD", anh ta cần nhập chúng dưới dạng nhiều biến. Đó sẽ là tương tác duy nhất của con người với mô hình.

Vì vậy, làm thế nào tôi có thể sử dụng các biến trong mô hình của tôi?

Câu trả lời:


14

Kiểu hoạt động này hầu như luôn luôn bao gồm việc viết một khoản WHERE vì vậy tôi nghĩ rằng việc sử dụng ít nhất một chút Python là theo thứ tự.

Ngoài ra, trong khi điều này có thể thực hiện với ModelBuilder, IMO, việc tạo một công cụ tập lệnh Python với xác thực tùy chỉnh và kiểm soát nhiều hơn các cài đặt tham số có thể cung cấp trải nghiệm người dùng tốt hơn - ví dụ: bằng cách tạo các menu thả xuống tham số FieldMultiValue * bạn có thể chọn các giá trị thay vì phải nhập chúng vào.

* có thể, thực sự không chắc chắn về các tham số MultiValue

Tuy nhiên, vì đó là một bài tập nâng cao hơn cho một chủ đề khác, tôi sẽ sử dụng phương pháp ModelBuilder, chỉ sử dụng Python để tạo mệnh đề WHERE:

  1. Tạo một mô hình mới
  2. Tạo các biến (nhấp chuột phải vào khung trống và nhấp vào Thêm biến ) cho các tham số Lớp tính năng , TrườngMultiValue đầu vào .
  3. Nhấp chuột phải vào từng cái và chọn Thông số mẫu
  4. Thêm một công cụ Tính giá trị (Quản lý dữ liệu) vào khung vẽ. Kết nối 3 biến với nó như điều kiện tiên quyết (chỉ để hiển thị trong trường hợp này, nhưng nó có thể tạo ra sự khác biệt trong thứ tự thực hiện trong các tình huống khác).
  5. Bấm đúp vào công cụ Tính giá trị để thiết lập:

    5a. Sao chép / dán phần sau vào hộp Biểu thức (điều chỉnh để khớp với tên biến của bạn):

    buildWhereClauseMultiValue(r"%Feature Layer%","%Field%","%Values%")

    5b. Sao chép / dán phần sau vào hộp Mã khối :

    import arcpy
    
    def buildWhereClauseMultiValue(table, field, values):
        """Takes a semicolon-delimited list of values and constructs a SQL WHERE
        clause to select those values within a given field and table."""
    
        # Add DBMS-specific field delimiters
        fieldDelimited = arcpy.AddFieldDelimiters(arcpy.Describe(table).path, field)
    
        # Split multivalue at semicolons and strip quotes
        valueList = [value[1:-1] if (value.startswith("'") and value.endswith("'")) else value for value in values.split(';')]
    
        # Determine field type
        fieldType = arcpy.ListFields(table, field)[0].type
    
        # Add single-quotes for string field values
        if str(fieldType) == 'String':
            valueList = ["'%s'" % value for value in valueList]
    
        # Format WHERE clause in the form of an IN statement
        whereClause = "%s IN(%s)" % (fieldDelimited, ', '.join(valueList))
        return whereClause

    5c. Đặt kiểu dữ liệu đầu ra là Biểu thức SQL .

    5đ. Nhấp vào Ok và nhấp chuột phải vào biến đầu ra từ công cụ Tính giá trị và đổi tên nó thành một cái gì đó mô tả hơn như "Điều khoản WHERE".

  6. Thêm một công cụ Chọn lớp theo thuộc tính (Quản lý dữ liệu) vào khung vẽ. Kết nối các biến của lớp tính năng và mệnh đề WHERE với công cụ Chọn lớp theo thuộc tính.
  7. Thêm một công cụ Sao chép tính năng (Quản lý dữ liệu) vào khung vẽ. Kết nối đầu ra của công cụ Chọn lớp theo thuộc tính với công cụ Sao chép tính năng. Nhấp chuột phải vào biến Lớp tính năng đầu ra và kiểm tra Thông số mẫu và (tùy chọn) tùy chọn Thêm vào hiển thị .

    Tại thời điểm này, nó sẽ trông giống như thế này: Mô hình Canvas

  8. Trong menu Model -> Model Properties, đặt tên và nhãn tốt và lưu và đóng nó.

  9. Bấm đúp vào mô hình trong ArcToolbox để hiển thị hộp thoại mô hình. Nhập thông số của bạn và nhấp vào OK. Nó sẽ xuất các tính năng được chọn sang một lớp tính năng mới và thêm nó vào bản đồ (nếu bạn đã chọn "Thêm vào hiển thị" trên lớp tính năng đầu ra).

    Hộp thoại mẫu

GHI CHÚ:

  • Bạn luôn có thể mã hóa các giá trị và không "tham số hóa" các biến mà bạn không muốn người dùng thay đổi như lớp tính năng hoặc tham số trường. Tôi chỉ thích có các công cụ chung chung / có thể tái sử dụng nên tôi đã tạo ra các tham số mô hình đó. Trong thực tế những gì tôi sẽ làm chỉ đơn giản là kéo và thả mô hình chung vào một mô hình mới và sau đó đặt các tham số được xác định trước của bạn - theo cách đó bạn có thể tạo một số mô hình "trình bao bọc" được xác định trước khác nhau, nhưng chỉ có một mô hình cơ bản thực hiện công việc, vì vậy nếu bạn cần thay đổi chức năng của nó, bạn chỉ phải thay đổi nó ở một nơi.

  • Nếu bạn may mắn như tôi, bạn sẽ không phải xác nhận mô hình và chỉ cung cấp một số dữ liệu giả để xóa nó sau khi xác thực (lưu ý cách tất cả các thành phần mô hình trống / trắng, nghĩa là chúng không "sẵn sàng để chạy" - nhưng tôi đã có thể chạy nó bằng mọi cách sau khi điền các tham số trên hộp thoại mô hình).


3

Bạn cũng có thể sử dụng một công cụ xử lý địa lý đơn giản có tên là Chọn để đạt được quy trình công việc này nếu các yêu cầu GUI của bạn không dành cho hộp thoại chính xác được minh họa bởi @ blah238.

Sử dụng cửa sổ Tìm kiếm để tìm hoặc truy cập ArcToolbox> Công cụ phân tích> Trích xuất> Chọn.

Công cụ Chọn (Phân tích) cho phép bạn trích xuất các tính năng bằng cách sử dụng bất kỳ trường (thuộc tính) nào từ một lớp đối tượng.

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.