Hơn

Trích xuất hàng loạt theo mặt nạ, nhưng tùy chỉnh tên đầu ra riêng lẻ

Trích xuất hàng loạt theo mặt nạ, nhưng tùy chỉnh tên đầu ra riêng lẻ


Tôi muốn trích xuất bằng mặt nạ (cùng một mặt nạ mọi lúc) trên khoảng 500 raster, nhưng tôi muốn chỉ thêm tên của mỗi raster đầu vào. Vì vậy, nếu một raster có tiêu đề Landsat_010182, tôi chỉ muốn thêm _clip vào nó để tôi vẫn biết mọi hình ảnh chứa những gì. Đây có phải là điều tôi cần làm trong python hay có cách nào khác để làm điều này?

Chỉnh sửa:

Đây là mã chính xác mà tôi đang thử:

import arcpy import global import os arcpy.CheckOutExtension ('Spatial') "" "chỉ chứa đường dẫn tuyệt đối đến mặt nạ layer "" "mask = r'D:  Sheyenne  sheyenne_area_poly.shp '" "" tạo danh sách rỗng để giữ các đường dẫn đến các đường dẫn đầu vào "" "inrasters = []" "" điền vào các đường dẫn danh sách với tất cả các đường dẫn đến .tif in thư mục "" "os.chdir (indir) cho r trong global.glob ('*. tif'): inrasters.append (r) # #" "" lặp qua tất cả đầu vào .tif từ danh sách inrasters "" "cho inraster trong inrasters: # # "" "tạo một tên duy nhất cho mỗi raster đầu ra" "" outraster = inraster.replace ('. tif', '_ clip.tif') # "" "Kẹp mỗi raster với tên duy nhất của nó làm đầu ra" " arcpy.sa.ExtractByMask (inraster, mặt nạ)

nhưng nó trả về lỗi:

ExecuteError: Không thực thi được. Các thông số không hợp lệ. LỖI 000865: Rster đầu vào: LT50290282011268PAC01_sr_band1.tif không tồn tại. Không thực thi được (ExtractByMask).

LT50290282011268PAC01_sr_band1.tif là tệp đầu tiên tronginrasterdanh sách

Chỉnh sửa:

Mọi thứ hoạt động như tôi mong đợi cho đến khi vòng lặp bắt đầu. Khi tôi ininrastertất cả chúng đều được liệt kê. Khi tôi invượt ra ngoàichỉ có bảng xếp hạng thứ hai trong danh sách của tôi được in. Vì vậy, một nơi nào đó trong vòng lặp là khi mọi thứ đang đổ vỡ. Ngoài ra, tôi không bao giờ thực sự sử dụng biếnvượt ra ngoàimà có thể là một phần của vấn đề.

Chỉnh sửa:

Tôi đã làm cho nó hoạt động bằng cách sử dụng mã này:

import arcpy arcpy.env.workspace = 'D:  Sheyenne  Practice_bands' arcpy.CheckOutExtension ('Spatial') "" "đường dẫn tuyệt đối đến lớp mặt nạ của bạn" "" mask = r'D:  Sheyenne  sheyenne_area_poly.shp '" "" Vòng qua các raster, nối tên và savefiles "" "rasters = arcpy.ListRasters () cho raster trong raster: outraster = raster.replace ('. Tif', '_ clip.tif') arcpy.gp.ExtractByMask_sa (raster, mặt nạ, outraster)

Bạn có thể sao chép trường từ trình tạo hàng loạt và dán nó vào excel để tạo tên đầu ra tùy chỉnh nếu bạn không sử dụng python. Sau đó có thể được sao chép lại thành hàng loạt từ excel.

Tôi thực sự khuyên bạn nên sử dụng nó như một cơ hội để thử Python, đây là một ứng dụng hoàn hảo dành cho người mới bắt đầu. Một cái gì đó như thế này sẽ thực hiện thủ thuật:

thư mục nhập khẩu thông báo "" "chỉ chứa đầu vào raster của bạn và không có gì khác" "" indir = 'c: / GIS / input_rasters /' "" "đường dẫn tuyệt đối đến lớp mặt nạ của bạn" "" mask = 'c: / GIS / clip_mask.shp '"" "tạo danh sách trống để giữ đường dẫn đến các đường dẫn đầu vào" "" inrasters = [] "" "điền vào danh sách các đường dẫn đến .tif trong thư mục" "" os.chdir (indir) cho r in global.glob ('*. tif'): inrasters.append (r) "" "lặp qua tất cả đầu vào .tif từ danh sách inrasters" "" cho inraster trong inrasters: "" "tạo tên duy nhất cho mỗi đầu ra raster" " "outraster = inraster.replace ('. tif', '_ clip.tif')" "" Kẹp mỗi raster với tên duy nhất làm đầu ra "" "r = arcpy.sa.ExtractByMask (inraster, mask) r.save (outraster )

Không cần phải lặp lại danh sách raster được tạo từglobal.glob ()và thêm chúng vào một danh sách mới. Tôi sẽ thực hiện cách tiếp cận sau:

  1. Xác định không gian làm việc đầu vào và đầu ra
  2. Liệt kê tất cả raster đang sử dụngquả cầu
  3. Lặp lại danh sách
  4. Xác định tên đầu ra và đường dẫn
  5. Thực hiện chiết xuất bằng mặt nạ
  6. Lưu chiết xuất bằng mặt nạ

nhập thư mục arcpy, global, os arcpy.CheckOutExtension ('Spatial') # chỉ chứa đầu vào raster và không có gì khác inws = r'D:  Sheyenne  Atmospherically Cor Correct Landsat  Practice_bands 'outws = r'D:  Sheyenne  Atmospherically Cortified Landsat  Practice_bands  out '# Lưu ý thư mục không gian làm việc đầu ra mới # đường dẫn tuyệt đối đến mask layer mask = r'D:  Sheyenne  sheyenne_area_poly.shp' # Tạo danh sách tất cả các tệp .tif (Lưu ý rằng điều này liệt kê các đường dẫn đầy đủ) rasters = global .glob (os.path.join (inws, "* .tif")) # lặp qua tất cả đầu vào .tif từ danh sách raster cho ras trong raster: # Xác định đường dẫn đầu ra và đặt tên outname = os.path.join (outws, os.path.basename (ras) .split (".") [0] + "_clp.tif") # Thực hiện EBM out_extract = arcpy.sa.ExtractByMask (ras, mask) # Lưu đầu ra out_extract.save (outname )

Xem video: ШОШИЛИНЧ ХАБАР РОССИЯ ХАРБИЙЛАРИ ЎЗБГА ЕТИБ КЕЛДИ---МИРЗИЁЕВДАН ХУШ ХАБАР