Lebih

Bagaimana Anda mengganti parameter Create Fishnet yang diperlukan di ArcMap 10.1?


Saya sedang menulis skrip python yang membuat jaring ikan di area tertentu (parcel shapefile) yang menerima input pengguna untuk membuat shapefile poligon yang mewakili bangunan, dan shapefile polyline yang mewakili area parkir di dalam parsel. Di ArcMap, Anda dapat memilih parameter opsional "Template Extent" yang secara otomatis mengisi Sumbu Y, dan Koordinat Asal yang dibutuhkan alat. Saya terus mendapatkan kesalahan ini saat menjalankan skrip saya:

ExecuteError: Gagal mengeksekusi. Parameter tidak valid. ERROR 000735: Fishnet Origin Coordinate : Nilai diperlukan ERROR 000735: Y-Axis Coordinate : Nilai diperlukan Gagal dijalankan (CreateFishnet).

Dalam sintaks CreateFIshnet saya, menggunakan "#" di coord origin_coord dan y_axis menghasilkan kesalahan alih-alih meneruskan permintaan ke {template} opsional.

Apakah ada cara untuk mengatasi ini? Saya ingin parameter {template} opsional untuk diprioritaskan, tetapi saya ingin tahu apakah saya harus membuat titik dalam area yang ditentukan dan meneruskan koordinat tersebut ke parameter jala?


Selalu sulit untuk memberi saran tentang kode ArcPy saat cuplikan tidak disertakan dalam pertanyaan.

Namun, saya menduga bahwa salah satu variabel Anda tidak disetel ke apa yang Anda pikirkan sebelum menggunakannya dalam baris kode CreateFishnet.

Untuk pengujian saya sarankan menambahkan beberapamencetakdan/atauarcpy.AddMessagegaris untuk melihat nilainya.

Datang dari arah lain, saya juga merekomendasikan menggunakan Copy As Python Snippet dariPemrosesan Geo | Hasiljendela untuk mengambil sintaks yang benar yang ditulisnya saat menjalankan alat Create Fishnet dengan sukses dari dialog alatnya. Memiliki sintaks yang berfungsi untuk dibandingkan dapat melakukan keajaiban.

Sehubungan dengan parameter {template} opsional yang bekerja sangat baik pada alat Buat Jala, ini karena alat sistem tersebut menjalankan beberapa kode validasi alat untuk menghitung nilai yang relevan. Kode itulah yang saya curigai Anda coba, atau butuhkan, untuk direproduksi dalam skrip Anda.


ModelBuilder.Configurations.Add dan modelBuilder.Entity di OnModelCreating

Saya baru saja mulai mengerjakan pendekatan pertama kode kerangka entitas, saya telah menulis dua pendekatan di bawah ini dan keduanya berfungsi dengan baik.

Tolong beri tahu saya apa konsep inti di balik kedua pendekatan ini dan apa yang harus diikuti?

Pendekatan 1 : Menggunakan EntityTypeConfiguration

Pendekatan 2 :

Tolong berikan saya konsep/blog tentang entitas, karena saya baru saja mulai.


Pengaturan lingkungan

Pengaturan lingkungan dapat dianggap sebagai parameter tambahan yang memengaruhi hasil alat. Mereka berbeda dari parameter alat normal karena tidak muncul di kotak dialog alat (dengan pengecualian tertentu). Sebaliknya, itu adalah nilai yang Anda tetapkan sekali menggunakan kotak dialog terpisah dan diinterogasi dan digunakan oleh alat saat dijalankan.

Mengubah pengaturan lingkungan sering menjadi prasyarat untuk melakukan tugas geoproses, misalnya, pengaturan lingkungan ruang kerja Saat Ini dan Awal, yang memungkinkan Anda mengatur ruang kerja untuk input dan output. Contoh lain adalah pengaturan lingkungan Luas, yang memungkinkan analisis Anda dibatasi pada area geografis kecil, atau pengaturan lingkungan Sistem Koordinat Output, yang mendefinisikan sistem koordinat (proyeksi peta) untuk data baru.

Ada empat tingkat pengaturan lingkungan.

  1. Tingkat aplikasi pengaturan adalah pengaturan default yang akan diterapkan ke alat apa pun saat dijalankan.
  2. Tingkat alat pengaturan diterapkan untuk menjalankan satu alat dan menimpa pengaturan tingkat aplikasi.
  3. tingkat model pengaturan ditentukan dan disimpan dengan model dan mengesampingkan tingkat alat dan pengaturan tingkat aplikasi.
  4. Tingkat proses model pengaturan ditentukan pada tingkat proses model, disimpan dengan model, dan mengesampingkan pengaturan tingkat model.

Ketergantungan dan pabrik bernama bukanlah cara yang tepat untuk menangani ini.

Ya, Anda menyalahgunakan wadah IOC Anda. Prinsip DI adalah meminta apa yang Anda butuhkan. Anda memerlukan IEnumerable<IValidationType> (IList tidak pantas di sini karena Anda tidak boleh memodifikasinya dan tidak memerlukan akses acak). Tetapi alih-alih hanya meminta IEnumerable<IValidationType> , Anda meminta dua implementasi berbeda. Seperti yang Anda identifikasi, ini melanggar buka/tutup karena pabrik Anda akan berubah setiap kali Anda membuat implementasi baru.

Saya juga tidak mengerti maksud dari pabrik Anda. Tampaknya memiliki 0 tanggung jawab. Alih-alih pabrik, tulislah kompositnya.

Kemudian minta wadah IOC Anda untuk mendaftarkan komposit ini dengan implementasi komponen yang tepat sebagai IValidationType kanonik. Refleksi bisa menjadi teman Anda di sini.

Saya sangat menentang penggunaan dependensi bernama itu melanggar aturan yang masuk akal bahwa mengganti nama parameter metode harus selalu menjadi refactor yang aman.


Analisis Hotspot yang Dioptimalkan

Hapus semua lapisan dari peta kecuali dua lapisan asli dengan data pencurian dan lingkungan. Dari kotak peralatan navigasi ke Alat Statistik Spasial > Pemetaan Cluster dan buka Analisis Hotspot yang Dioptimalkan alat. Alat ini memungkinkan analisis hotspot cepat menggunakan parameter input minimal dan menetapkan/menghitung parameter default untuk parameter yang tidak dapat Anda kendalikan. Untuk kontrol lebih besar atas elemen statistik, Anda dapat menggunakan Analisis Hotspot (Getis-Ord GI*) alat. Untuk saat ini kita akan menggunakan pendekatan yang dioptimalkan.

Tetapkan poin pencurian sebagai Fitur Masukan, beri nama Fitur Keluaran (di sini saya menamainya ohsa_burg_plygns), pilih COUNT_INCIDENTS_WITHIN_AGGREGATION_POLYGONS Untuk Metode Agregasi Data Insiden dan pilih fitur lingkungan untuk Poligon Untuk Menggabungkan Insiden Menjadi Hitungan.


Bagaimana jika saya menambahkan kelas Kelvin tanpa mengubah kelas lainnya? Ketika saya mengubah Celcius ke Kelvin, kode Anda mengatakan bahwa 20 °C = 20 K, yang salah.

