Membuat shapefile memperlihatkan jejak kaki Raster?

33

Saya memiliki sekitar 1.000 gambar satelit dalam format tiff, dan saya ingin membuat shapefile yang akan berfungsi sebagai indeks untuk raster. Ini mirip dengan katalog raster, tetapi saya tidak ingin membuat katalog raster.

Beberapa kendala yang dapat saya lihat, adalah bahwa gambar di georefrensi, sehingga tidak berbentuk persegi panjang (saya berbicara tentang area data).

Untuk memperjelas, saya memerlukan poligon untuk menutupi hanya piksel non-nol (atau non nodata) dari raster, dan bukan seluruh raster persegi panjang. Sebagian besar jawaban sejauh ini, memberikan poligon persegi panjang, yang mencakup data, serta piksel non-data.

Gambar saya Contoh Gambar Satelit


Hasil yang diberikan oleh alat yang telah saya periksa (seperti raster catlog, berbagai Arcscripts, skrip Python khusus yang diberikan dalam salah satu jawaban): Hasil


Hasil yang saya inginkan: masukkan deskripsi gambar di sini

Devdatta Tengshe
sumber
4
Sepertinya membuat katalog raster, bahkan sementara akan menjadi solusi yang baik untuk membuat jejak kaki. Anda dapat membuat katalog yang tidak dikelola, yang membuat daftar referensi, tetapi meninggalkan gambar di lokasi mereka di server. Mudah, dan relatif cepat untuk melakukan impor batch raster ke katalog. Setelah dibuat, Anda dapat mengekspor jejak kaki ke class feature baru dan menghapus katalog raster. Ini mungkin secepat opsi lain.
Dapatkan Spasial
2
Dataset mosaik juga menghasilkan jejak citra.
Roy
dataset mosaik adalah cara untuk pergi. Sangat mudah dicapai
Brad Nesom
Jadi pada gambar terakhir, apakah piksel di luar kotak merah NoData atau 0? Jika 0, apakah ada piksel di area yang Anda inginkan yang juga bernilai 0?
Chad Cooper
1
Pixel di luar batas merah adalah nodata; Namun data multi-spektral saya memiliki 0,0,0 sebagai nilai RGB untuk area nodata. Dalam kedua kasus, tidak ada piksel dengan nilai 0 di dalam area yang diperlukan.
Devdatta Tengshe

Jawaban:

15

Ada sebuah plugin di QGIS bernama Image Boundary . Ini adalah alat yang hebat. Dalam alat ini ada opsi untuk "Piksel Valid" yang akan menghilangkan tepi hitam gambar satelit, misalnya.

Ryan Garnett
sumber
Plugin ini mengklaim melakukan apa yang saya inginkan, tetapi gagal pada gambar yang saya coba. Saya akan mencoba dengan data asli saya besok.
Devdatta Tengshe
Saya menemukan bahwa plugin ini bekerja sangat baik dengan data multi-spektral, tetapi kadang-kadang memberikan hasil aneh dengan gambar pankromatik pita tunggal.
Devdatta Tengshe
2
Saya setuju bahwa Batas Gambar QGIS berfungsi dengan baik tetapi apakah ada alat untuk melakukan ini untuk file vektor di mana kita tidak memerlukan "kotak pembatas" atau "jejak" tetapi poligon yang menguraikan di mana data ada.
GeorgeC
Alat batas gambar sangat bagus, namun tautan yang Anda berikan adalah 404. Saya percaya alat tersebut masih tersedia jika Anda mengizinkan plugin eksperimental dalam pengaturan plugin. Mungkin menggunakan tautan ini ?: github.com/lmotta/imagefootprint_plugin
Aaron
Apakah ada dokumentasi untuk menggunakan Image Boundary?
Loonuh
9

Kode berikut akan mengambil input raster, mendapatkan jangkauannya, dan menyisipkan jangkauan itu ke dalam poligon FeatureClass:

import arcpy

r = arcpy.Raster(in_raster)
point = arcpy.Point()
array = arcpy.Array()

corners = ["lowerLeft", "lowerRight", "upperRight", "upperLeft"]

cursor = arcpy.InsertCursor(fc)
feat = cursor.newRow()
for corner in corners:    
    point.X = getattr(r.extent, "%s" % corner).X
    point.Y = getattr(r.extent, "%s" % corner).Y
    array.add(point)
