Tôi có một lưới tích lũy dòng chảy và một shapefile chứa các khu vực lưu vực. Bây giờ tôi muốn thực hiện một số tính toán trên chúng vì vậy tôi cần trích xuất dữ liệu từ các ô trong raster liền kề với các khu vực lưu vực nhất định.
Trong quá trình đó, tôi cố gắng sử dụng Extract by Mask trên raster của mình, với một trong những đa giác bắt như mặt nạ (trong một vòng lặp sau này, nhưng bây giờ tôi chỉ cần nó hoạt động một lần).
Vấn đề là raster trích xuất được dịch chuyển một nửa ô sang trái, so với cả raster ban đầu và đa giác mặt nạ. Điều này đang làm rối tung phần còn lại của quá trình của tôi, vì tôi cố gắng chuyển đổi raster thành các điểm và giao với các đa giác khác sau này. Và trừ khi raster trích xuất trùng với bản gốc, tôi sẽ không nhận được đa giác đúng.
Các raster ban đầu và các đa giác được sắp xếp hoàn hảo, vì các đa giác được tạo ra từ các raster. Tôi đã cố gắng kiểm tra xem bằng cách nào đó đã có một số loại thay đổi trong các dự đoán, nhưng không thể tìm thấy bất kỳ. Tôi cũng đã thử trong các tài liệu ArcMap mới, khởi động lại mọi thứ nhiều lần (điều này giải quyết vấn đề một cách đáng ngạc nhiên thường xuyên) và thực thi các công cụ từ dấu nhắc python thay vì gọi tập lệnh của tôi. Tôi thậm chí đã cố gắng thực hiện công cụ Extract by Mask từ Hộp công cụ, với kết quả tương tự.
Đây là mã (rất đơn giản) mà tôi sử dụng trong dấu nhắc python trong ArcMap:
inpgs = r'C:\GIS\Catchm_ex.shp'
flowacc = r'C:\GIS\flowacc'
arcpy.MakeFeatureLayer_management(inpgs, 'currentMask', '"HydroID" = 269634')
outRaster = arcpy.sa.ExtractByMask(flowacc, 'currentMask')
Tôi có một số tệp mẫu ở đây
Tôi sử dụng Windows 7, ArcInfo 10.0 và Python 2.6.
Tôi đã thử Extract by Polygon và điều đó dường như hoạt động tốt. Có phải máy của tôi gặp trục trặc trên ExtractByMask? Hạn chế duy nhất là tôi gặp vấn đề khi sử dụng chức năng đó trong tập lệnh của mình, vì tôi không thể tìm ra cách lấy tọa độ của đa giác mặt nạ của mình (chỉ bao gồm 9 ô, với một điểm ở giữa nếu điều đó có ích).
Bây giờ tôi đã làm cho nó hoạt động với Extract by polygon bằng cách sử dụng mã bên dưới (được sửa đổi từ các trang hỗ trợ của Esri ). Thật không may, điều này không giải quyết vấn đề của tôi. Nó xuất hiện như thể đầu ra (từ công cụ này cũng như Trích xuất bằng mặt nạ) đôi khi được dịch chuyển một nửa ô sang bên trái, và đôi khi không. Chủ yếu là vậy, nhưng đôi khi nó thực sự nằm ở nơi cần đến.
Vì vậy, bây giờ tôi thực sự bối rối. Đây có phải chỉ xảy ra với tôi, trên máy tính của tôi? Nếu bất cứ ai khác cũng trải qua điều tương tự, xin vui lòng viết bình luận để tôi biết rằng tôi không cô đơn :) Đối với tôi, vấn đề này dường như là một vấn đề quá lớn để trở thành một lỗi, khiến tôi gặp vấn đề này rằng tôi đã tạo ra chính mình trên đường đi.
Bất kỳ ý tưởng về làm thế nào để tránh nó?
def ReadPoints(infc):
try:
import arcpy, numpy
except ImportError:
sys.exit('Unable to import arcpy')
# Identify the geometry field
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName
points = []
# Create search cursor
rows = arcpy.SearchCursor(infc)
# Enter for loop for each feature/row
for row in rows:
# Create the geometry object
feat = row.getValue(shapefieldname)
partnum = 0
# Step through each part of the feature
for part in feat:
# Step through each vertex in the feature
for pnt in feat.getPart(partnum):
if pnt:
points.append([int(pnt.X), int(pnt.Y)])
pt = numpy.array(points)
pts = []
for i in range(len(pt)):
t = pt[i]
pts.append(arcpy.Point(t[0],t[1]))
return pts