Seluruh pendekatan Anda pasti akan gagal. Apa yang harus Anda lakukan sebagai gantinya adalah menentukan satu skala suhu referensi. Saya akan mengambil Kelvin untuk itu. Kemudian, untuk setiap skala suhu lainnya, miliki metode dari Kelvin dan ke Kelvin . Itu saja. Pendekatan ini terkenal dari membangun kompiler, yang memiliki masalah yang sama dari beberapa bahasa sumber yang sama dan beberapa mesin target yang berbeda.

Untuk mengonversi antara skala suhu sewenang-wenang, Anda dapat memiliki metode pembantu di kelas Suhu seperti ini:

Anda dapat melihat bahwa ada dua kelas yang sama sekali berbeda yang terlibat:

  1. Skala suhu, seperti Kelvin atau Fahrenheit
  2. Suhu tertentu, yang terdiri dari skala suhu dan nilai, seperti 293 Kelvin

Mengenai kelas pengecualian: Tidak ada alasan bagus untuk memberikannya parameter String. Nama kelas sudah cukup ekspresif. Oleh karena itu Anda harus menghapus parameter itu dan hanya membuang AbsoluteZeroException() baru. Anda mungkin harus mengganti namanya menjadi BelowAbsoluteZeroException . Atau Anda harus mengambil IllegalArgumentException yang telah ditentukan sebelumnya dan baik-baik saja. Dalam banyak kasus, Anda tidak perlu membuat kelas pengecualian Anda sendiri.

Menggunakan 2 kelas di sini tidak masuk akal.

Setiap kali Anda menambahkan kelas lain, Anda harus memodifikasi setiap metode konversi kelas.

Ada kopling ketat antara Celcius & amp Fahrenheit. Anda menggunakan turunan Fahrenheit untuk menentukan jenis yang ingin Anda konversi. Ini tidak perlu.

Catatan: Dalam pemrograman Anda menginginkan kopling rendah, kohesi tinggi. Banyak informasi tersedia secara online

Suhu akan bekerja lebih baik sebagai ENUM. Kemudian Anda dapat melakukan sesuatu seperti:

Anda dapat mengikuti contoh java.util.Date . Representasi internal Tanggal selalu dalam UTC, dan dikonversi ke zona waktu dan format tanggal lain sesuai kebutuhan. Demikian pula, Anda dapat menentukan kelas Suhu yang selalu dalam Kelvin, dan antarmuka TemperatureScale dengan implementasi sebanyak yang Anda inginkan untuk melakukan konversi dan pemformatan.

Ini adalah pertanyaan yang sulit untuk dijawab karena masalah ini sangat sederhana perlu solusi berorientasi objek. Anda akan jauh lebih baik hanya menulis dua metode bernama convertCToF dan convertFToC yang akan melemparkan Pengecualian pada nol mutlak (jika Anda mau).

  • Anda harus membuat metode Konstruktor(.) Anda menjadi publik , sesuai konvensi
  • Tidak perlu konstruktor kosong.
  • Jika Anda menggunakan rute berorientasi objek di Jawa, praktik terbaik adalah menggunakan enkapsulasi dan mendeklarasikan bidang anggota menjadi pribadi dan menulis metode get and set untuk bidang tersebut.
  • Sebagai gantinya Anda bisa mendeklarasikan antarmuka dengan metode yang disebut convert dan melampirkannya ke kelas Anda, dengan cara itu wajib untuk mengimplementasikan metode konversi daripada harus menggunakan @Override

Tapi secara keseluruhan Anda benar-benar perlu mempertimbangkan kembali jika Anda benar-benar perlu menggunakan OOP untuk ini. Lihat video ini yang membahas penggunaan kelas yang berlebihan dengan Python. https://www.youtube.com/watch?v=o9pEzgHorH0

Semua kritik terhadap model objek ini beralasan, tetapi jangan lupa bahwa ini adalah latihan perguruan tinggi. Latihan perguruan tinggi terkadang meminta Anda untuk melakukan sesuatu yang bermasalah sehingga Anda dapat memahami mengapa itu bermasalah. Contoh klasiknya adalah bubble sort. Jadi saya tidak akan terlalu fokus pada itu kecuali Anda mengikuti kursus pemrograman yang relatif maju.

Hal pertama yang mengejutkan saya adalah Anda memiliki kelas Fahrenheit dan Celsius, tetapi metode konversi Anda tidak mengembalikan instance dari kelas-kelas itu, ia mengembalikan dua kali lipat. Pola melewatkan turunan Fahrenheit atau Celsius yang tidak bernilai ke metode konversi untuk menunjukkan unit yang diinginkan dari fungsi output ganda sangat unidiomatik untuk OOP. Saya menduga profesor Anda sedang mencari metode konversi yang mengubah turunan Fahrenheit ke Celsius yang mewakili suhu yang sama.

Ini bukan desain berorientasi objek yang bagus, tetapi mungkin itu yang dicari profesor Anda. Jika kelas Anda lebih maju, mungkin saja latihan ini dirancang untuk mengajarkan teknik yang lebih maju untuk mendukung metode yang mengubah dari satu kelas ke kelas lainnya.

Seperti yang disarankan di tempat lain, pendekatan lain mungkin memiliki kelas suhu tunggal yang menyimpan besarnya dalam Kelvin dan memiliki metode pabrik seperti Suhu dari Celcius (celsius ganda) untuk membangun instance dari sistem unit tertentu, dan metode instan seperti double toCelsius() itu mengembalikan nilai dalam sistem satuan tertentu.


9 Jawaban 9

Ada spesifikasi (draft) untuk Sampah di freedesktop.org. Tampaknya inilah yang biasanya diterapkan oleh lingkungan desktop.

Implementasi commandline akan menjadi trash-cli. Tanpa melihat lebih dekat, tampaknya memberikan fungsionalitas yang Anda inginkan. Jika tidak, beri tahu kami sejauh mana ini hanya solusi parsial.

Sejauh menggunakan program apa pun sebagai pengganti/alias untuk rm, ada alasan bagus untuk tidak melakukannya. Yang terpenting bagi saya adalah:

  • Program perlu memahami/menangani semua opsi rm dan bertindak sesuai
  • Ini memiliki risiko membiasakan diri dengan semantik "rm baru" Anda dan melakukan perintah dengan konsekuensi fatal ketika bekerja pada sistem orang lain

Jawaban sebelumnya menyebutkan perintah trash-cli dan rmtrash . Tak satu pun dari itu ditemukan secara default di Ubuntu 18.04, tetapi perintahnya gio aku s. Memerintahkan gio membantu membuang keluaran:

Saya menguji menggunakan gio sampah FILENAME pada baris perintah, dan itu berfungsi seperti saya memilih file di browser file dan mengklik tombol DEL: file dipindahkan ke folder Sampah desktop. (Perintah tidak meminta konfirmasi meskipun saya tidak menggunakan opsi -f.)

Menghapus file dengan cara ini dapat dibalik, sementara lebih nyaman daripada mendefinisikan ulang rm menjadi rm -i demi keamanan dan harus mengonfirmasi setiap penghapusan, yang masih membuat Anda kurang beruntung jika Anda secara tidak sengaja mengonfirmasi penghapusan yang seharusnya tidak Anda lakukan.

Saya menambahkan alias tt='gio trash' ke file definisi alias saya tt adalah mnemonic untuk To Trash.

