Lấp đầy khoảng trống NoData trong raster bằng ArcGIS Desktop?


9

Tôi có một raster với những khoảng trống trong đó. Tôi muốn điền vào các ô này với mức trung bình của các ô xung quanh bằng ArcGIS 10.2 cho Máy tính để bàn.

Tôi đã thử "Thống kê tiêu cự" nhưng nó tính trung bình MỌI ô và không chỉ các khoảng trống.

Tôi đã thử [Khảm] .IsNull.Con ([Trung bình], [Khảm]) được tìm thấy ở đây nhưng không biết cách triển khai / nó sẽ không hiệu quả với tôi

Tôi đã thử Bản đồ đại số nhưng tôi nghĩ họ đã sử dụng các phiên bản trước 10.2.

Những gì tôi muốn. Tạo một raster giả với các khoảng trống được điền vào. Sử dụng raster giả để điền vào các khoảng trống của raster thật mà không thay thế các điểm bằng dữ liệu thực tế.


Cú pháp sai, sử dụng ([khảm] .isnull) .Con ([trung bình], [khảm])
FelixIP

1
Chỉ cần quan sát rằng liên kết 'Vá' của bạn dường như đã 15 tuổi (từ 2000-2001).
phloem

2
Một thỏa thuận tuyệt vời đã thay đổi với các raster gần đây vì vậy rất nhiều ví dụ cũ có mục đích đúng nhưng lại sai cú pháp được sử dụng trong phiên bản hiện tại. @crmackey có bản dịch đúng mặc dù tôi sử dụng hình tròn chứ không phải hình chữ nhật; đối với kích thước nhỏ hơn, có rất ít sự khác biệt nhưng đối với các khu vực lân cận lớn (tương đối) có sự khác biệt đáng kể giữa hình tròn và hình chữ nhật.
Michael Promotionson

1
Ngay cả khi nó là 15 yo, nó vẫn rất phù hợp. Huber biết và biết rất rõ chủ đề.
FelixIP

1
Chính xác. Các hoạt động là giống nhau chỉ có cú pháp đã thay đổi.
Michael Promotionson

Câu trả lời:


9

Những công việc này:

filled = arcpy.sa.Con(arcpy.sa.IsNull(in_raster),arcpy.sa.FocalStatistics(in_raster,
                        arcpy.sa.NbrRectangle(w, h),'MEAN'), in_raster)

Trong đó "w" và "h" là bán kính tìm kiếm.

Điều này chỉ làm thống kê tiêu điểm trên các khu vực NoData. Tôi đã xác minh bằng cách xóa dữ liệu khỏi DEM và sau đó tìm sự khác biệt. Bạn chỉ cần đảm bảo bán kính tìm kiếm là đủ.


Tôi có chỉ cần thêm tất cả những thứ này vào máy tính raster và thay đổi "in_raster" và w và h không? Vì một số lý do, tôi không thể làm cho nó hoạt động được, mặc dù dòng chảy của nó có ý nghĩa khi nó bỏ qua việc tạo thủ công của raster đầu mối và thực hiện nó một cách nhanh chóng.
Steven Crisp

Có nó để làm việc! Cảm ơn bạn rất nhiều! chỉ là thêm "nơi tôi không phải đến. Cảm ơn bạn!
Steven Crisp

1
Không vấn đề gì. Một từ chối trách nhiệm, như @ MichaelMiles-Stimson đã chỉ ra, sử dụng NbrCircle () sẽ tốt hơn.
crmackey 19/2/2015

Là wh trong đơn vị bản đồ của các tế bào?
Nếu bạn không biết - chỉ cần GIS

Bạn sẽ tốt hơn nếu sử dụng arcpy.sa.NbrCircle(radius, units)nơi mà các đơn vị có thể 'MAP'hoặc 'CELL'.
crmackey 16/07/2015

3

Sử dụng chức năng thống kê tiêu cự, như bạn đã mô tả để lấy trung bình tất cả các ô cho raster. Sau đó, sử dụng các hàm Con và IsNull trong máy tính raster để chỉ thay thế các ô là null.

Con(IsNull(<inputRaster>), <focalRaster>, <inputRaster>)

Một nhược điểm có thể có với giải pháp này là bạn có thể thấy một số giá trị ô trung bình bổ sung không mong muốn xung quanh chu vi của raster đầu ra của bạn


Tôi không thể nâng cao do danh tiếng hoặc w / e, nhưng phương pháp này hoạt động nếu tôi tạo một raster thống kê tiêu điểm trước, sau đó áp dụng mã ở trên. Tôi chỉ ước tôi có thể làm tất cả trong một dòng như nhận xét ở trên để tiết kiệm thời gian. Tôi có vài trăm thứ này ...
Steven Crisp

Nó chỉ phụ thuộc vào việc bạn muốn giữ cho số liệu thống kê tiêu điểm của mình raster hay diễn giải nhanh chóng ... cả hai phương pháp về cơ bản là giống nhau (+1 cho cả hai).
Michael Promotionson

3

Bạn nên sử dụng Máy tính Raster và có một dòng mã hữu ích và có liên quan từ trang Hỗ trợ của ESRI Cách thực hiện : Xóa và thay thế không có giá trị dữ liệu trong raster bằng thông tin thống kê từ các giá trị dữ liệu xung quanh . Từ câu hỏi của bạn, có vẻ như điều này sẽ làm chính xác những gì bạn đang cố gắng làm, nhưng hãy cho tôi biết nếu tôi sai. Dưới đây là ảnh chụp màn hình Máy tính Raster của tôi bằng cách sử dụng câu lệnh có điều kiện để tính giá trị trung bình cho các ô không có dữ liệu từ các ô xung quanh: nhập mô tả hình ảnh ở đây

Nếu bạn có hàng trăm việc phải làm, tôi khuyên bạn nên sử dụng Raster Iterator trong Model Builder, công cụ này sẽ cung cấp tất cả các trình quét của bạn vào Công cụ tính toán Raster, như sau:

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


2

Tôi đã thử phương pháp Raster Calculator mà LeonB đã sử dụng nhưng gặp phải lỗi Out of Memory, điều đáng ngạc nhiên là thông số kỹ thuật hệ thống của tôi. Đã viết một kịch bản python độc lập nhỏ - được sửa đổi từ đây - trong IDLE hoạt động cho tôi ...

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

env.workspace="D:/Watershed/"

inRaster="D:/Watershed/tamtr14_1m"

arcpy.CheckOutExtension ("Spatial")

outCon=Con(IsNull(inRaster), FocalStatistics (inRaster, NbrRectangle (5,5, "CELL"), "MEAN"), inRaster)

outCon.save ("D:/Watershed/outCon")
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.