array.add(array.getObject(0))
print len(array)
polygon = arcpy.Polygon(array)
feat.shape = polygon
cursor.insertRow(feat)
array.removeAll()
del feat
del cursor

Anda dapat menjalankannya di jendela ArcMap Python dengan mengatur in_rasterdan fcseperti itu:

>>> fc = 'r_extent'
>>> in_raster = 'CaliCoast10mNED_HavCurvedPCS'

di mana r_extentada kelas fitur poligon yang ada. Kemudian salin kodenya dan jalankan. Saya mendapatkan ini:

masukkan deskripsi gambar di sini

Chad Cooper
sumber
1
Saya telah menggunakan kode di atas untuk melakukan hal yang sama untuk folder: gist.github.com/4162013
jeb
7

Anda dapat menggunakan gdaltindex untuk ini: http://www.gdal.org/gdaltindex.html

Namun itu masih akan membuat persegi panjang (misalnya 4 + 1 poin) dalam sistem referensi yang sama dengan gambar. Tapi saya bertanya-tanya apakah itu benar-benar masalah: seberapa besar gambar Anda?

johanvdw
sumber
Masalah dengan gdaltindex, adalah bahwa ia menciptakan poligon persegi panjang untuk setiap gambar. Saya hanya tertarik pada pixel nilai bukan nol
Devdatta Tengshe
4

Saya mencoba alat "Image Boundary" di QGIS tetapi gagal dengan beberapa raster.

Opsi lain yang bekerja untuk saya adalah: - 1. Mengkonversi raster input ke nomor digital tunggal dengan menggunakan utilitas baris perintah gdal_translate.

gdal_translate -co kompres = lzw -b 1 -ot byte -scale 1 1 inp.tif out.tif

Ini akan membuat raster dengan nilai 1 di mana-mana inp.tif memiliki nilai bukan nol.

  1. Kemudian di ArcMap Anda dapat menggunakan alat "raster to polygon" untuk mendapatkan polygon (shapefile).

Shapefile keluaran akan memiliki batas non-segi empat, dengan beberapa titik poligon, mengikuti batas aktual gambar.

pengguna3294041
sumber
3

Jika Anda tertarik pada solusi yang ditulis, coba perintah gdal nearblack . Anda dapat menggunakan flag -white untuk mengambil data yang dibatasi oleh spasi juga. Anda dapat mempologonisasi output untuk menghasilkan jejak non-persegi panjang dari data raster.

##run nearblack
shellcmds = "nearblack -white -o " + outpath + " " + inpath
os.system(shellcmds)

##run polygonize
shellcmds = "gdal_polygonize.py " + outpath + " -f" + """ "ESRI Shapefile"  """ + outpath2 + " nearblack"
os.system(shellcmds)
jsta
sumber
1

Saya percaya bahwa, di dunia ArcGIS Anda dapat mencapainya dengan alat 3D Analyst \ Conversion \ From Raster \ Raster Domain .

Tomek
sumber
Ini hanya berfungsi pada data 3D, itupun tidak memberikan hasil yang diharapkan. Sama sekali tidak bekerja dengan Citra Satelit.
Devdatta Tengshe
Ya itu benar. Saya akan meninggalkan jawaban untuk orang lain, untuk menyadari hal itu.
Tomek
0

Ada alat di ArcGIS 3D Analyst yang disebut Raster Domain yang membuat jejak poligon atau polyline dari bagian data dari dataset raster - dan mengabaikan sel-sel NoData. Bekerja dengan baik untuk saya.

joey
sumber
1
Selamat datang di situs kami! Bisakah Anda menjelaskan bagaimana jawaban Anda berbeda dari jawaban Tomek?
whuber
Domain raster bekerja untuk saya - terima kasih atas bantuan Anda!
meryloo
0

Anda bisa membuat katalog raster dengan referensi spasial yang ditugaskan, menambahkan katalog raster ke ArcMap, dan kemudian "Ekspor Jejak Kaki". Ingatlah bahwa ada opsi untuk membuat katalog raster "TIDAK DAPATKAN" sehingga Anda tidak membuat duplikat dari setiap dataset raster.

nhunsaker
sumber