Ditambahkan saat diedit pada 27-06-2018: Pada mesin server, tidak ada yang setara dengan direktori tempat sampah. Saya telah menulis skrip Bash berikut yang melakukan pekerjaan pada mesin desktop, ia menggunakan gio trash , dan pada mesin lain, memindahkan file yang diberikan sebagai parameter ke direktori tempat sampah yang dibuatnya. Skrip diuji untuk berfungsi, saya menggunakannya sepanjang waktu sendiri. Skrip diperbarui pada 27-04-2020.


Sintaksis

Kelas fitur titik input yang akan dikumpulkan ke dalam bin ruang-waktu.

Output kubus data netCDF yang akan dibuat berisi jumlah dan ringkasan dari data titik fitur input.

Bidang yang berisi tanggal dan waktu (timestamp) untuk setiap titik. Bidang ini harus bertipe Tanggal.

Kubus ruang-waktu referensi yang digunakan untuk menentukan tingkat analisis output_cube, dimensi bin, dan keselarasan bin. Nilai time_step_interval , distance_interval , dan reference_time juga diperoleh dari kubus template. Kubus template ini harus berupa file netCDF ( .nc ) yang telah dibuat menggunakan alat ini.

Jumlah detik, menit, jam, hari, minggu, atau tahun yang akan mewakili satu langkah waktu. Semua poin dalam Interval Langkah Waktu dan Interval Jarak yang sama akan dijumlahkan. (Bila Kubus Template disediakan, parameter ini diabaikan, dan nilai Interval Langkah Waktu diperoleh dari kubus template). Contoh entri yang valid untuk parameter ini adalah 1 Minggu, 13 Hari, atau 1 Tahun.

Mendefinisikan bagaimana agregasi akan terjadi berdasarkan time_step_interval yang diberikan. Jika template_cube disediakan, time_step_alignment yang terkait dengan template_cube menimpa pengaturan parameter ini dan time_step_alignment dari template_cube digunakan.

  • END_TIME —Langkah waktu diselaraskan dengan peristiwa terakhir kali dan digabungkan kembali ke masa lalu.
  • START_TIME —Langkah waktu sejajar dengan peristiwa pertama kali dan agregat maju dalam waktu.
  • REFERENCE_TIME —Langkah waktu sejajar dengan tanggal/waktu tertentu yang Anda tentukan. Jika semua titik dalam fitur input memiliki stempel waktu yang lebih besar dari waktu referensi yang Anda berikan (atau jatuh tepat pada waktu mulai fitur input), interval langkah waktu akan dimulai dengan waktu referensi tersebut dan agregat maju dalam waktu (sebagai terjadi dengan penyelarasan START_TIME). Jika semua titik dalam fitur input memiliki stempel waktu yang lebih kecil dari waktu referensi yang Anda berikan (atau jatuh tepat pada waktu akhir fitur input), interval langkah waktu akan berakhir dengan waktu referensi tersebut dan agregat mundur dalam waktu (sebagai terjadi dengan penyelarasan END_TIME). Jika waktu referensi yang Anda berikan berada di tengah-tengah rentang waktu data Anda, interval langkah waktu akan dibuat yang diakhiri dengan waktu referensi yang disediakan (seperti yang terjadi dengan penyelarasan END_TIME) interval tambahan akan dibuat sebelum dan sesudah waktu referensi hingga cakupan waktu penuh data Anda tercakup.

Tanggal/waktu yang digunakan untuk menyelaraskan interval langkah waktu. Jika Anda ingin menyimpan data Anda setiap minggu dari Senin hingga Minggu, misalnya, Anda dapat mengatur waktu referensi hari Minggu di tengah malam untuk memastikan tempat sampah pecah antara hari Minggu dan Senin di tengah malam. (Ketika template_cube disediakan, parameter ini diabaikan dan reference_time didasarkan pada template_cube .)

Ukuran tempat sampah yang digunakan untuk menggabungkan in_features . Semua titik yang berada dalam jarak_interval dan waktu_langkah_interval yang sama akan digabungkan. Saat menggabungkan ke dalam kotak segi enam, jarak ini digunakan sebagai ketinggian untuk membangun poligon segi enam. (Bila template_cube disediakan, parameter ini diabaikan dan nilai interval jarak akan didasarkan pada template_cube .)

Bidang numerik yang berisi nilai atribut yang digunakan untuk menghitung statistik yang ditentukan saat digabungkan ke dalam kubus ruang-waktu. Beberapa kombinasi statistik dan bidang dapat ditentukan. Nilai nol dikecualikan dari semua perhitungan statistik.

  • SUM—Menambahkan nilai total untuk bidang yang ditentukan dalam setiap nampan.
  • MEAN—Menghitung rata-rata untuk bidang yang ditentukan di setiap nampan.
  • MIN—Menemukan nilai terkecil untuk semua catatan bidang yang ditentukan dalam setiap nampan.
  • MAX—Menemukan nilai terbesar untuk semua catatan bidang yang ditentukan dalam setiap nampan.
  • STD—Menemukan deviasi standar pada nilai dalam bidang yang ditentukan dalam setiap nampan.
  • MEDIAN-Menemukan nilai tengah yang diurutkan dari semua catatan bidang yang ditentukan dalam setiap nampan.
  • ZEROS—Mengisi tempat sampah kosong dengan nol.
  • SPATIAL_NEIGGHBORS—Mengisi tempat sampah kosong dengan nilai rata-rata tetangga spasial
  • SPACE_TIME_NEIGHBORS—Mengisi tempat sampah kosong dengan nilai rata-rata ruang waktu tetangga.
  • TEMPORAL_TREND—Mengisi nampan kosong menggunakan algoritme spline univariat yang diinterpolasi.

Catatan: Nilai nol yang ada di salah satu bidang ringkasan akan mengakibatkan fitur tersebut dikecualikan dari analisis. Jika menghitung poin di setiap nampan adalah bagian dari strategi analisis Anda, Anda mungkin ingin mempertimbangkan untuk membuat kubus terpisah, satu untuk hitungan (tanpa bidang ringkasan) dan satu untuk bidang ringkasan. Jika kumpulan nilai nol berbeda untuk setiap bidang ringkasan, Anda juga dapat mempertimbangkan untuk membuat kubus terpisah untuk setiap bidang ringkasan.

Bentuk jaring poligon yang menjadi tempat data titik fitur masukan akan digabungkan.

  • FISHNET_GRID —Fitur input akan digabungkan ke dalam kotak sel persegi (jala).
  • HEXAGON_GRID —Fitur input akan digabungkan ke dalam kisi sel heksagonal.

Bantuan ArcGIS - membuat transek garis 100m dalam poligon

Untuk tesis saya, saya perlu membuat tiga transek garis 100 meter yang dibuat secara acak di setiap bidang tempat saya bekerja. Saya melakukan pekerjaan survei burung di TN dan memiliki banyak bidang untuk dipilih. Idealnya, saya ingin dapat menempatkan transek garis ini dalam bidang saya yang tersedia untuk melihat mana yang paling cocok untuk pekerjaan saya. Setiap transek garis harus tepat sepanjang 100 meter dan setiap transek harus berjarak setidaknya 100-200 meter untuk mencegah potensi tumpang tindih.

