Lagi

Apakah ada cara yang efisien untuk membuat raster dengan nilai piksel yang mewakili id ​​unik yang dihitung berdasarkan lat/lon piksel?

Apakah ada cara yang efisien untuk membuat raster dengan nilai piksel yang mewakili id ​​unik yang dihitung berdasarkan lat/lon piksel?


Saya memiliki 10m raster untuk setiap negara bagian di AS. Nilai piksel saat ini mewakili sesuatu. Saya ingin memiliki raster 'sama' tetapi ukuran piksel mewakili id ​​unik yang dihitung berdasarkan piksel lat dan lon. Saya bertanya-tanya apakah ada cara yang efisien untuk melakukannya, fungsi ArcGIS yang ada atau pemrograman python C # keduanya baik-baik saja.

Saya tidak dapat melakukan apa pun dengan Kalkulator Raster di ArcGIS karena nilai piksel raster saat ini tidak ada hubungannya dengan id unik atau lat/lon.

Sejauh ini, saya mencoba membuat pasangan lat/lon dan menghitung id tersebut dengan pemrograman. Tetapi untuk menjaga koneksi dengan raster, saya juga membaca nilai piksel saat ini. Jadi saya punya satu catatan untuk satu piksel, diformat sebagai lon, lat, pixelVal, uniqueId, dan saya menulisnya ke dalam file csv. Karena untuk raster 10m, jumlah pikselnya sangat sangat besar. Saya bertanya-tanya apakah saya bisa melakukannya di tingkat raster, daripada menggunakan cara ini. Terima kasih sebelumnya!


Ada banyak cara untuk menetapkan pengidentifikasi unik ke sel raster. Beberapa tercantum di bawah ini. Harap dicatat bahwa meskipun pengidentifikasi unik dapat dihasilkan secara efisien, algoritma apa pun yang memerlukan pengidentifikasi unik untuk sel dalam raster besar (dengan jutaan sel lebih banyak) itu sendiri akan menjadi tidak efisien; dalam banyak kasus kemungkinan bisa diganti dengan algoritma yang tidak mengharuskan setiap sel memiliki pengenal. Perhatikan juga, ada batas alami untuk ukuran kisi seperti itu, karena bahkan kisi 32-bit dapat mendukung paling banyak 2^32-1 (sekitar empat miliar) nilai unik. Metode untuk mengatasi batas itu (tanpa menggunakan grid 64-bit) diberikan di bagian akhir.

  1. Menggunakan kisi pengidentifikasi kolomSaya(dengan nilai berjalan dari 0 hingga satu kurang dari jumlah kolom,M) dan kisi pengidentifikasi baris serupaJ(dengan nilai dari 0 sampain-1), menghitung

    n * "Saya" + "J"

    Alternatif yang mudah adalah membulatkannhingga pangkat sepuluh berikutnya sama dengan atau melebihin. Koordinat baris dan kolom kemudian dapat dibaca langsung dari pengidentifikasi titik. Misalnya dengann= 12796 danM= 8092, gunakan rumus 100000 *Saya+J. (Karena nilai terbesar yang mungkin dari 809112795 tidak akan melebihi bilangan bulat 32-bit yang ditandatangani, ini akan berhasil.) Misalnya, jika suatu titik memiliki pengenal 49160008, titik tersebut harus memiliki koordinat (baris, kolom) (491, 60008) yang ditemukan dengan membelah pengenal menjadi lima digit terakhir dan awalan yang tersisa daripadanya.

    Kisi pengidentifikasi kolom dan baris dapat dihitung (masing-masing dalam satu perhitungan tunggal) menggunakan metode yang dijelaskan di Bagaimana cara menghitung centroid tertimbang sehubungan dengan raster, mis. pusat massa tertimbang populasi.

  2. Untuk kisi yang lebih kecil, cukup gunakanGabungkan ("Saya", "J"). Operasi ini akan membuat pengidentifikasi piksel unik internal.

  3. Untuk kisi-kisi yang sangat kecil (dengan kurang dari 2^16 sel atau lebih), buat kisi-kisi bilangan bulat yang terdistribusi secara seragam antara 0 dan nilai terbesar yang mungkin (biasanya 2^31-1). Buat kueri tabel atribut untuk jumlah yang lebih besar dari 1. Jika ada, buat saja kisi acak baru, ulangi hingga semua nilai unik.

  4. Jangan repot-repot. Jika Anda perlu mengidentifikasi piksel, ekstrak nilainya dari dua kisi-kisiSayadanJ. Sekarang tidak ada batasan praktis untuk ukuran grid - hanya perlu memiliki kurang dari empat miliar baris dan empat miliar kolom.

  5. Peran yang dimainkan olehSayadanJmasing-masing dapat diganti dengan kisi-kisi koordinat X dan Y, tetapi (a) perhitungan dalam (1) lebih rumit karena akan sulit untuk menghindari potensi tabrakan ID dan (2) ketika ukuran sel sangat kecil (seperti beberapa meter atau kurang) pelampung presisi tunggal biasanya tidak akan membedakan semua sel tetangga, jadi presisi ganda akan diperlukan.

  6. Kisi-kisi koordinat X dan Y sendiri dapat digantikan oleh kisi-kisi lain. Yang baik adalah (bertanda) jarak dari kurva yang sesuai: seringkali dua jarak tersebut cukup untuk secara unik mengidentifikasi setiap titik yang dekat dengan perpotongan kurva tersebut. Ini menyediakan cara untuk menggunakan sistem koordinat non-Cartesian (seperti koordinat kutub atau hiperbolik).


Kedengarannya agak seperti pertanyaan ini - terutama jawaban yang diberikan oleh marcin (yang terdengar mirip dengan saran whuber nomor 1). Tampaknya numpy mungkin cara yang baik untuk menangani array besar (mungkin jika tidak terlalu besar). Dan arcpy menyediakan fungsi untuk berpindah dari raster ke array dan kembali dengan relatif mudah http://resources.arcgis.com/en/help/main/10.2/index.html#//018v0000005n000000 Dan http://resources.arcgis.com /en/help/main/10.2/index.html#//018v00000023000000


Tonton videonya: 10 Tips Sederhana Membangun Tim Kerja yang Solid dan Efektif. Team Work