Xuất dữ liệu từ đầu ra Thu thập giá trị trong ArcGIS ModelBuilder?


11

Tôi hiện đang chơi với ModelBuilder. Tôi đã thêm một hình ảnh của mô hình tôi có tại thời điểm này.

Mô hình này hiện đang lặp lại 6 shapefile, vì vậy mỗi 'giá trị đầu ra' chứa 6 hình trong một danh sách. Tôi không thể tìm cách trích xuất các giá trị từ các danh sách này vào tệp bảng / văn bản hoặc tương tự.

Có cách nào để làm việc này không?

mô hình

Đây là những gì được hiển thị khi tôi mở 'giá trị đầu ra' sau khi chạy mô hình: nhập mô tả hình ảnh ở đây

Tôi chỉ muốn lấy 6 số đó bằng cách nào đó ...


Điều này về cơ bản là điều tương tự bạn đang hỏi ở đây có đúng không? gis.stackexchange.com/questions/25922/ Kiếm Thu thập các giá trị thực hiện điều đó. Nếu bạn đọc trợ giúp, nó sẽ cho bạn biết rằng nó thu thập các giá trị có thể được truyền vào một công cụ khác. Vì vậy, bạn đang cố gắng làm gì với các giá trị? Có phải chỉ cần đăng nhập chúng vào một tập tin hoặc bạn cần chúng để xử lý thêm?
theJones

Tôi chỉ muốn đăng nhập chúng vào một tập tin. Tôi không thể tìm thấy một công cụ để cung cấp các giá trị đầu ra vào trình xây dựng mô hình để trích xuất chúng.
JPD

Câu trả lời:


17

Bạn có thể làm điều này bằng cách sử dụng công cụ Tính giá trị (Quản lý dữ liệu) và một số phép thuật Python. Xem thêm câu hỏi liên quan này: Thêm mã tùy ý vào trình xây dựng mô hình Arcgis?

Một biến multivalue chỉ là một chuỗi dấu chấm phẩy phân định các giá trị, vì vậy những gì các multivaluesToCsvchức năng dưới đây làm là chia các biến multivalue vào danh sách và transpose chúng thành hàng sau đó được ghi vào một CSV (giá trị bằng dấu phẩy) tập tin văn bản.

Trình lặp mô hình chạy TẤT CẢ các quy trình trong mô hình một lần mỗi lần lặp - điều này là không mong muốn đối với công cụ Tính giá trị của chúng tôi, mà chúng tôi chỉ muốn chạy một lần vào cuối. Cách bạn thực hiện điều này là bằng cách tạo một mô hình bên ngoài khác để bọc mô hình bên trong ban đầu. Điều này được thảo luận trong chủ đề trợ giúp Tích hợp một mô hình trong một mô hình .

Vì vậy, đây là những gì bạn cần làm để làm việc này:

Mô hình bên trong - Lặp lại các lớp tính năng, xử lý chúng, thu thập các giá trị:

  1. Trong mô hình ban đầu của bạn, sẽ là mô hình "bên trong" của chúng tôi, hãy thêm một công cụ Thu thập giá trị khác để thu thập các Namegiá trị của biến để chúng tôi có thể ánh xạ các giá trị thống kê khoảng cách đến các tên lớp tính năng tương ứng của chúng.
  2. Đặt các biến đầu vào và đầu ra dưới dạng tham số mô hình (nhấp chuột phải vào hình bầu dục và kiểm tra Tham số mô hình). Làm điều này cho từng đầu ra của các công cụ Thu thập giá trị cũng như bất kỳ tham số đầu vào nào bạn cần, chẳng hạn như Không gian làm việc đầu vào.
  3. Lưu và đóng mô hình bên trong.

