Sử dụng arcpy.SetParameter () với Python Script Tool được xuất bản dưới dạng Dịch vụ xử lý địa lý?


8

Tôi có một tập lệnh cần được xuất bản lên ArcGIS Server dưới dạng dịch vụ xử lý địa lý. Kịch bản lệnh này tính toán một tập hợp các bản ghi ở dạng bảng. Tôi cần đặt một tham số đầu ra để nó trả về bảng (recordset).

Vì vậy, để đảm bảo tôi có một bảng (không phải lớp tính năng), tôi đang sử dụng arcpy.TableToTable_conversion (), đưa bảng vào không gian làm việc in_memory. Vì vậy, tôi biết tôi có một cái bàn. Tôi biết rằng nó có các bản ghi, vì tôi có thể thực hiện một arcpy.GetCount và lấy số lượng các bản ghi.

Tôi có tham số đầu ra được xác định. Đây là những gì nó trông giống như:

arcpy.SetParameter(2, theTable)

Không có vấn đề gì tôi thử điều này không hoạt động. Trong hộp công cụ của tôi, tham số đầu ra được đặt là Bản ghi. Tôi đã thử cung cấp một đối tượng recordset, đường dẫn đến lớp tính năng trong bộ nhớ và nhiều ý tưởng khác.

Làm thế nào để bạn xử lý đúng cách xuất một bảng thành đầu ra recordset bằng SetParameter cho máy chủ ArcGIS?


Âm thanh như (từ ESRI) mà tôi không thể sử dụng không gian làm việc trong bộ nhớ để xuất các bản ghi. Vào thời điểm dịch vụ truy xuất các mục được đặt trong câu lệnh SetParameter, bảng trong bộ nhớ đã bị xóa.
Kenton W

1
Không chắc ai đã nói với bạn điều đó, nhưng đó là không đúng sự thật. Bạn có thể sử dụng đầu ra in_memory. Thời gian thực duy nhất bạn không thể sử dụng đầu ra in_memory là khi bạn muốn vẽ kết quả với máy chủ bản đồ kết quả
KHibma

Câu trả lời:


5

Theo kinh nghiệm của tôi (và tôi rất vui khi được sửa lỗi này) khi bạn xây dựng một dịch vụ xử lý địa lý, đối số bạn đưa ra cho đầu ra không phải là chính đối tượng, mà là một tham chiếu đến đối tượng (đường dẫn tệp).

Kiểu dữ liệu chỉ cho máy chủ biết cách diễn giải dữ liệu tùy thuộc vào cách bạn chạy công cụ (trong một ứng dụng, nó có thể tự động hiển thị tập bản ghi, từ SOAP bạn có thể lấy bản ghi thành luồng dữ liệu (mặc dù tôi không chắc ) và thông qua REST bạn sẽ chỉ nhận được một liên kết).

Về cơ bản, bạn cần ghi bảng của mình vào tệp này - Máy chủ ArcGIS sẽ tự động thêm một đường dẫn thư mục / công việc lên phía trước dựa trên thư mục đầu ra của bạn từ khi bạn thêm mô hình vào máy chủ. ví dụ

  1. Thư mục đầu ra của bạn trên máy chủ có thể là C:/arcgisserver/arcgisoutput
  2. Vì vậy, trên máy chủ, thư mục này trở thành /arcgisoutput
  3. Sau đó, đầu ra của bạn cho hộp công cụ của bạn có thể là /arcgisoutput/tabletoolbox
  4. Giá trị của bạn cho đầu ra có thể là %scratchworkspace%/tablename.csv

Lưu ý rằng %scratchworkspace%máy chủ ArcGIS cho phép phụ trong các thư mục đầu ra. Xem các khái niệm chính cho dịch vụ xử lý địa lý trong trợ giúp ESRI.

Vì vậy, máy chủ tự động tạo một id công việc (UUID), tạo một thư mục cho bạn ở đầu ra và đưa nó vào đối số đầu ra của bạn. Viết dữ liệu của bạn ở đó và khi bạn lấy lại từ máy chủ arcgis, bạn sẽ nhận được một liên kết href như: http://server_name/arcgisoutput/tabletoolbox/job_id/tablename.csv

Bây giờ bạn có thể truy cập tệp theo cách bạn muốn (sử dụng urllib2.urlopen(path).read()trong Python làm lối tắt nhanh).

Hy vọng tất cả điều này là rõ ràng! -H


0

Tôi giả sử rằng paramet paramet đã được đặt thành dẫn xuất trong tập lệnh tham số.

Tôi cũng giả định rằng bạn có thể xuất bản công cụ trực tiếp bằng hộp công cụ hoặc thông qua dự án mxd. Theo kinh nghiệm của tôi, tôi đã thành công hơn với các công cụ được xuất bản trong các dự án mxd.

Đôi khi tôi đã giải quyết các vấn đề về dịch vụ xử lý địa lý bằng cách xuất bản một mô hình ModelBuilder chỉ là một trình bao bọc xung quanh tập lệnh python, tức là bên trong mô hình tôi chỉ có tập lệnh và tôi đã hiển thị các thông số script bên ngoài mô hình.


Tôi đang sử dụng hộp công cụ tùy chỉnh để xuất bản tập lệnh dưới dạng dịch vụ. Khi bạn đặt tham số thành Đầu ra, nó sẽ tự động được thay đổi thành Đã tạo.
Kenton W
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.