Saya telah mencoba menggunakan alat buat titik acak, tetapi itu tidak selalu menempatkan setiap titik terpisah 100m (ada yang lebih panjang, seperti 120 atau bahkan 200m). Saya tidak memiliki ArcGIS Pro jadi sayangnya saya tidak dapat menggunakan alat Generate Transect, dan meskipun saya dapat menyesuaikan setiap titik, saya memiliki cukup banyak bidang untuk dikerjakan, jadi akan lebih mudah jika saya dapat mencolokkan dalam beberapa info dan telah dilakukan untuk saya.

Apakah ada cara sederhana untuk melakukan hal ini? Saya cukup paham dengan dasar-dasar ArcGIS tetapi tidak tahu cara membuat kode. Setiap dan semua bantuan sangat dihargai!

Mungkin bukan solusi elegan yang Anda cari, tetapi saya melakukan hal yang sama untuk para ahli biologi kita. Saya membuat titik acak, lalu sambungkan 1 ke 2, 3 ke 4, dan seterusnya. Kemudian di kelas fitur transek saya, saya kembali dan membuat garis putus-putus dengan panjang transek yang tepat yang diperlukan (sebagai alternatif, Anda dapat memangkas garis putus-putus awal). Untuk transek 100m yang tidak memerlukan tumpang tindih, saya akan menentukan jarak minimum antara titik acak minimal 100m. Solusi cepat dan kotor yang berfungsi dengan baik karena saya jarang melakukan ini.

Anda dapat membuat jala dengan dimensi yang tepat kemudian mengubah poligon tersebut menjadi polylines

Hai, ambil apa yang akan saya katakan dengan sebutir garam jika Anda mau, tetapi terlalu banyak orang berpikir "komputer" ketika kata "acak" muncul.

Saya melakukannya, dan telah melakukan banyak pekerjaan lapangan dengan mengambil sampel berbagai plot dan transek Veg/hewan/pertumbuhan. Pentingnya "acak" adalah untuk menghapus "bias bidang"

Berikut adalah tiga cara cepat dan umum untuk membuat transek acak.

Tercepat dan bisa dibilang paling acak di kantor, lihat peta Anda, pilih tiga area yang Anda rasa akan memberikan cakupan pengambilan sampel yang baik dan memenuhi parameter transek yang Anda butuhkan. Kemudian cukup gambar tiga garis 100m dengan tangan atau digitasi. Raih tiga titik lokasi dan azimuth Anda untuk mengikuti dan menuju ke lapangan.

Jaringan Hamparan. Pilih kisi 100mx100m atau 50mx50m dan letakkan kisi ini di atas area pengambilan sampel Anda. Pilih transek sepanjang 100m dari grid Anda yang memenuhi parameter Anda, jepret digitalisasi dan pergilah ke lapangan.

Lakukan seperti yang Anda lakukan, biarkan komputer memilih poin acak untuk Anda. Pikirkan titik-titik tersebut sebagai titik awal, sejajarkan dengan titik lain sebagai azimuth Anda dan ikuti saja sejauh 100m. Hanya karena titiknya lebih jauh atau lebih dekat dari 100m tidak masalah, dapatkan titik awal awal Anda dan ambil 100m di sepanjang azimuth.

Anda mungkin menemukan bahwa salah satu transaksi Anda harus dialihkan di lapangan karena penghalang fisik seperti kolam atau tebing atau wastafel yang tidak dipetakan atau penghalang lain yang tidak terduga. Tidak masalah, cukup cepat memilih azimuth yang berbeda atau menabrak titik awal untuk menghindari. (pastikan Anda membuat catatan yang jelas mengapa Anda melakukan ini, untuk menindaklanjutinya di kantor)

Aspek yang paling penting adalah sampling, mengumpulkan data akurat yang baik dengan jumlah presisi dan kepercayaan statistik yang Anda tetapkan untuk pekerjaan tesis Anda.


2 Jawaban 2

Mari kita mulai dengan yang paling dasar, kelas Kartu.

Kecuali selama pengembangan, adalah kebiasaan untuk secara eksplisit mengimpor hanya kelas yang Anda butuhkan daripada menggunakan wildcard.

Ini tentu saja merupakan pilihan yang valid untuk menyimpan peringkat dan setelan sebagai short s, karena kemungkinan besar itu cara tercepat dan paling efisien, tetapi jika Anda ingin mempelajari spesifik Java, Anda mungkin ingin melihat enumerasi.

Kartu IMHO adalah contoh utama untuk objek yang tidak dapat diubah. Tidak ada alasan untuk mengubah peringkat atau jenis kartu, jadi saya akan menjatuhkan setter.

Sangat tidak biasa menggunakan garis bawah dalam nama variabel di Java, terutama dua sebagai awalan. Saya akan dengan mudah menyebutkan peringkat dan setelan parameter terutama karena ini adalah metode kelas (statis) dan bukan metode instan, jadi tidak ada kebingungan dengan bidangnya.

Mungkin perlu dipikirkan, jika ini benar-benar perlu menjadi metode kelas dan tidak boleh menjadi metode instan. Jika Anda memiliki kelas lain yang perlu diubah pendek menjadi nama yang sesuai secara independen dari kelas Kartu, maka itu akan baik-baik saja. Tetapi dalam kasus Anda, saya akan mengatakan bukan itu masalahnya, dan orang harus mencoba dan menyembunyikan fakta bahwa setelan dan pangkat diterapkan sesingkat mungkin.

Komunitas Java terpecah atas pertanyaan, apakah metode toString() harus ditimpa semata-mata untuk alasan debugging, atau jika itu harus digunakan dalam "logika bisnis". Dalam aplikasi "sederhana" ini saya rasa Anda tidak perlu membedakan kedua kegunaan tersebut, jadi saya akan menghapus printCard() dan hanya menggunakan toString() .

BTW, itu kebiasaan untuk memiliki anotasi sebelum pengubah metode.

Alih-alih menerapkan metode Anda sendiri, mungkin ide yang baik untuk menimpa equals() (atau setidaknya menjadikan ini sebagai metode instan). Jika Anda membuat Kartu tidak dapat diubah seperti yang saya sarankan sebelumnya, itu menyederhanakan implementasi untuk membandingkan referensi, untuk melihat apakah mereka sama, karena Anda seharusnya hanya memiliki satu contoh dari setiap kartu yang mungkin.

(Meskipun mungkin lebih aman untuk membandingkan peringkat dan setelan sebagai kemunduran.)

Pertama penyimpangan cepat tentang Pencacahan. Enums memiliki nomor urut dan metode compareTo, memungkinkan Anda untuk mengurutkannya. Anda juga dapat menetapkan mereka properti dan membuat pesanan Anda sendiri berdasarkan itu.

Panduan bahasa resmi memiliki contoh untuk enumerasi setelan dan peringkat dan untuk memperluas enumerasi dengan properti Anda sendiri menggunakan planet sebagai contoh: http://download.Oracle.com/javase/1.5.0/docs/guide/language/enums.html

Ketika/jika saya mencapai peringkat tangan (saya belum melihatnya) saya mungkin dapat memberikan beberapa saran untuk mengimplementasikannya dengan enum.

