Mengisi celah NoData di raster menggunakan ArcGIS Desktop?

9

Saya memiliki raster dengan celah di dalamnya. Saya ingin mengisinya dengan rata-rata sel di sekitarnya menggunakan ArcGIS 10.2 untuk Desktop.

Saya telah mencoba "Focal Statistics" tetapi rata-rata SETIAP sel dan bukan hanya kesenjangan.

Saya telah mencoba [Mosaik] .IsNull.Con ([Rata-rata], [Mosaik]) ditemukan di sini Menambal tetapi tidak tahu bagaimana menerapkannya / itu tidak akan bekerja untuk saya

Saya telah mencoba Peta ALjabar tapi saya pikir mereka menggunakan versi sebelum 10.2.

Apa yang saya inginkan. Buatlah raster palsu dengan celah diisi. Gunakan raster palsu untuk mengisi celah raster nyata tanpa mengganti poin dengan data aktual.

Steven Crisp
sumber
Sintaks yang salah, gunakan ([mosaik] .isnull) .Con ([rata-rata], [mosaik])
FelixIP
1
Hanya mengamati bahwa tautan 'Penambalan' Anda tampaknya berusia 15 tahun (dari 2000-2001).
Floem
2
Banyak yang telah berubah dengan raster baru-baru ini sehingga banyak contoh yang lebih lama memiliki maksud yang benar tetapi mungkin sintaks yang salah untuk digunakan dalam versi saat ini. @ crmackey memiliki terjemahan yang tepat meskipun saya akan menggunakan lingkaran dan bukan persegi panjang; untuk dimensi yang lebih kecil ada sedikit perbedaan tetapi untuk area lingkungan yang relatif besar terdapat perbedaan yang signifikan antara lingkaran dan persegi panjang.
Michael Stimson
1
Bahkan jika itu 15 tahun, itu masih sangat relevan. Huber tahu dan tahu subjek dengan sangat baik.
FelixIP
1
Persis. Operasi adalah sama, hanya sintaks yang telah berubah.
Michael Stimson

Jawaban:

9

Ini bekerja:

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

Di mana "w" dan "h" adalah radius pencarian.

Ini hanya melakukan statistik fokus pada area NoData. Saya memverifikasi dengan menghapus data dari DEM, dan kemudian menemukan perbedaannya. Anda hanya perlu memastikan radius pencarian memadai.

Crmackey
sumber
Apakah saya hanya menambahkan semua ini ke kalkulator raster dan mengubah "in_raster" dan w dan h? Saya karena suatu alasan tidak bisa membuatnya bekerja, meskipun alirannya masuk akal karena ia melompati pembuatan manual faster raster dan melakukannya dengan cepat.
Steven Crisp
Berhasil! Terima kasih banyak! baru saja menambahkan "di mana aku tidak seharusnya. Terima kasih!
Steven Crisp
1
Tidak masalah. Satu penafian, seperti yang ditunjukkan @ MichaelMiles-Stimson, menggunakan NbrCircle () akan lebih baik.
crmackey
Apakah ada dalam unit peta sel?
Jika Anda tidak tahu- hanya GIS
Anda akan lebih baik menggunakan di arcpy.sa.NbrCircle(radius, units)mana unit dapat 'MAP'atau 'CELL'.
crmackey
3

Gunakan fungsi statistik fokus, seperti yang Anda gambarkan untuk meratakan semua sel untuk raster. Kemudian, gunakan fungsi Con dan IsNull dalam kalkulator raster untuk mengganti hanya sel yang nol.

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

Satu kelemahan yang mungkin terjadi dengan solusi ini adalah Anda dapat melihat beberapa nilai sel rata-rata tambahan yang tidak diinginkan di sekeliling raster output Anda

Ben Gosack
sumber
Saya tidak dapat menghapus karena reputasi atau w / e, tetapi metode ini berfungsi jika saya membuat statistik faster raster terlebih dahulu, dan kemudian menerapkan kode di atas. Saya hanya berharap saya bisa melakukan semuanya dalam satu baris seperti komentar di atas untuk menghemat waktu. Saya punya beberapa ratus hal ini ...
Steven Crisp
Itu hanya tergantung pada apakah Anda ingin menjaga statistik fokus Anda tetap raster atau menginterpretasikan sambil jalan ... kedua metode pada dasarnya sama (+1 untuk keduanya).
Michael Stimson
3

Anda harus menggunakan Kalkulator Raster dan ada baris kode yang berguna dan relevan dari halaman Dukungan ESRI HowTo: Hapus dan ganti tidak ada nilai data dalam raster menggunakan informasi statistik dari nilai data di sekitarnya . Dari pertanyaan Anda, sepertinya ini akan melakukan apa yang Anda coba lakukan, tetapi beri tahu saya jika saya salah. Inilah tangkapan layar Raster Calculator saya menggunakan pernyataan kondisional untuk menghitung nilai rata-rata sel tanpa data dari sel di sekitarnya: masukkan deskripsi gambar di sini

Jika Anda memiliki ratusan ini untuk dilakukan, saya sarankan menggunakan Raster Iterator di Model Builder, yang akan memberi makan semua raster Anda ke dalam Alat Kalkulator Raster, seperti ini:

masukkan deskripsi gambar di sini

Leo
sumber
2

Saya mencoba metode Kalkulator Raster yang digunakan LeonB tetapi mengalami error Out of Memory, yang mengejutkan mengingat spesifikasi sistem saya. Menulis skrip python kecil yang berdiri sendiri - dimodifikasi dari sini - di IDLE yang berfungsi untuk saya ...

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")
wiebe712
sumber