Mô hình bên ngoài - Chạy mô hình bên trong, chạy công cụ Tính toán giá trị chỉ một lần khi mô hình bên trong hoàn thành:

  1. Tạo một mô hình mới - đây sẽ là mô hình "bên ngoài" của chúng tôi.
  2. Thêm một biến loại Folderđể cho phép bạn chỉ định nơi tạo tệp CSV đầu ra.
  3. Thêm một biến loại Stringđể cho phép bạn chỉ định tên của tệp CSV đầu ra.
  4. Thêm Mô hình bên trong vào mô hình mới (kéo và thả từ ArcToolbox hoặc nhấp chuột phải và Thêm dữ liệu hoặc Công cụ, duyệt đến mô hình bên trong và nhấp vào Thêm)
  5. Tạo các biến cho bất kỳ tham số nào của mô hình bên trong mà bạn muốn có thể đặt từ mô hình bên ngoài, chẳng hạn như Không gian làm việc đầu vào (bấm chuột phải vào mô hình bên trong và chọn Tạo tham số biến từ tham số).
  6. Thêm công cụ Tính giá trị cho mô hình mới
  7. Dán phần sau vào các hộp thích hợp của công cụ Tính giá trị:

    Biểu hiện :

    multivaluesToCsv(r"%Output CSV File Location%", "%Output CSV File Name%", "%Feature Class Names%", "%Minimum Distance Values%", "%Average Distance Values%", "%Maximum Distance Values%")
    • Điều này sử dụng thay thế biến trong dòng để truyền các biến mô hình vào hàm. Điều chỉnh để phù hợp với tên biến mô hình của bạn.
    • Cái rtrước "%Output CSV File Location%"rất có ý nghĩa: điều này chỉ ra rằng đây là một chuỗi thô ; bởi vì các đường dẫn hệ thống tệp Windows thường chứa dấu gạch chéo ngược ( ký tự thoát trong Python), chúng ta phải sử dụng điều này để ngăn Python hiểu sai các dấu gạch chéo ngược và các ký tự tiếp theo thành chuỗi ký tự đặc biệt.
    • Hãy chắc chắn đặt dấu ngoặc kép quanh các biến trong dòng bởi vì không có chúng, Python sẽ nghĩ chúng là các định danh thay vì chuỗi.

    Khối mã:

    import os, csv
    
    def multivaluesToCsv(csvfilepath, csvfilename, fcnames, minvalues, avgvalues, maxvalues):
        ext = 'csv' # Define output file extension (e.g. csv or txt)
        header = ['FC', 'MIN', 'AVG', 'MAX'] # Define header row (column names)
    
        # Join CSV file path and name, adding extension if necessary
        csvfile = os.path.join(csvfilepath, os.extsep.join((csvfilename, ext)) if not os.path.splitext(csvfilename)[1].lower().endswith(ext) else csvfilename)
    
        # Open text file for writing
        with open(csvfile, 'wb') as f:
            w = csv.writer(f)
            w.writerow(header) # Write header row
            rows = zip(*map(lambda x: x.split(';'), [fcnames, minvalues, avgvalues, maxvalues])) # Transpose the semicolon-delimited values into rows
            w.writerows(rows)
        return csvfile
  8. (Tùy chọn) Đặt các biến đầu vào và đầu ra dưới dạng tham số mô hình nếu bạn muốn có thể chạy chúng từ hộp thoại công cụ của mô hình hoặc xâu chuỗi nó với các mô hình / tập lệnh khác. Đầu ra duy nhất của mô hình bên ngoài là tệp CSV.

  9. (Tùy chọn) Kết nối các biến đầu vào và đầu ra mô hình bên trong với công cụ Tính giá trị làm điều kiện tiên quyết. Tôi không nghĩ rằng điều này thực sự có bất kỳ ảnh hưởng nào, nó chỉ làm cho nó rõ ràng hơn về những gì đang diễn ra.

Tôi đã thử nghiệm điều này với ModelBuilder và làm cho nó hoạt động (xem ảnh chụp màn hình).

Mô hình bên trong : Mô hình bên trong

Mô hình bên ngoài: Mô hình bên ngoài

Mô hình bên trong chạy tất cả các quy trình của nó một lần cho mỗi lớp tính năng và sau đó công cụ Tính giá trị chạy một lần ở cuối để xuất tệp CSV một lần và chỉ một lần.


Xin chào, cảm ơn vì đã nỗ lực rất nhiều vào câu trả lời của bạn và xin lỗi vì câu trả lời muộn của tôi. Tôi đang cố chạy mô hình như bạn đã mô tả, nhưng tôi gặp sự cố với CSV. Tôi đã tạo một tệp CSV trống trong Excel và lưu nó, sau đó tải nó vào mô hình. LRI 000539: Lỗi khi chạy biểu thức: multivaluesToCsv (r "% Tệp CSV%", "% Giá trị tên FC%", "% Giá trị tối thiểu%", "% Giá trị trung bình%", "% Giá trị tối đa%") .IOError '>: [Errno 13] Quyền bị từ chối: u'% Tệp CSV% 'Không thể thực thi (Tính giá trị). Tôi cứ bị lỗi này. CSV của tôi được gọi là CSVFile.csv.
JPD

1
Chỉ cần sửa nó - đây là giải pháp hoàn hảo. Cám ơn rất nhiều về sự giúp đỡ của bạn!
JPD

Mã Python sẽ tạo tệp CSV cho bạn, không cần phải tạo trước. Như bạn đã thấy, nếu bạn mở tệp trong Excel, khóa tệp đó và nó không thể được ghi vào Python cho đến khi bạn đóng nó.
blah238

2
FYI Tôi đã cập nhật các hướng dẫn và ảnh chụp màn hình để sử dụng các mô hình lồng nhau để tránh Tính toán giá trị chạy nhiều lần cũng như khắc phục sự cố trong đó tệp văn bản phải tồn tại trước đó (bây giờ bạn chỉ định vị trí đầu ra và tên tệp là hai tham số riêng biệt).
blah238

Câu trả lời tuyệt vời! Đã giúp tôi giải quyết một vấn đề tương tự khi xuất các số liệu thống kê Xác thực chéo lớp địa lý cho tệp csv. Cảm ơn @ blah238!
Cotton.Rockwood

1

Đầu ra mà mô hình của bạn mô tả chỉ đơn giản là một giá trị được cập nhật trong bảng thuộc tính phải không? Bạn có thể không đơn giản mở tệp .dbf được liên kết với shapefile đã cập nhật không?

Không thực hiện được điều này, Bảng Chọn (Công cụ phân tích> Trích xuất) sẽ hoạt động với truy vấn SQL.


Xin chào, cảm ơn bạn đã trả lời. Tôi sợ rằng nó không cập nhật tệp .dbf của mỗi shapefile. Thêm 'Bảng chọn' vào trình tạo mô hình cũng không hoạt động, vì tôi không thể kết nối 'Tối thiểu / Trung bình / Khoảng cách tối đa' hoặc Val Giá trị đầu ra 'làm đầu vào cho công cụ.
JPD
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.