Berikutnya adalah Komparator s. Saya tidak punya banyak pengalaman dengan mereka, jadi saya hanya bisa memberikan beberapa saran umum:

  • Kelas harus selalu dimulai dengan huruf kapital di Jawa.
  • Anda harus memperluasnya dari Comparator<Card> alih-alih Comparator<Object> , karena Anda hanya perlu membandingkan kartu satu sama lain dan bukan dengan objek lain.
  • Meskipun ini adalah latihan ekstra yang bagus, Anda mungkin ingin melewatkan pembanding setelan, karena itu tidak benar-benar diperlukan di Poker secara umum (dan Texas Hold'em secara khusus). Setelan tidak pernah memiliki urutan di tangan peringkat biasanya hanya diperlukan dalam beberapa konteks "meta" (seperti menentukan posisi tombol secara acak), yang saat ini tidak berlaku untuk program Anda. Namun jika Anda menyimpannya, maka Anda harus memperbaiki urutan setelannya, karena peringkat resminya adalah (dari terendah ke tertinggi) "Klub", "Berlian", "Hati" dan "Sekop".

Selanjutnya adalah Dewan. Pertama, saya ingin mengatakan, bahwa saya juga tidak yakin apakah saya akan menggunakan kelas Papan seperti ini dalam aplikasi Poker dunia nyata. Namun dari atas kepala saya, saya tidak bisa memikirkan cara lain untuk melakukannya dan untuk latihan ini baik-baik saja.

Satu-satunya hal yang akan saya ubah adalah alih-alih secara eksplisit mengatur setiap kartu berdasarkan indeks dengan setBoardCard(Card card, int cardNum) , saya akan membiarkan kelas Board melacak indeks secara internal dan hanya menggunakan addBoardCard(Card card) , karena Anda tidak boleh dapat "kembali" dan mengganti kartu papan (juga untuk kartu bakar).

Mengenai menyortir pakaian: Oke, itu masuk akal. Saya belum melihat evaluasi tangan. Namun itu lebih merupakan kasus pengelompokan penyortiran itu, jadi mungkin ada cara lain (lebih baik?) untuk melakukan itu. Aku harus memikirkannya.

Indeks pelacakan: Anda tentu dapat menggunakan Collection (atau lebih khusus List ) untuk melakukan ini (dan itu akan lebih "seperti Java", tetapi dalam kasus Anda di mana Anda memiliki jumlah kartu maksimum tetap di papan, arraynya adalah baik. Saya ingin sesuatu seperti:

Pertama saya sarankan untuk membuat hanya satu objek Random secara statis daripada membuat satu untuk setiap panggilan shuffle dan cutDeck .

Yang benar-benar bermasalah adalah pembuatan objek Deck sementara baru untuk memotong dek. Ini bisa salah dengan sangat cepat, karena berisi set kartu kedua yang tidak perlu dan jika ada bug, Anda akan dengan mudah mendapatkan kartu duplikat. Alih-alih gunakan saja array baru. Anda juga dapat menggunakan System.arraycopy untuk menyederhanakan penyalinan dari satu larik ke larik lainnya.

Membuat Dek baru tidak hanya membuat larik baru, tetapi juga membuat a terisi array dengan kartu baru, yang tidak Anda butuhkan. Hanya sebuah array sudah cukup:

Tidak banyak yang bisa dikatakan tentang Player kecuali, saya akan menghapus setCard dan hanya menggunakan konstruktor untuk menetapkan kartu ke pemain untuk membuat objek tidak berubah. Atau setidaknya menerapkan metode addCard seperti di Board .

Di getNumberOfPlayers, kesalahan Anda menanganinya agak tidak konsisten. Di satu sisi Anda menulis ke System.out ( System.err mungkin akan lebih baik) dan di sisi lain Anda melemparkan pengecualian.

Untuk IOException saya tidak akan menangkapnya di sini, tetapi di luar getNumberOfPlayers . Dalam proyek yang lebih besar, mungkin masuk akal untuk "membungkusnya" di kelas Pengecualian Anda sendiri untuk ini:

Baik NumberFormatException yang tertangkap dan rentang yang tidak valid harus mengeluarkan pengecualian khusus yang sama (atau terkait). Jangan hanya melempar Exception sederhana, karena tidak ada artinya bagi orang lain yang perlu menangkapnya. Contoh:

Perhatikan bahwa dalam penyebab IOException dan NumberFormatException , diteruskan sebagai argumen ke pengecualian baru jika diperlukan lebih lanjut.

Baik HoldemIOException dan HoldemUserException dapat diperluas dari HoldemException dasar yang pada gilirannya memperluas Exception . Ekstensi "kosong" sederhana seperti

untuk ketiga kasus sudah cukup.

Anda juga tidak boleh membiarkan pengecualian (terutama yang dilempar sendiri) keluar begitu saja pada akhirnya benar-benar tidak tertangani. Tangkap semua pengecualian yang Anda ketahui di tempat yang wajar, dalam kasus Anda di getNumberOfPlayers :

Saya hanya menambahkan do while loop, untuk menunjukkan cara menangani dua jenis pengecualian secara berbeda. Akan lebih bijaksana untuk menambahkan cara yang tepat bagi pengguna untuk keluar dari lingkaran.

Di sini kita memiliki penghitung lain ( cardCounter ) untuk dilacak ke "posisi" dek. Sekali lagi akan lebih baik jika kelas Deck melacak kartu yang dibagikan. Anda harus mempertimbangkan untuk menerapkan Deck sebagai "tumpukan" atau "antrian" yang sebenarnya - tidak masalah yang mana, karena Anda tidak menambahkan item apa pun. Java menyediakan antarmuka Antrian yang dapat Anda gunakan.

Memikirkannya, Anda juga dapat menggunakan antarmuka yang sama untuk Player dan Board (walaupun Anda harus memisahkan kartu burn ke objeknya sendiri dalam kasus itu). Itu akan menyederhanakan berurusan dengan player.add(deck.remove()) , board.add(deck.remove()) dan burnCards.add(deck.remove()) .

Ok, kemungkinan besar editan terakhir.

Saya sudah mulai melihat evaluasi tangan dan saya rasa saya tidak bisa menulis banyak tentang itu. Anda telah menerapkannya dengan cara yang sangat prosedural berdasarkan objek Kartu Anda saat ini dan jika tujuan Anda adalah melakukan ini dengan cara yang lebih Java, Anda mungkin perlu menulis ulang objek Kartu dan membuat objek "Tangan" yang tepat terlebih dahulu (kemungkinan besar didasarkan pada Set ) dan kemudian tulis ulang evaluasi berdasarkan itu.

Evaluasi tangan poker adalah topik yang sangat kompleks, terutama ketika mempertimbangkan 5 kartu dari 7. Bagaimana ini harus diterapkan akan tergantung pada apakah Anda ingin fokus pada "latihan Java yang baik" atau "kecepatan". Jika Anda benar-benar tertarik untuk mengembangkan ini, maka Anda mungkin harus terlebih dahulu membaca topik ini - ada beberapa pertanyaan di Stack Overflow tentang ini, dan mungkin banyak artikel di web - dan kemudian memposting ulang pertanyaan baru yang berfokus pada evaluasi tangan. Saya akan senang untuk melihatnya suatu hari nanti - jika saya punya waktu.

Hanya satu hal yang spesifik: Untuk apa konstanta SATU, DUA, TIGA, dan EMPAT? Bahkan untuk pendekatan prosedural ini tampaknya benar-benar tidak pada tempatnya dan kemungkinan besar harus diganti dengan loop yang sesuai di mana mereka digunakan.


Pengelolaan Daerah Aliran Sungai untuk Penyediaan Air Minum: Menilai Strategi Kota New York (2000)

Peraturan yang mengatur penggunaan lahan pribadi dalam jarak tertentu dari aliran air, danau, lahan basah, atau garis pantai pasang surut telah berlaku di banyak negara bagian dan daerah sejak awal 1960-an. "Kemunduran" atau "garis penyangga" tersebut memiliki tujuan yang beragam, misalnya, perlindungan air permukaan dari polusi, perlindungan struktur dari banjir atau erosi, dan pelestarian habitat riparian dan fasilitas garis pantai. Salah satu fitur paling umum dari Memorandum Aturan dan Regulasi Daerah Aliran Sungai (MOA) Perjanjian adalah penggunaan jarak mundur untuk memisahkan badan air dari kegiatan yang berpotensi menimbulkan polusi. Tergantung pada kegiatannya, 25&ndash1.000 kaki tanah harus memisahkan kegiatan dari badan air terdekat. Jarak yang lebih jauh diperlukan untuk kemunduran di sekitar waduk , batang reservoir, dan danau terkontrol daripada yang ada di sekitar lahan basah dan aliran air, yang mencakup semua aliran abadi dan dalam beberapa kasus aliran terputus-putus.

Meskipun penggunaan kemunduran cukup umum dalam peraturan daerah aliran sungai di seluruh negeri, sedikit penelitian telah dilakukan mengenai efektivitas kemunduran itu sendiri dalam mencegah kontaminasi badan air dari polusi sumber nonpoint. Sebaliknya, penelitian telah berfokus pada penggunaan zona penyangga untuk penghilangan polutan sumber nonpoint. Zona penyangga adalah kawasan alami atau terkelola yang digunakan untuk melindungi ekosistem atau kawasan kritis dari penggunaan lahan yang berdekatan atau sumber polusi. Mereka adalah praktik manajemen terbaik (BMP) yang semakin banyak digunakan untuk banyak kegiatan. Penyangga efektif di sepanjang sungai, waduk, dan danau (penyangga riparian) mempertahankan atau mengubah sumber pencemar bukan titik atau menghasilkan lingkungan yang lebih baik untuk proses ekosistem perairan.

Kemunduran, berbeda dengan zona penyangga, hanyalah jarak yang ditentukan antara sumber pencemar dan sumber daya atau ekosistem perairan yang membutuhkan perlindungan. Hanya

if a setback is subject to management or natural preservation can it be considered a "buffer" that reliably insulates ecosystems and resources from nonpoint source pollution. Because of the lack of information regarding unmanaged setbacks, this review focuses on management of buffer zones for achieving pollutant removal. In the absence of management, it is virtually impossible to predict what effect the setback distances in the MOA will have on the water quality of the New York City watershed. However, if the management practices reviewed and recommended in the following sections are used, then the setbacks may approach the pollutant-removal capabilities predicted for buffer zones.

The next section enumerates and explains key functions and characteristics of riparian buffer zones. It should be noted that waterbodies have a substantial effect on the characteristics of the surrounding buffer zones. That is, depending on whether they border wetlands, reservoirs, or streams, buffer zones will function differently. These differences are discussed when appropriate. Another important consideration is that buffer zones may not be permanent pollutant sinks, but rather may act as temporary storage areas that can be both sources and sinks of pollution. This is especially true for sediment and phosphorus, for which no degradation processes exist in the buffer (nitrogen can be removed via denitrification). Factors that enhance the long-term storage potential of riparian buffer zones, such as harvesting of vegetation, are important in evaluating their long-term effectiveness.

STRUCTURE AND FUNCTION OF RIPARIAN BUFFER ZONES

Riparian buffer zones refer to lands directly adjacent to waterbodies such as lakes, reservoirs, rivers, streams, and wetlands. These land areas have a significant impact on controlling nonpoint source pollution and on the associated water quality in nearby waterbodies. As a result, they are widely used in water resource protection programs and are the topic of intense investigation, especially in agriculture and forestry. Unfortunately, as noted in a recent symposium on buffer zones, policy-driven initiatives that have accelerated the debate on buffer zones have, at the same time, stretched scientifically based management to the limits of knowledge on this issue (Haycock et al., 1997). This is the case in the New York City watersheds and most other regions of the country.

Hydrology

Evaluating the effectiveness of riparian buffers to remove diffuse pollution from runoff requires a basic understanding of their hydrologic structure and function. Because of their proximity to waterbodies, riparian buffers are sometimes flooded by stream overflow. Riparian buffer zones are also strongly influenced by water from upslope areas, which is generally divided into three

categories: (1) overland or surface flow, (2) shallow subsurface flow, and (3) groundwater flow (Figure 10-1).

Overland flow across buffer zones can occur via two pathways. Infiltration-excess overland flow is generated when rainfall intensity or snowmelt rate exceeds the rate at which water moves through the soil surface (the infiltration process). Infiltration-excess overland flow typically occurs when the soil surface is frozen, is compacted, or is otherwise unable to transmit water to the root zone. Extreme rainfall events may deliver water rapidly enough to generate infiltration-excess across a wide range of soil types and watershed locations. As in most predominantly forested areas, this mechanism of overland flow is rare in the Catskill/Delaware region.

Saturation-excess overland flow occurs when soil water storage capacity is exceeded by precipitation volume combined with lateral inflow from upslope areas. When total inflow exceeds total outflow, saturation from below is the obligate result. Once the zone of saturation reaches the soil surface, any new input (rain or snowmelt) is immediately converted to overland flow. As shown in Figure 10-1, saturation-excess overland flow typically occurs at the transitions from the uplands to the riparian zone. Saturation-excess overland flow is usually less damaging to water quality than is infiltration-excess overland flow and, though still uncommon, it is more likely in the Catskill/Delaware region.

Both infiltration-excess and saturation-excess overland flow occur during rain or snowmelt events and constitute the bulk of stormflow. Because this water

FIGURE 10-1 Hydrologic pathways surrounding riparian buffer zones. Source: Burt (1997).

travels overland, it can accumulate high levels of particulate matter such as sediment, bacteria, and particulate-phase phosphorus. Depending on its velocity and on the soil water status of the riparian zone, overland flow can either infiltrate into buffer zones (generally desirable) or flow across buffer zones and discharge directly into neighboring waterbodies.

Shallow subsurface flow travels laterally through the root zone below the land surface (see Figure 10-1). It may be caused by an abrupt decrease in soil permeability or simply because a shallow soil is underlain by slowly permeable or impermeable bedrock. The latter is the most common case in the Catskill/Delaware region. The response of subsurface flow to storm events is more attenuated than that of overland flow, although increases in subsurface flow do generally occur during and for a period of time following precipitation or snowmelt. Filtering and biogeochemical transformations in the soil limit shallow subsurface transport of suspended particulate matter. By contrast, the concentration of dissolved solids may increase in proportion to residence (travel) time (Burt, 1997).

Aliran air tanah occurs when vertical flow extends beyond the root zone into lower strata. This may occur in deeper unconsolidated material (e.g., glacial or lacustrine sands and gravels) and/or through bedrock fractures. Travel time increases in proportion to the length of the flow path and in relation to hydraulic limitations imposed by the media. Hence, groundwater can have high dissolved solids but transports little, if any, suspended solids. Shallow subsurface flow and groundwater flow combine to generate baseflow, the water entering streams, wetlands, lakes, and reservoirs during dry periods. Shallow subsurface flow is much more likely to interact with riparian buffer zones than groundwater flow because it passes laterally through the root zone. In some instances, shallow subsurface flow in upstream areas can become saturation-excess overland flow by the time a buffer zone is reached (exfiltration or seepage).

Pollutant Removal and Other Functions

The structure and function of riparian buffer zones are determined by (1) the soil, vegetation, and hydrologic characteristics of the buffer and (2) the interactions with upslope and downslope water. For management purposes and for conceptualization of the various functions, the U.S. Department of Agriculture (USDA) guidelines suggest riparian buffers can be divided into three zones, each of which has certain physical characteristics and pollutant-removing abilities (Figure 10-2) (NRCS, 1995 Welsch, 1991). Zone 1 is the area immediately adjacent to the waterbody Zone 2 is an intermediate zone upslope from Zone 1 where most active woody BMPs are used and Zone 3 is the vegetated areas upslope from Zone 2. Although this conceptualization has not been universally adopted, it is particularly useful in this report for describing how riparian buffer zone functioning varies with distance from nearby waters.

FIGURE 10-2 USDA's three-zone schematic of a riparian buffer zone. Source: EPA (1995).

Zone 3

The pollutant-removal abilities of riparian buffers are maximized when overland flow infiltrates into buffer zones rather than discharging directly into adjacent waterbodies. For this reason, the most important function of Zone 3 is to alter the hydraulic properties of rainfall runoff such that the overland flow interacting with Zones 2 and 1 is sheet flow daripada channelized flow. Depending on the characteristics of nearby land, overland flow reaching Zone 3 may be predominantly channelized flow. By design, when channelized flow reaches Zone 3, it is usually converted to sheet flow and subsurface flow by the hydraulically rough surface and the enhanced infiltration of the buffer zone.

Coarse sediment removal from stormwater is also predominantly accomplished in Zone 3, although it can also occur in Zones 2 and 1. When the hydraulic of stormwater change from channelized flow to sheet flow, infiltration of the water is enhanced. Sediment and other materials entrained in overland flow (such as particulate phosphorus) are deposited on the surface as water infiltrates into the soil. If Zone 3 land is properly managed, sediment removal can reach 80 percent (Sheridan et al., 1999).

Zone 2

Zone 2 is designed to remove, sequester, and transform nonpoint sources of pollution in stormwater (Lowrance et al., 1997 Welsch, 1991). Nutrients such as nitrogen and phosphorus, microbes, and sediment can all be altered during passage through a Zone 2 riparian buffer. Zone 2 can also reduce pesticide transport (Lowrance et al., 1997) and may trap other pollutants, including metals and hydrocarbons. In general, the ability of a Zone 2 riparian buffer to remove pollutants depends on (1) whether sheet flow has been established in Zone 3, (2) the type of vegetation present, and (3) the length of the buffer zone. The first criterion is determined by the condition of the Zone 3 riparian buffer upslope from Zone 2. The other two criteria are characteristics of Zone 2, some of which can be altered or managed to maximize pollutant removal. A literature review found later in this chapter discusses the extent of pollutant removal that can be achieved when rainfall runoff travels through riparian buffers. This review focuses on the pollutants of greatest concern in the New York City watersheds, including phosphorus, microbial pathogens, and sediment.

Zone 1

Zone 1 is the area of the riparian buffer closest to the waterbody. In forest ecosystems, it is characterized by a canopy of trees and shrubs that provide shade to near-shore areas of lakes, larger streams, and rivers during a portion of each day. The cumulative effects of the canopy on the energy balance can have a substantial (10&ndash15°C) effect on water temperature. Because dissolved oxygen concentration is inversely proportional to water temperature, increases in temperature caused by the removal of riparian vegetation can impose chronic or acute stress on invertebrate and fish populations. Riparian vegetation has the greatest influence along headwater streams where vegetation can cover the entire width of the stream. The microclimate effect decreases downstream as the width of the stream, river, or lake increases relative to the height of the riparian vegetation.

Leaves, needles, and wood supply energy&mdashas carbon&mdashto headwater streams. Like microclimate effects, the relative importance of carbon inputs from riparian vegetation decreases as the receiving water becomes larger. However, the inflow of dissolved and particulate carbon from headwater areas remains an important supplement to in situ primary production by algae and other aquatic plants in rivers and lakes. The contribution of vegetated riparian zones to the total dissolved carbon load at the point of water withdrawal is an important issue in watershed management. Because of the concern over the role of dissolved organic carbon in producing disinfection byproducts, there are possible drawbacks to increasing the dissolved organic carbon levels in streams.

In addition to being a persistent source of carbon, woody debris ranging from

small twigs to branches, boles, and entire trees is a critical structural feature for stream ecosystems. As woody debris lodges and jams along streambanks, it forms a matrix that captures leaves and other small organic matter as they drift downstream. The interlocking roots of riparian vegetation anchor streambank, floodplain, and lakeshore soils and substantially increase their resistance to erosion and slumping.

Finally, the zone nearest the waterbody can be responsible for unique aquatic habitats. Woody debris and leaf packs at the land/water interface increase the variation of flow velocity in headwater streams. Quiet water and eddies behind leaf packs and larger debris jams lead to the formation of alternating pool and riffle sections in headwater streams. Diverse hydraulic conditions provide a continuum of spawning, rearing, feeding, hiding, and overwinter habitat for fish, amphibians, and invertebrates.

All Zones

In all zones of a riparian buffer, vegetation helps to reduce soil erosion. All zones are also capable of increasing the thickness of the unsaturated zone through evapotranspiration of water from the soil profile. As a consequence, available storage for rain, snowmelt, and upland inflow is maximized.

Riparian buffer zones exhibit soil physical and hydraulic properties that further enhance the ability of the land to attenuate stormwater. Decomposition of vegetation in the riparian zone leads to reduced bulk density, thereby increasing porosity (storage capacity), infiltration capacity (rate of water movement into the soil), and permeability (rate of water movement through the soil). Water retention characteristics also are enhanced by the addition of organic matter. The growth, senescence, and death of roots, along with the actions of invertebrates and small mammals, produce a complex system of macropores that augment the permeability of the soil matrix. Collectively, these soil properties maximize the likelihood that rain, snowmelt, or overland flow from adjacent uplands will pass beneath the soil surface and travel as subsurface flow through the riparian zone. In addition, small-scale variations in slope, woody debris, herbaceous plants, and leaf litter on the forest floor present additional barriers to overland flow.

ACTIVE MANAGEMENT OF BUFFER ZONES

The most important management practice for influencing functioning of buffer zones is to stabilize the hydraulic properties of stormwater so that channelized flow does not reach nearby streams. Channelized flow can form very quickly during rainfall. In urban areas, stormwater concentrates into channelized flow within as few as 75 ft of its source (Schueler, 1996 Whipple, 1993). Given the typical land uses found on the East Coast, only about 10 percent to 15 percent of a watershed area produces sheet flow during precipitation

(Schueler, 1995). The remaining runoff is usually delivered to streams in open channels or storm drains, the flow from which can be extremely difficult, if not impossible, to dechannelize.

Hence, converting channelized flow to sheet flow or to multiple smaller channels is a critical aspect of buffer zone management. Most regulations involving setbacks and buffer zones have been written and enacted with no consideration of this important issue. Converting channelized flow to sheet flow may require the installation of a structural BMP in Zone 3. For example, at sites with significant overland flow parallel to the buffer, water bars should be constructed perpendicular to the buffer at 45-to 90-ft intervals to intercept runoff and force it to flow through the buffer before it can concentrate further. Low berms or vertical barriers, known as level-lip spreaders, have been used successfully to spread concentrated flow before entering a forest buffer (Franklin et al., 1992). Buffers should not be used for field roadways because vehicles and farm equipment will damage the buffers and may cause concentrated flows (Dillaha and Inamdar, 1997). Specific suggestions for dechannelizing urban stormwater are given later.

Buffers may accumulate significant amounts of sediment and nutrients over time. To promote vegetative growth and sediment trapping, herbaceous vegetated buffers should be mowed and the residue should be harvested two or three times a year (Dillaha et al., 1989a,b). Mowing and harvesting will increase vegetation density at ground level, reduce sediment transport, and remove nutrients from the system. Herbaceous vegetated buffers that have accumulated excessive sediment should be plowed out, disked and graded if necessary, and reseeded in order to reestablish shallow sheet flow conditions. Although natural herbaceous buffer zones are rare in the Catskills, those created during active management of setbacks should be harvested. The primary management for Zone 1 is to reestablish and maintain native woody vegetation.

Although it is known that vegetation type can greatly influence buffer zone functioning, field data are not available for most types of buffers. There are numerous aspects of vegetation management for which more information is needed. For instance, the rooting depth will influence nutrient uptake from shallow or deeper groundwater, and more must be known about the differences among root systems of various types of vegetation. Different types of vegetation also have different management requirements, with woody vegetation providing a natural longer-term sink for nutrients than does herbaceous vegetation. Some general conclusions can be drawn. First, riparian forest buffers require native woody vegetation near the waterbody. States make determinations as to the appropriateness of different species, with native hardwoods required in most states of the eastern United States. Second, in areas experiencing runoff high in sediment, herbaceous vegetation is recommended between a forest buffer and the runoff source because a well-managed grass buffer can be more effective at trapping sediment and associated contaminants. Combinations of vegetation may

prove most effective at removing a range of pollutants. For example, an outer grassed strip followed by an inner forested strip has been suggested for complete sediment, phosphorus, and nitrogen removal (Correll, 1991 Osborne and Kovavic, 1993). In all cases, the hardiness of riparian vegetation will determine how well it accomplishes pollutant removal and other functions. The New York City Department of Environmental Protection (NYC DEP) has recently noted that high densities of white-tailed deer may be preventing regrowth of forests around Kensico Reservoir (NYC DEP, 1997), which should be considered when determining vegetation requirements for buffer zones.

The preceding discussion applies only to those nonpoint source pollutants found in stormwater. Active management of buffer zones will have no effect on atmospheric deposition of pollutants directly over the surface of waterbodies, nor can it control in-stream increases in dissolved organic carbon derived from terrestrial vegetation. Additional suggestions for the active management of buffer zones are given below in relation to specific activities that produce nonpoint source pollution.

Agriculture

In general, agricultural land uses tend to increase surface runoff and decrease infiltration and groundwater recharge in comparison to perennial vegetation such as forest or grassland. Grazing animals can cause compaction of soils, especially under wet soil conditions. Tillage may increase subsurface compaction and lead to crust formation at the soil surface. The severity of these effects depends on soil properties and climate. In some watersheds, increased surface runoff, often combined with ditches and drainage enhancements, can change a groundwater-flow-dominated system to a surface-runoff-dominated system (Schultz et al., 1994). Increases in surface runoff cause increases in the stormflow/baseflow ratio and in the amount of sediment and chemical transport.

Many of the effects of agriculture on hydrologic and transport processes can be mitigated through the use of properly managed buffer zones. The USDA launched a National Conservation Buffer Initiative in 1997 to increase the adoption of conservation buffers and the integration of conservation buffers into farm plans. Conservation buffers include many practices designed to impede and retain surface flows and pollutants such as vegetated filter strips, contour filter strips, and riparian forest buffers. The general guidance given above on establishing and maintaining buffer zones is largely derived from studies in agricultural areas and is of primary importance. Hydrologic enhancement (conversion of channelized flow to sheet flow) can be accomplished through grading of soils, removal of berms or channels, and creation of shallow overland flow paths. Vegetation establishment may involve fertilizer and lime application, seeding, or other planting. Active management may also involve harvesting of vegetation to remove nutrients.

Other important aspects of buffer zone management on agricultural lands include restrictions on grazing and pesticide application. Grazing of riparian buffer systems including riparian forest buffers and filter strips, is generally not allowed under programs such as the USDA Conservation Reserve Program. Riparian buffers should be combined with practices such as fencing and alternative water supplies to exclude domestic animals from the entire buffer zone. Certain pesticides have setback restrictions from watercourses for storage, mixing, and application that are part of the label restrictions issued for the chemical by the Environmental Protection Agency (EPA). For example, metolachlor, a common herbicide used in corn production, cannot be mixed or stored within 50 ft of lakes, streams, and intermittent streams. The herbicide atrazine may not be mixed or loaded within 50 ft of an intermittent or perennial stream, it may not be applied within 66 ft of where field runoff exits a field and enters a stream, and it may not be applied within 200 ft of natural or impounded lakes or reservoirs. Caution should be used when applying herbicides to adjacent fields to avoid damage to buffer zone vegetation.

Finally, it should be noted that artificial subsurface drainage (tile drains) may short-circuit the functioning of riparian buffers in agricultural settings. Although drain lines are not supposed to enter streams directly, they sometimes do, providing a direct conduit for pollutant movement to streams. Allowing tile drain water to flow through a spreading device before entering a riparian buffer is desirable.

Forestry

As noted in earlier chapters, the majority of nonpoint source pollution (primarily sediment) from timber-harvesting operations emanates from the road and skid trail network needed to remove sawtimber, pulpwood, or fuelwood from the forest. Overland flow is generated when the litter layer is scrapped away dan the soil is compacted. This disturbance is usually limited to about ten percent of the harvest unit. The remainder of the site retains high infiltration capacity, with shallow subsurface flow as the predominant mechanism of streamflow generation. Therefore, it is usually unnecessary (and impractical) to construct stormwater control devices (e.g., level-lip spreaders) at the transition between the harvest unit and the riparian forest buffer. By contrast, a large proportion of agricultural fields or urban areas can generate overland flow and associated nonpoint source pollution because of changes in soil surface conditions.

Riparian forest buffers are subject to special operating restrictions, often specified by state forest practice acts, to minimize undesirable changes in site conditions. The most important restriction is the prohibition of direct access by heavy equipment. Selective harvesting of trees within Zones 2 and 3 can and should occur. However, logs can only be winched on a steel cable to a machine (skidder, specially equipped farm tractor, or small 4WD tractor) located outside of the buffer or removed by a mechanical harvester with a hydraulic boom. Itu


Tonton videonya: How to extract Elevation points for Every Cell from RASTER dem in ArcGIS (Oktober 2021).