Trích xuất raster bằng mặt nạ đầu ra không hoàn toàn trùng lặp mặt nạ?


8

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

Câu trả lời:



1

Có thể chuyển đổi toàn bộ hình ảnh thành một điểm và sau đó chọn các điểm dựa trên sự xen kẽ giữa các lớp đa giác và điểm?. Tôi biết điều này không cung cấp bất kỳ cái nhìn sâu sắc nào cho kết quả lạ mà bạn đang nhận được nhưng nó có thể là một "công việc xung quanh" hữu ích


Vâng, tôi có thể làm điều đó. Vấn đề duy nhất là raster hơi lớn, do đó sẽ mất khá nhiều thời gian để tính toán. Dù sao thì tôi cũng có thể thử, trái ngược với việc nó không hoạt động. Cảm ơn vì đầu vào của bạn!
Martin

Không chắc chắn nếu điều này sẽ giúp nhưng bạn có thể nhập mã vạch, vì vậy có lẽ bạn có thể đặt ký hiệu cho một và sau đó nhập nó vào tất cả các phần còn lại. Bạn đã nhìn vào cửa sổ Phân tích hình ảnh, nó có rất nhiều tính năng có thể giúp ích. Cũng xem xét việc tạo một bộ dữ liệu khảm nếu hình ảnh lớn. Với khảm bạn có thể thêm các chức năng có thể cải thiện hiển thị hình ảnh. hy vọng điều đó có ích :)
dango

Trước đây tôi chưa làm việc nhiều với phân tích hình ảnh, nhưng bây giờ tôi có thể phải thử. Tôi sẽ báo cáo lại nếu điều này có thể đưa tôi đến bất cứ nơi nào :)
Martin

1

Trong môi trường raster của bạn, đặt raster snap giống như raster đầu vào của bạn (cái được trích xuất). Điều này sẽ tránh bất kỳ sự thay đổi.

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.