Saya memiliki dua lapisan di ArcGIS: Satu adalah titik vektor dan yang lainnya adalah lapisan raster. Saya ingin menambahkan nilai grid data raster ke titik vektor. Masalahnya adalah titik vektor jauh dari grid raster yang ada dengan nilai, jadi perintah "Sampel" tidak mengembalikan nilai untuk titik vektor tersebut.
Jadi pertanyaan saya adalah: Bagaimana saya bisa menemukan sel raster terdekat diberi titik vektor dan mengekstrak nilai dari sel?
Sebenarnya ada dua hal yang perlu saya lakukan:
- Identifikasi outliner di dalam ranger (Biasanya 1-2 sel jauhnya dari raster yang ada)
- Tetapkan nilai dari raster terdekat kepada mereka, jika mereka berada dalam kisaran
Diedit: Saya memiliki sekitar 3000 titik vektor dan masalah saya adalah ini:
Saya perlu menambahkan nilai raster berdasarkan lokasi ke titik-titik vektor. Saya menggunakan alat "Contoh" dan berfungsi dengan baik untuk sebagian besar poin.
Namun, ada situasi seperti ini
Titik kanan bisa mendapatkan nilai dari raster ("Contoh" berfungsi) tetapi titik kiri tidak bisa karena masalah perataan.
Raster ke poligon tidak berfungsi karena saya mendapatkan pesan kesalahan bahwa saya tidak dapat mengubahnya menjadi vektor karena mereka keluar dari domain. Saya juga punya poin seperti ini
Poin-poin teratas itu seharusnya tidak mendapatkan nilai apa pun karena mereka terlalu jauh dari raster.
Saya memikirkan cara untuk bekerja:
Langkah 1. Lakukan "sampel" terlebih dahulu
Langkah 2. Pilih nilai nol setelah operasi "sampel"
Langkah 3. buat zona penyangga (dalam 1 derajat desimal) berdasarkan titik nol
Langkah 4. gunakan statistik zona ?? ? atau alat lain untuk loop melalui semua sel raster di buffer, temukan yang terdekat, ekstrak nilainya dan taruh di titik vektor.
Saya terhenti di langkah 4. Saya tidak tahu alat apa di ArcSDK yang bisa saya gunakan untuk mencapai fungsi ini.
Atau yang lain ... Apakah Anda punya ide yang lebih baik untuk menghadapinya?
Saya memiliki 20 layer raster seperti ini dan saya ingin membuatnya secara otomatis (menggunakan model builder dan arcobject).
sumber
Sample
alat.Jawaban:
Garis besar raster menempati persegi panjang yang dibatasi di kiri bawah oleh asalnya, memiliki koordinat (katakanlah) (x0, y0), dan di kanan atas oleh (x1, y1): ini adalah properti yang mudah ditemukan dari raster apa pun. Anda dapat menggunakan informasi ini untuk memindahkan titik di luar batas raster ke titik terdekat pada batas raster dan mengekstrak nilai raster di lokasi baru.
Tugas-tugas seperti ini sering kali diselesaikan dengan mempertimbangkan dimensi yang lebih rendah . Tingkat raster satu dimensi hanyalah interval angka, katakanlah dari x0 ke x1> x0, ditulis secara konvensional [x0, x1]. Misalkan Anda ingin menemukan titik terdekat dalam interval ini ke angka yang diberikan x. Ada tiga kasus: x <x0 (x ke kiri), x0 <= x <= x1 (x ada dalam interval), dan x1 <x (x adalah ke kanan). Jelas poin terdekat adalah masing-masing x0, x, dan x1. Formula untuk hasil ini adalah
x -> min (maks (x, x0), x1),
seperti yang Anda lihat dengan merenungkan masing-masing dari tiga kasus secara terpisah.
Karena luasnya raster adalah produk Cartesian dengan dua interval, [x0, x1] * [y0, y1], rumus yang sama bekerja dalam dua dimensi. Cukup terapkan pada setiap interval. Dengan demikian koordinat titik yang diproyeksikan dapat dihitung (dalam Kalkulator Lapangan, katakanlah) sebagai
(x, y) -> (min (maks (x, x0), x1), min (maks (y, y0), y1).
Berikut adalah rumus ini dalam aksi dengan 100 poin yang ditempatkan secara acak di sekitar dan dalam batas kotak:
Garis putus-putus mengasosiasikan titik di luar batas ke lokasi di mana mereka akan dipindahkan.
Buat layer titik dari koordinat yang dihitung ini dan terapkan
Sample
alat untuk mengekstrak nilai raster. Gabungkan hasilnya kembali ke lapisan titik asli.Sebagai hal yang praktis , untuk menghindari masalah dengan penyatuan titik mengambang yang mungkin membuat titik-titik baru tidak berada dalam jangkauan kisi, akan lebih bijaksana untuk membuat x0 dan y0 sedikit lebih besar dari asal yang sebenarnya (Anda mungkin menambahkan setengah dari ukuran sel ke mereka) dan, juga, buat x1 dan y1 sedikit lebih kecil.
Singkatnya , alur kerja terdiri dari penghitungan dua bidang (koordinat baru) di tabel lapisan titik asli, membuat lapisan peristiwa titik dari koordinat baru tersebut, menjalankan
Sample
alat, dan melakukan penggabungan basis data (bukan gabungan spasial).Ketika Anda memiliki lebih banyak titik vektor daripada sel dalam raster , Anda harus memilih solusi yang diberikan oleh @celenius (yang mengusulkan konversi raster ke titik dan menggunakan gabungan spasial). Namun, biasanya, raster memiliki banyak sel - jutaan hingga miliaran - dan konversi ke titik sangat memakan waktu dan memakan disk sehingga harus didekati dengan hati-hati.
Atau, Anda bisa mempercepat solusi Celenius dengan menggunakan perhitungan raster untuk membuat kisi integer dengan nilai hanya sepanjang batasnya. Konversi yang ke lapisan titik adalah cepat dan mudah karena akan memiliki beberapa poin. Sebut saja ini "lapisan batas." Contoh grid pada titik-titik layer batas, dengan demikian menyalin nilai-nilai grid ke tabel atribut layer boundary. Setelah berjalan
Sample
dengan lapisan titik asli, hapus semua titik di mana sampel berhasil diperoleh. Secara spasial gabungkan layer batas ke titik yang tersisa untuk menyelesaikan proses pengambilan sampel.(Salah satu cara untuk membuat kisi dengan nilai hanya sepanjang batasnya adalah dengan menerapkan operasi lingkungan fokus yang gagal di sepanjang batas: contoh termasuk menemukan lereng, hillshading, statistik fokus lingkungan 3 x 3. Ini menciptakan kisi dengan satu sel cincin tebal NoData di sekitar tepinya. Menggunakan IsNull dan SetNull untuk mendeteksi sel NoData dan mengkonversi antara NoData dan sel data menghasilkan kotak yang berisi nilai-nilai NoData kecuali di sekitar batas.)
sumber
Anda dapat mengonversi raster ke titik ( ref ), dan kemudian melakukan penggabungan spasial pada titik (dari raster) ke titik.
(Saya baru tahu bahwa poin dapat bergabung secara spasial di sini kemarin )
sumber
Anda bisa mengonversi layer raster menjadi poligon menggunakan alat Raster to Polygon dan menjalankan spatial join (klik kanan pada layer point dan pilih Joins and Relates - Join, pada drop down pertama pilih opsi spatial join dan pilih yang terdekat untuk opsi pada tombol readio), atau gunakan alat Dekat.
sumber