Tạo raster mới bằng cách sử dụng tập lệnh con () bằng ArcPy?


8

Tôi mới sử dụng Python và đã cố gắng viết mã kịch bản kiểu máy tính raster. Về cơ bản, tôi muốn chuyển đổi một raster có giá trị 0 đến -10.000 thành raster được xác định bằng 1s giữa các giá trị nhất định.

Lý do tôi muốn làm điều đó trong Python là vì cuối cùng tôi muốn tự động hóa quá trình này để tôi có thể chọn ra các giá trị khác nhau (ví dụ 0 đến -10, -5 đến -25, v.v.) và kết thúc với raster 1s cho mỗi . Mục đích của tôi sau đó là chuyển đổi chúng thành đa giác để sau đó tôi có thể thực hiện một số thao tác clip vector trên khoảng 800 shapefile.

Tôi đã viết một kịch bản tạo ra một raster mới ở cuối nhưng thay vì lưới này chứa đầy 1 giây, nó có các giá trị 0-256, do đó, ở đâu đó trong mã của tôi có một lỗi. Tôi sẽ biết ơn nếu bất cứ ai có thể phát hiện ra nó! Nếu bất cứ ai có cách để tăng tốc mã hoặc một ý tưởng tốt hơn về cách tôi có thể làm tất cả điều này cũng thì đó cũng sẽ là điều thú vị để biết.

Đây là mã của tôi:

import arcpy
from arcpy import env
from arcpy.sa import *

arcpy.env.overwriteOutput = 1 #this also doesn't work by the way, I have also tried            
#TRUE, no errors come up but it still doesn't let me overwrite the output file

#Set environment settings
env.workspace = "C:/folderlocation where inRaster is stored"

# Set local variables
inRaster = Raster("inputraster")

# Check out Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")

# depths wanted from inputraster raster
var = [-2500,-3000] #min depth, max depth

#Execute and save Con
OutRaster = Con((inRaster <= var[0])&(inRaster <= var[1]),1)

OutRaster.save("C:/drivelocation/outputfilename")

Dòng nơi bạn nói arcpy.env.overwriteOutput = 1, hãy thử sử dụng: arcpy.env.overwriteOutput = True Python phân biệt chữ hoa chữ thường và trong các nhận xét của bạn, bạn có TRUE.
Fezter

Thật không may, tôi vẫn không thể làm cho chức năng ghi đè hoạt động - True có kết quả tương tự như TRUE và 1 và tôi gặp lỗi. OutRaster.save ("C: / ...") RuntimeError: ERROR 000871: C: ....: Không thể xóa đầu ra ?????????????????? Còn ý tưởng nào nữa không?
dùng12433

Câu trả lời:


6

Tôi nghĩ vấn đề là với biểu hiện này

OutRaster = Con((inRaster <= var[0])&(inRaster <= var[1]),1)

Con mong đợi định dạng sau

Con

Mà trong trường hợp của bạn

Con((inRaster <= var[0])&(inRaster <= var[1]),1)

có thể được chia thành

  • in_conditable_raster, (inRaster <= var[0])&(inRaster <= var[1])

  • in_true_raster_or_constant, 1

Tôi hơi bối rối với những gì bạn đang cố gắng làm. Bạn dường như muốn biến thành 1 giá trị phù hợp với cả hai tiêu chí sau

  • inRaster <= -2500
  • inRaster <= -3000

Hai biểu thức có thể được giảm xuống inRaster <= -3000.

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

Vì vậy, tất cả các pixel có giá trị nhỏ hơn hoặc bằng -3000 đã được chuyển thành 1. Phần còn lại được giữ nguyên. Ít nhất đó là những gì mã của bạn nói. Không có cách nào để biết chắc chắn trừ khi bạn đăng bảng thuộc tính của raster này hoặc chính tệp raster thực tế.

Tôi nghĩ bạn có ý đó (inRaster <= var[0])&(inRaster > var[1]). Bằng cách đó, bạn sẽ bắt được các giá trị trong khoảng từ -2500 đến -3000.

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

Btw, phạm vi của các giá trị trong raster ban đầu là gì?


Cảm ơn phản hồi của bạn - Bây giờ tôi cảm thấy khá ngớ ngẩn. Tôi nghĩ rằng trong khi tôi đang thử những thứ khác nhau với mã tôi đã quản lý để lật ký hiệu lớn hơn một ký hiệu nhỏ hơn và tôi đã không nhặt được. Khi tôi thay đổi mã thành: InConRaster = ((inRaster <= var [0]) & (inRaster> = var [1])) OutRaster = Con (InConRaster, 1) thì nó sẽ hoạt động vì vậy cảm ơn bạn về mẹo định dạng. Chỉ là FYI, khi tôi đã thử nó với dấu hiệu chính xác nhưng không thay đổi biểu thức con thì nó vẫn không hoạt động nên có vẻ như đây là định dạng cần thiết. Thực sự biết ơn sự giúp đỡ. Cảm ơn bạn
dùng12433

Bạn được chào đón :) Đừng quên nhấp vào dấu kiểm ;-)
RK
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.