Vairāk

Kā jūs ignorējat nepieciešamos Create Fishnet parametrus ArcMap 10.1?

Kā jūs ignorējat nepieciešamos Create Fishnet parametrus ArcMap 10.1?


Es rakstu pitona skriptu, kas noteiktā apgabalā izveido zivju tīklu (parcel shapefile), kas pieņem lietotāja ievadi, lai izveidotu daudzstūra formas failu, kas apzīmē ēku, un polyline shapefile, kas attēlo zemes gabala stāvvietu. ArcMap programmā jūs varat izvēlēties izvēles parametru "Veidnes apjoms", kas automātiski aizpilda rīka nepieciešamās Y ass un izcelsmes koordinātas. Palaižot skriptu, tiek parādīta šī kļūda:

ExecuteError: neizdevās izpildīt. Parametri nav derīgi. KĻŪDA 000735: Zivju tīkla izcelsmes koordināta: Nepieciešama vērtība ERROR 000735: Y ass koordināta: Vērtība ir obligāta Neizdevās izpildīt (CreateFishnet).

Manā CreateFIshnet sintaksē, izmantojot “#” origina_koordā un y_aksis koordinātā, rodas kļūda, nevis nododot pieprasījumu izvēles {veidnei}.

Vai ir kāds veids, kā to novērst? Es gribētu, lai izvēles parametram {template} būtu prioritāte, bet es domāju, vai man ir jāizveido punkti norādītajā apgabalā un jānodod šīs koordinātas zivju tīkla parametriem?


Vienmēr ir grūti ieteikt ArcPy kodu, ja fragments nav iekļauts jautājumā.

Tomēr man ir aizdomas, ka viens no jūsu mainīgajiem lielumiem nav iestatīts tā, kā jūs domājat, pirms izmantojat to koda rindā CreateFishnet.

Testēšanai iesaku pievienot dažusizdrukātun / vaiarcpy.AddMessagelīnijas, lai redzētu viņu vērtības.

Pieejot no cita virziena, es arī iesaku izmantot. Kopiju kā Python fragmentu noĢeogrāfiskā apstrāde Rezultātilogu, lai no rīka dialoglodziņa satvertu pareizo sintaksi, ko tā raksta veiksmīgi izveidojot rīku Izveidot tīkls. Darba sintakse, ar kuru salīdzināt, var radīt brīnumus.

Attiecībā uz izvēles parametru {template}, kas tik labi darbojas rīkā Izveidot tīkls, tas ir tāpēc, ka šis sistēmas rīks palaiž kādu rīka validācijas kodu, lai aprēķinātu attiecīgās vērtības. Tas ir tas kods, kuru man ir aizdomas, ka jūs mēģināt vai jums ir nepieciešams reproducēt jūsu skriptā.


ModelBuilder.Configurations.Add un modelBuilder.Entity vietnē OnModelCreating

Es tikko sāku strādāt pie entītijas kodeksa pirmās pieejas, zemāk esmu uzrakstījis divas pieejas, un abas darbojas labi.

Lūdzu, dariet man zināmu, kādi ir abu šo pieeju pamatjēdzieni, un kam vajadzētu sekot?

1. pieeja: Izmantojot EntityTypeConfiguration

2. pieeja:

Lūdzu, sniedziet man koncepciju / emuārus par entītiju, jo es tikko sāku.


Vides iestatījumi

Vides iestatījumus var uzskatīt par papildu parametriem, kas ietekmē rīka rezultātus. Tie atšķiras no parastajiem rīka parametriem, jo ​​tie neparādās rīka dialoglodziņā (ar noteiktiem izņēmumiem). Drīzāk tās ir vērtības, kuras vienreiz esat iestatījis, izmantojot atsevišķu dialoglodziņu, un tās palaižot, tās izjautā un izmanto rīki.

Vides iestatījumu maiņa bieži ir priekšnoteikums ģeoprocesūras uzdevumu veikšanai, piemēram, darbvietas Pašreizējais un Skrāpis vides iestatījumi, kas ļauj iestatīt darbvietas ieejām un izejām. Cits piemērs ir vides iestatījums Ekstensīvs, kas ļauj veikt analīzi tikai nelielā ģeogrāfiskā apgabalā, vai izejas koordinātu sistēmas vides iestatījums, kas nosaka jaunu datu koordinātu sistēmu (kartes projekciju).

Ir četri vides iestatījumu līmeņi.

  1. Lietojumprogrammas līmenis iestatījumi ir noklusējuma iestatījumi, kas tiks izmantoti jebkuram rīkam, kad tas tiks izpildīts.
  2. Instrumenta līmenis iestatījumi tiek lietoti vienai rīka palaišanai un ignorē lietojumprogrammas līmeņa iestatījumus.
  3. Modeļa līmenis iestatījumi tiek norādīti un saglabāti kopā ar modeli un ignorē rīku līmeņa un lietojumprogrammas līmeņa iestatījumus.
  4. Modeļa procesa līmenis iestatījumi tiek norādīti modeļa procesa līmenī, tiek saglabāti kopā ar modeli un ignorē modeļa līmeņa iestatījumus.

Nosauktās atkarības un rūpnīcas nav pareizais veids, kā to novērst.

Jā, jūs ļaunprātīgi izmantojat savu SOK konteineru. DI princips ir lūgt to, kas jums nepieciešams. Jums ir nepieciešams IEnumerable & ltIValidationType & gt (IList šeit nav piemērots, jo jums nevajadzētu to modificēt un jums nav nepieciešama nejauša piekļuve). Bet tā vietā, lai prasītu tikai IEnumerable & ltIValidationType & gt, jūs pieprasāt divas dažādas ieviešanas iespējas. Kā jūs identificējāt, tas pārkāpj atvērtu / slēgtu, jo jūsu rūpnīca mainīsies katru reizi, kad nāksit klajā ar jaunu ieviešanu.

Es arī nesaprotu jūsu rūpnīcas jēgu. Šķiet, ka tam ir 0 pienākumu. Rūpnīcas vietā uzrakstiet salikto.

Tad iegūstiet savu SOK konteineru, lai reģistrētu šo kompozītu ar pareizajiem komponentu ieviešanas veidiem kā kanonisko IValidationType. Pārdomas var būt jūsu draugs šeit.

Es esmu kategoriski pret to, ka kādreiz tiek lietotas nosauktās atkarības, un tas pārkāpj saprātīgu noteikumu, ka metodes parametra pārdēvēšanai vienmēr jābūt drošam refaktoram.


Optimizēta tīklāja analīze

Noņemiet no kartes visus slāņus, izņemot divus sākotnējos slāņus ar ielaušanās datiem un rajoniem. No Rīkjosla pārvietoties uz Telpiskās statistikas rīki un gt kartēšanas kopas un atveriet Optimizēta tīklāja analīze rīks. Šis rīks ļauj ātri veikt karsto punktu analīzi, izmantojot minimālus ievades parametrus, un iestata / aprēķina noklusējuma parametrus tiem, kurus jūs nevarat kontrolēt. Lai vairāk kontrolētu statistikas elementus, varat izmantot Hotspot analīze (Getis-Ord GI *) rīks. Pagaidām mēs izmantosim optimizēto pieeju.

Iestatiet ielaušanās punktus kā Ievades funkcijas, nosauciet savu Izejas funkcijas (šeit es tos nosaucu ohsa_burg_plygns), izvēlieties COUNT_INCIDENTS_WITHIN_AGGREGATION_POLYGONS priekš Incidentu datu apkopošanas metode un izvēlieties mikrorajonu funkcijas Daudzstūri incidentu apkopošanai skaitļos.


Ko darīt, ja es pievienoju Kelvina klasi, nemodificējot citas klases? Kad es toreiz konvertēju Celsija vērtību uz Kelvinu, jūsu kods saka, ka 20 ° C = 20 K, kas ir vienkārši nepareizi.

Visa jūsu pieeja ir lemta neveiksmei. Tā vietā jums ir jādefinē viena standarta temperatūras skala. Es par to ņemtu Kelvinu. Tad katrai otrajai temperatūras skalai ir metodes no Kelvina un līdz Kelvinam. Tas ir viss. Šī pieeja ir labi pazīstama, veidojot kompilatorus, kuriem ir viena un tā pati problēma vairākām līdzīgām avota valodām un vairākām dažādām mērķa mašīnām.

Lai pārveidotu starp patvaļīgām temperatūras skalām, temperatūras klasē var būt šāda palīgmetode:

Var redzēt, ka ir iesaistītas divas pilnīgi dažādas klases:

  1. Temperatūras skala, piemēram, Kelvins vai Fārenheits
  2. Konkrēta temperatūra, kas sastāv no temperatūras skalas un vērtības, piemēram, 293 Kelvin

Attiecībā uz izņēmumu klasi: Nav iemesla piešķirt tai parametru String. Klases nosaukums jau ir pietiekami izteiksmīgs. Tāpēc jums vajadzētu noņemt šo parametru un vienkārši iemest jaunu AbsoluteZeroException (). Jums, iespējams, vajadzētu to pārdēvēt par BelowAbsoluteZeroException. Vai arī jums vienkārši jāpieņem iepriekš definētais IllegalArgumentException un jābūt labi. Daudzos gadījumos jums nav jāizdomā savas izņēmuma klases.

Šeit izmantot 2 klases nav jēgas.

Katru reizi, kad pievienojat citu klasi, jums būs jāmaina katra klases pārveidošanas metode.

Starp Celsija un Fārenheita starpniecību pastāv cieša saikne. Jūs izmantojat Fārenheita gadījumu, lai noteiktu veidu, uz kuru vēlaties konvertēt. Tas nav nepieciešams.

Piezīme: Programmējot vēlaties mazu savienojumu, augstu kohēziju. Daudz informācijas ir pieejama tiešsaistē

Temperatūra labāk darbotos kā ENUM. Tad jūs varat darīt kaut ko līdzīgu:

Jūs varētu sekot java.util.Date piemēram. Datuma iekšējais attēlojums vienmēr ir UTC, un tas pēc vajadzības tiek konvertēts uz citām laika joslām un datumu formātiem. Līdzīgi jūs varētu definēt temperatūras klasi, kas vienmēr atrodas Kelvinā, un TemperatureScale saskarni ar tik daudz ieviešanu, cik vēlaties veikt reklāmguvumus un formatēšanu.

Uz šo jautājumu ir grūti atbildēt, jo šī problēma ir tik vienkārša, ka tā vienkārši nav vajadzība objektorientētu risinājumu. Jums būtu daudz labāk, vienkārši uzrakstot divas metodes ar nosaukumu convertCToF un convertFToC, kas izņēmumu izmetīs absolūtā nulle (ja vēlaties).

  • Jums vajadzētu padarīt savas konstruktora (.) Metodes publiskas saskaņā ar konvenciju
  • Nav nepieciešami tukši konstruktori.
  • Ja dodaties uz objektorientēto ceļu Java, ieteicams izmantot iekapsulēšanu un paziņot dalībnieku laukus par privātiem, kā arī rakstīt iegūšanas un iestatīšanas metodes šiem laukiem.
  • Tā vietā jūs varētu deklarēt saskarni ar metodi, ko sauc par konvertēšanu, un pievienot tās savām klasēm, tādā veidā būs obligāti jāievieš konvertēšanas metode, nevis jāizmanto @Override

Bet kopumā jums patiešām ir jāpārdomā, vai jūs patiešām to darāt vajadzība lai tam izmantotu OOP. Skatiet šo videoklipu, kurā aprakstīta klases Python pārmērīga izmantošana. https://www.youtube.com/watch?v=o9pEzgHorH0

Visa šī objekta modeļa kritika ir pamatota, taču neaizmirstiet, ka tas ir koledžas vingrinājums. Koledžas vingrinājumos dažreiz tiek prasīts izdarīt kaut ko problemātisku, lai jūs varētu saprast, kāpēc tas ir problemātiski. Klasisks piemērs tam ir burbuļu šķirošana. Tāpēc es par to pārāk daudz nekoncentrētos, ja vien jūs neietatāt salīdzinoši uzlabotu programmēšanas kursu.

Pirmā lieta, kas man izlec, ir tā, ka jums ir Fārenheita un Celsija klases, bet jūsu konvertēšanas metode neatgriež šo klašu gadījumus, bet tā atgriež dubultu. Bezvērtīga Fārenheita vai Celsija gadījuma pārejas modelis uz konversijas metodi, lai norādītu funkcijas dubultās izvades funkcijas vēlamās vienības, OOP gadījumā ir dziļi viennozīmīgs. Man ir aizdomas, ka jūsu profesors ir pēc konversijas metodes, kas Fārenheita gadījumu pārvērš par Celsija gadījumu, kas atspoguļo to pašu temperatūru.

Tas nav lielisks objektorientēts dizains, bet tas var būt tikai tas, ko meklē jūsu profesors. Ja jūsu klase ir attīstītāka, iespējams, ka vingrinājums ir paredzēts, lai mācītu modernāku tehniku, lai atbalstītu metodes, kas pāriet no vienas klases uz otru.

Kā ierosināts citur, cita pieeja varētu būt viena temperatūras klase, kas saglabā tās lielumu Kelvinā un kurai ir rūpnīcas metodes, piemēram, Temperatūra no Celsija (dubultā celsija), lai izveidotu gadījumus no noteiktas vienību sistēmas, un tādu metožu metodes kā Double toCelsius (), kas atgriež vērtību noteiktā vienību sistēmā.


9 Atbildes 9

Vietnē freedesktop.org ir miskastes specifikācija (melnraksts). Acīmredzot to parasti īsteno darbvirsmas vide.

Komandrindas ieviešana būtu trash-cli. Bez tuvākas apskates tas, šķiet, nodrošina vēlamo jautrību. Ja nē, pastāstiet mums, cik tālu tas ir tikai daļējs risinājums.

Kas attiecas uz jebkuras programmas izmantošanu kā aizstājēju / aizstājvārdu rm, ir pamatoti iemesli to nedarīt. Man vissvarīgākie ir:

  • Programmai būtu jāsaprot / jāapstrādā visas rm iespējas un attiecīgi jārīkojas
  • Tam ir risks pierast pie sava "jaunā rm" semantikas un izpildīt komandas ar letālām sekām, strādājot pie citu cilvēku sistēmām.

Iepriekšējās atbildēs ir minētas komandas trash-cli un rmtrash. Neviens no tiem pēc noklusējuma netiek atrasts Ubuntu 18.04, bet gan komanda gio ir. Komandējošie gio palīdzības atkritumu izvadi:

Es pārbaudīju, izmantojot gio trash FILENAME komandrindā, un tas darbojas tāpat kā es failu atlasīju failu pārlūkā un noklikšķināju uz pogas DEL: fails tiek pārvietots uz darbvirsmas mapi Miskaste. (Komanda neprasa apstiprinājumu, pat ja es neizmantoju opciju -f.)

Šādi izdzēst failus ir atgriezeniski, vienlaikus ērtāk nekā definēt rm, lai drošībai būtu rm -i, un ir jāapstiprina katrs izdzēšana, kas jums joprojām nepaveicas, ja nejauši apstiprināt dzēšanu, kurai nevajadzēja būt.

Es pievienoju aizstājvārdu tt = 'gio trash' savam aizstājvārdu definīciju failam tt ir mnemonika mapei Miskaste.

Pievienots rediģēšanai 2018. gada 27. jūlijā: Servera mašīnās nav atkritumu direktorija ekvivalenta. Esmu uzrakstījis šādu Bash skriptu, kas veic darbu galddatoros, izmanto gio trash un citās mašīnās pārvieto failu (-us), kas norādīti kā parametri, uz izveidoto atkritumu direktoriju. Skripts ir pārbaudīts, lai darbotos, es pats to visu laiku izmantoju. Skripts atjaunināts 2021-04-27.


Sintakse

Ievades punkta pazīmju klase, kas jāapkopo telpas-laika tvertnēs.

Izejas netCDF datu kubs, kas tiks izveidots, lai saturētu ievades iezīmju punktu datu skaitu un kopsavilkumus.

Lauks, kurā ir katra punkta datums un laiks (laika zīmogs). Šim laukam ir jābūt datuma tipam.

Atsauces telpas-laika kubs, ko izmanto, lai definētu output_cube analīzes apjomu, tvertnes izmērus un tvertnes izlīdzināšanu. Vērtības time_step_interval, distance_interval un reference_time tiek iegūtas arī no veidnes kuba. Šim veidnes kubam jābūt netCDF (.nc) failam, kas izveidots, izmantojot šo rīku.

Sekunžu, minūšu, stundu, dienu, nedēļu vai gadu skaits, kas būs viens laika solis. Visi punkti vienā un tajā pašā laika posma intervālā un attāluma intervālā tiks apkopoti. (Ja tiek nodrošināts veidnes kubs, šis parametrs tiek ignorēts, un laika veidnes intervāla vērtību iegūst no veidnes kuba). Šim parametram derīgu ierakstu piemēri ir 1 nedēļas, 13 dienas vai 1 gads.

Nosaka, kā notiks apkopošana, pamatojoties uz norādīto time_step_interval. Ja tiek nodrošināts template_cube, ar template_cube saistītais time_step_alignment ignorē šo parametra iestatījumu un tiek izmantots template_cube time_step_alignment.

  • END_TIME - laika darbības tiek saskaņotas ar pēdējo notikumu un tiek apkopotas laikā.
  • START_TIME - Laika darbības sakrīt ar pirmo notikumu un tiek apkopotas laikā.
  • REFERENCE_TIME - laika darbības tiek saskaņotas ar noteiktu jūsu norādīto datumu / laiku. Ja visiem ievades funkciju punktiem ir laika zīmogs, kas ir lielāks par jūsu norādīto atsauces laiku (vai arī tas tieši attiecas uz ievades funkciju sākuma laiku), laika un soļa intervāls sāksies ar šo atsauces laiku un tiks apkopots laikā uz priekšu (kā notiek ar START_TIME izlīdzināšanu). Ja visiem ievades pazīmju laika zīmogs ir mazāks par jūsu norādīto atsauces laiku (vai arī tas tieši attiecas uz ievades funkciju beigu laiku), laika un soļa intervāls beigsies ar šo atsauces laiku un tiks apkopots laikā atpakaļ (kā notiek ar līdzinājumu END_TIME). Ja jūsu norādītais atskaites laiks ir datu laika apjoma vidū, tiks izveidots laika un soļa intervāls, kas beidzas ar norādīto atsauces laiku (kā tas notiek ar END_TIME izlīdzināšanu), un pirms un pēc tam tiks izveidoti papildu intervāli. atsauces laiku, līdz tiek aptverts pilns jūsu datu apjoms.

Datums / laiks, kas jāizmanto laika un soļu intervālu pielīdzināšanai. Piemēram, ja vēlaties katru nedēļu uzglabāt datus no pirmdienas līdz svētdienai, varat iestatīt atskaites laiku svētdienai pusnaktī, lai nodrošinātu, ka atkritumu tvertnes pārtraukušās starp svētdienu un pirmdienu pusnaktī. (Ja ir norādīts template_cube, šis parametrs tiek ignorēts, un reference_time pamatā ir template_cube.)

In_features apkopošanai izmantoto tvertņu lielums. Visi punkti, kas ietilpst tajā pašā distance_interval un time_step_interval, tiks apkopoti. Apvienojot sešstūra režģī, šo attālumu izmanto kā augstumu, lai izveidotu sešstūra daudzstūrus. (Ja ir norādīts template_cube, šis parametrs tiek ignorēts, un attāluma intervāla vērtība tiks balstīta uz template_cube.)

Skaitliskais lauks ar atribūtu vērtībām, ko izmanto, lai aprēķinātu norādīto statistiku, apkopojot telpas-laika kubā. Var norādīt vairākas statistikas un lauka kombinācijas. Null vērtības tiek izslēgtas no visiem statistikas aprēķiniem.

  • SUM - katrā konteinerā pievieno norādītā lauka kopējo vērtību.
  • MEAN - aprēķina katra tvertnes vidējo vērtību norādītajam laukam.
  • MIN - atrod mazāko vērtību visiem norādītā lauka ierakstiem katrā atkritumu tvertnē.
  • MAX - atrod vislielāko vērtību visiem norādītā lauka ierakstiem, katrā tvertnē.
  • STD - atrod standartnovirzi vērtībām katrā atkritumu tvertnē norādītajā laukā.
  • MEDIAN - atrod katras tvertnes visu norādītā lauka ierakstu sakārtoto vidējo vērtību.
  • ZEROS - tukšās tvertnes aizpilda ar nullēm.
  • SPATIAL_NEIGHBORS - tukšās tvertnes aizpilda ar vidējo telpisko kaimiņu vērtību
  • SPACE_TIME_NEIGHBORS - tukšās atkritumu tvertnes aizpilda ar vidējo kosmosa laika kaimiņu vērtību.
  • TEMPORAL_TREND - aizpilda tukšas tvertnes, izmantojot interpolētu viena mainīgā splaina algoritmu.

Piezīme. Ja kādā no kopsavilkuma laukiem ir nulles vērtības, šīs funkcijas tiks izslēgtas no analīzes. Ja punktu skaits katrā atkritumu tvertnē ir daļa no analīzes stratēģijas, ieteicams izveidot atsevišķus kubus, vienu skaitam (bez kopsavilkuma laukiem) un otru kopsavilkuma laukiem. Ja nulles vērtību kopa katram kopsavilkuma laukam ir atšķirīga, varat arī apsvērt iespēju izveidot atsevišķu kubu katram kopsavilkuma laukam.

Daudzstūra acs forma ievades pazīmes punkta dati tiks apkopoti.

  • FISHNET_GRID - ievades funkcijas tiks apkopotas kvadrātveida (tīklveida) šūnu režģī.
  • HEXAGON_GRID - ievades funkcijas tiks apkopotas sešstūru šūnu režģī.

ArcGIS palīdzība - 100m līniju transektu izveidošana daudzstūra iekšienē

Darbam man katrā laukā, kurā strādāju, ir jāizveido trīs nejauši ģenerēti 100 metru līnijas transekti. Es daru putnu apsekošanas darbu TN un man ir daudz lauku, no kuriem izvēlēties. Ideālā gadījumā es vēlos, lai šie līnijas transekti tiktu ievietoti manos pieejamajos laukos, lai redzētu, kuras ir vislabākās atbilstības manam darbam. Katram līnijas transektam jābūt tieši 100 metru garam, un katram transektam jābūt vismaz 100-200 metru attālumā viens no otra, lai novērstu iespējamo pārklāšanos.

Esmu mēģinājis izmantot izlases punktu izveides rīku, taču tas ne vienmēr novieto katru punktu 100m attālumā viens no otra (daži ir garāki, piemēram, 120 vai pat 200m attālumā). Man nav ArcGIS Pro, tāpēc, diemžēl, es nevaru izmantot rīku Generate Transect, un, kaut arī es varētu vienkārši pielāgot katru punktu, man ir diezgan liels lauks, kurā darboties, tāpēc būtu vieglāk, ja es varētu vienkārši pieslēgt kādā info un vai tas ir izdarīts manā vietā.

Vai ir vienkāršs veids, kā to izdarīt? Ar ArcGIS pamatiem man ir diezgan labi, bet es nezinu, kā kodēt. Jebkura palīdzība tiek ļoti novērtēta!

Iespējams, tas nav elegants risinājums, pēc kura jūs meklējat, bet es daru to pašu mūsu biologu labā. Es izveidoju nejaušus punktus, pēc tam savienoju 1 līdz 2, 3 līdz 4 utt. Pēc tam savā transect funkciju klasē es atgriežos un izveidoju fiksētas līnijas līdz precīzam vajadzīgajam transekta garumam (kā alternatīvu, jūs varat sagriezt sākotnējās fiksētās līnijas). 100 m transektiem, kuriem nav nepieciešams pārklāties, es norādīšu, ka minimālais attālums starp nejaušajiem punktiem ir vismaz 100 m. Ātrs un netīrs risinājums, kas darbojas labi, kā es to daru reti.

Jūs varat izveidot zivju tīklu ar precīziem izmēriem, pēc tam pārvērst tos daudzstūrus par līnijām

Sveiki, ja vēlaties, paņemiet to, ko es gatavojos teikt, ar sāls graudu, bet pārāk daudzi cilvēki domā & quotdators & quot, kad parādās vārds & quotandquot; quot.

Es daru un esmu daudz veicis lauka darbus, ņemot paraugus no dažādiem dārzeņu / dzīvnieku / augšanas parauglaukumiem un transektiem. & Quotrandom & quot svarīgums ir vienkārši noņemt & quotfield aizspriedumus & quot

Šeit ir trīs ātri un bieži sastopami veidi, kā izveidot nejaušus transektus.

Ātrākais un neapšaubāmi visvairāk nejaušais birojā, apskatiet savu karti, izvēlieties trīs apgabalus, kuri, jūsuprāt, sniegtu jums labu paraugu ņemšanas pārklājumu un atbilstu jūsu pieprasītajiem transect parametriem. Pēc tam vienkārši novelciet trīs 100m līnijas ar roku vai digitalizējiet. Paņemiet savus trīs atrašanās vietas punktus un azimutu, lai sekotu, un dodieties laukā.

Pārklājošs režģis. Izvēlieties 100mx100m vai 50mx50m režģi un pārklājiet šo režģi visā paraugu ņemšanas apgabalā. Izvēlieties 100m garus transektus no tīkla, kas atbilst jūsu parametriem, veiciet digitalizāciju un dodieties laukā.

Dariet tā, kā jūs darījāt, ļaujiet datoram izvēlēties nejaušus punktus jums. Padomājiet par punktiem kā sākuma punktiem, sakārtojiet tos ar citu punktu kā savu azimutu un vienkārši sekojiet 100 m. Tikai tāpēc, ka punkti atrodas tālāk vai tuvāk par 100 m, nav nozīmes, vienkārši iegūstiet sākotnējo sākuma punktu un izvelciet 100 m gar azimutu.

Iespējams, atklāsiet, ka kāds no jūsu darījumiem būs jāpārvieto uz lauka fiziskas barjeras dēļ, piemēram, nenoteikta baseina vai klints vai izlietnes, vai kādas citas neparedzētas barjeras dēļ. Nekādu problēmu, vienkārši ātri izvēlieties citu azimutu vai sasitiet sākuma punktu, lai izvairītos. (pārliecinieties, ka esat izdarījis skaidras piezīmes par to, kāpēc jūs to izdarījāt, lai sekotu līdzi birojā)

Vissvarīgākais aspekts ir atlase, labu precīzu datu savākšana ar precizitāti un statistisko ticamību, kuru iestatījāt disertācijas darbā.


2 Atbildes 2

Sāksim ar visvienkāršāko kāršu klasi.

Izņemot izstrādes laikā, tiek aizstāts ar simbolu importēšanu tikai ar nepieciešamajām klasēm, nevis ar aizstājējzīmju izmantošanu.

Tā, protams, ir pareiza izvēle, lai saglabātu rangu un uzvalku kā īsus s, jo tas, visticamāk, ir ātrākais un efektīvākais veids, taču, ja vēlaties uzzināt Java specifiku, ieteicams izpētīt uzskaitījumus.

IMHO kartes ir lielisks nemainīgu objektu piemērs. Nav iemesla mainīt kartes rangu vai uzvalku, tāpēc es nometu seterus.

Tas ir ļoti neparasti, ja Java mainīgajos nosaukumos izmanto pasvītrojumus, īpaši divus kā prefiksu. Es vienkārši nosaucu parametru rangu un piemērotību, jo īpaši tāpēc, ka tās ir klases (statiskās) metodes, nevis instanču metodes, tāpēc nav jaukt ar laukiem.

Var būt vērts padomāt, ja tām patiešām ir jābūt klases metodēm un tām nevajadzētu būt instanču metodēm. Ja jums ir citas klases, kurām īss laiks jāpārvērš attiecīgajos nosaukumos neatkarīgi no kartes klases, tad tas būtu labi. Bet jūsu gadījumā es teiktu, ka tas tā nav, un ir jāmēģina slēpt fakts, ka uzvalki un pakāpes tiek īstenoti pēc iespējas īsāki.

Java kopiena ir sadalīta jautājumā, vai metode toString () ir jāpārņem tikai atkļūdošanas nolūkos vai arī tā jāizmanto "biznesa loģikā". Manuprāt, šajā "vienkāršajā" lietojumprogrammā jums nav jānošķir abi lietojumi, tāpēc es nomestu printCard () un izmantotu tikai toString ().

BTW, ir ierasts, ka pirms metodes modifikatoriem ir anotācijas.

Tā vietā, lai ieviestu savu metodi, iespējams, ir ieteicams ignorēt vienādojumu () (vai vismaz padarīt šo par instances metodi). Ja jūs padarāt karti nemaināmu, kā es ierosināju iepriekš, tas vienkāršo ieviešanu, salīdzinot atsauces, lai redzētu, vai tās ir vienādas, jo katrai iespējamai kartei vajadzētu būt tikai vienam gadījumam.

(Lai gan var būt drošāk salīdzināt rangu un uzvalku kā kritienu.)

Vispirms ātra novirze par uzskaitījumiem. Enums ir kārtas numurs un salīdzināšanas metode, kas ļauj tos kārtot. Jūs varat arī piešķirt viņiem rekvizītus un, pamatojoties uz tiem, izveidot pats savu pasūtījumu.

Oficiālajā valodas ceļvedī ir piemēri uzvalku un rangu uzskaitījumiem un uzskaitījumu paplašināšanai ar savām īpašībām, izmantojot planētas kā piemēru: http://download.oracle.com/javase/1.5.0/docs/guide/language/enums.html

Kad / ja tieku līdz reitingam (es to vēl neesmu apskatījis), iespējams, varēšu sniegt dažus ieteikumus, lai to ieviestu ar enums.

Tālāk ir Comparator s. Man nav daudz pieredzes ar viņiem, tāpēc varu sniegt tikai dažus vispārīgus ieteikumus:

  • Nodarbībām vienmēr jāsākas ar lielo burtu Java valodā.
  • Jums tās jāpaplašina no Comparator & ltCard & gt, nevis Comparator & ltObject & gt, jo kartes ir jāsalīdzina tikai savā starpā, nevis ar citiem objektiem.
  • Lai gan tā ir laba papildu prakse, varat izlaist kostīmu salīdzinātāju, jo tas nav īsti vajadzīgs pokerā kopumā (un īpaši Texas Hold'em). Uzvalkiem nekad nav kārtības rokās, parasti tas ir vajadzīgs tikai dažos "meta" kontekstos (piemēram, nejauši nosakot pogas pozīciju), kas pašlaik neattiecas uz jūsu programmu. Tomēr, ja jūs to paturat, jums vajadzētu izlabot tērpu kārtību, jo oficiālais rangs ir (no zemākā līdz augstākajam) "Klubi", "Dimanti", "Sirdis" un "Pīķi".

Nākamā ir valde. Pirmkārt, es gribētu teikt, ka es neesmu pārliecināts, vai es izmantotu šādu Board klasi reālajā pasaules pokera lietojumprogrammā. Tomēr pie galvas es nevaru iedomāties citu veidu, kā to izdarīt, un praksē tas ir pilnīgi labi.

Vienīgais, ko es mainītu, ir tā vietā, lai skaidri iestatītu katru karti pēc indeksa ar setBoardCard (Card card, int cardNum), es ļautu Board klasei iekšēji izsekot indeksam un vienkārši izmantot addBoardCard (Card card), jo jums nevajadzētu jāspēj "atgriezties" un mainīt dēļa kārtis (tas pats attiecas arī uz ierakstītajām kartēm).

Attiecībā uz šķirošanas uzvalkiem: Labi, tas ir jēga. Es vēl neesmu skatījies uz rokas novērtēšanu. Tomēr tas drīzāk ir šīs šķirošanas grupēšana, tāpēc varbūt ir kāds cits (labāks?) Veids, kā to izdarīt. Man būs jādomā par to.

Izsekošanas indeksi: Lai to izdarītu, jūs noteikti varētu izmantot kolekciju (vai precīzāk sarakstu) (un tas būtu vairāk "Java līdzīgs", bet jūsu gadījumā, ja uz kuģa jums ir noteikts maksimālais karšu skaits, masīvi ir labi. Es gribētu kaut ko līdzīgu:

Vispirms es ieteiktu statiski izveidot tikai vienu izlases objektu, nevis izveidot katram shuffle un cutDeck izsaukumam.

Patiešām problemātiska ir jauna pagaidu Deck objekta izveide klāja griešanai. Tas var noiet greizi ļoti ātri, jo tajā ir nevajadzīgs otrais karšu komplekts, un, ja ir kļūda, jūs viegli saņemsiet karšu dublikātus. Tā vietā vienkārši izmantojiet jaunu masīvu. Varat arī izmantot System.arraycopy, lai vienkāršotu kopēšanu no viena masīva uz citu.

Jauna klāja izveide rada ne tikai jaunu masīvu, bet arī a piepildīts masīvs ar jaunām kartēm, kuras jums nav vajadzīgas. Pietiek tikai ar masīvu:

Par Player nav daudz ko teikt, izņemot to, ka es noņemtu setCard un vienkārši izmantotu konstruktoru, lai spēlētājam piešķirtu kārtis, lai objekts būtu nemainīgs. Vai vismaz ieviešiet addCard metodi tāpat kā Board.

Programmā getNumberOfPlayers jūsu kļūda, rīkojoties ar to, ir neatbilstoša. No vienas puses, jūs rakstāt uz System.out (iespējams, ka System.err būtu labāk), un, no otras puses, jūs izmetat izņēmumu.

IOException es to šeit nenoķertu, bet ārpus getNumberOfPlayers. Lielākos projektos var būt jēga to “ietīt” savā izņēmuma klasē:

Gan noķertajam numuramFormatException, gan nederīgajam diapazonam vajadzētu mest tos pašus (vai saistītos) pielāgotos izņēmumus. Nemetiet vienkāršu izņēmumu, jo tas ir bezjēdzīgs citiem, kuriem tas jānoķer. Piemērs:

Ievērojiet, ka izraisītājos IOException un NumberFormatException tiek nodoti kā arguments jaunajam izņēmumam, ja tie ir nepieciešami tālāk.

Gan HoldemIOException, gan HoldemUserException varētu paplašināt no pamata HoldemException, kas savukārt paplašina Exception. Vienkāršs "tukšs" pagarinājums, piemēram,

visiem trim gadījumiem būtu pietiekami.

Jums nekad nevajadzētu ļaut izņēmumam (it īpaši pašam iemestam) vienkārši izkrist beigās, ja tas nav apstrādāts. Uzziniet visus jums zināmos izņēmumus saprātīgā vietā, jūsu gadījumā vietnē getNumberOfPlayers:

Es pievienoju tikai do while ciklu, lai parādītu, kā atšķirīgi rīkoties ar divu veidu izņēmumiem. Būtu prātīgi pievienot lietotājam pareizu veidu, kā izkļūt no cilpas.

Šeit mums ir vēl viens skaitītājs (cardCounter), lai izsekotu līdz klāja "pozīcijai". Atkal būtu labāk, ja Klāja klase izsekotu izdalītās kārtis. Jums vajadzētu apsvērt klāja ieviešanu kā faktisku "kaudzīti" vai "rindu" - nav svarīgi, kurš, jo jūs nepievienojat nevienu vienumu. Java nodrošina rindas interfeisu, kuru jūs varētu izmantot.

Padomājot par to, jūs varētu arī izmantot to pašu interfeisu atskaņotājam un valdei (lai gan ierakstīšanas kartes jums šajā gadījumā būtu jāatdala atsevišķi). Tas vienkāršotu darījumus ar player.add (deck.remove ()), board.add (deck.remove ()) un burnCards.add (deck.remove ()).

Labi, visticamāk, pēdējais labojums.

Esmu sācis aplūkot rokas novērtējumu, un es nedomāju, ka es par to varētu daudz uzrakstīt. Jūs to esat ieviesis ļoti procesuālā veidā, pamatojoties uz pašreizējiem kartes objektiem, un, ja jūsu mērķis ir to izdarīt vairāk Java veidā, iespējams, vispirms būs jāpārraksta objekts Karte un vispirms jāizveido pareizs objekts "Roka" (visticamāk, pamatojoties uz kopu) un pēc tam pārrakstiet novērtējumu, pamatojoties uz to.

Pokera roku vērtēšana ir ļoti sarežģīta tēma, it īpaši, ņemot vērā 5 kārtis no 7. Kā tas būtu jāīsteno, būs atkarīgs no tā, vai vēlaties koncentrēties uz "labu Java praksi" vai "ātrumu". Ja jūs patiešām vēlaties paplašināt, tad, iespējams, vispirms vajadzētu izlasīt tēmu - par to ir vairāki jautājumi par Stack Overflow un, iespējams, neskaitāmi raksti tīmeklī, un pēc tam atkārtoti publicējiet jaunu jautājumu, kas koncentrējas uz roku novērtēšanu. Es priecāšos kādu dienu to apskatīt - ja man būs laiks.

Tikai viena konkrēta lieta: kam domātas konstantes VIENA, DIVA, TRĪS un ČETRAS? Pat procesuālās pieejas gadījumā tie, šķiet, ir pilnīgi nevietā, un tos, visticamāk, vajadzētu aizstāt ar atbilstošu cilpu, kur tos izmanto.


Ūdenskrātuves pārvaldība dzeramā ūdens apgādei: Ņujorkas stratēģijas novērtēšana (2000)

Noteikumi, kas reglamentē privātās zemes izmantošanu noteiktā attālumā no ūdensteces, ezera, mitrāja vai plūdmaiņas krasta, ir spēkā daudzos štatos un apdzīvotās vietās kopš pagājušā gadsimta 60. gadu sākuma. Šādām '' neveiksmēm '' vai '' buferjoslām '' ir dažādi mērķi, piemēram, virszemes ūdeņu aizsardzība pret piesārņojumu, konstrukciju aizsardzība pret plūdiem vai eroziju, kā arī piekrastes dzīvotņu un krasta ērtību saglabāšana. Viena no Memoranda izplatītākajām iezīmēm of Agreement (MOA) ūdenstilpnes noteikumi un noteikumi ir neveiksmīgu attālumu izmantošana, lai atdalītu ūdenstilpes no potenciāli piesārņojošām darbībām. Atkarībā no aktivitātes 25 & ndash1000 pēdu zemes ir jānodala darbība no tuvumā esošajām ūdenstilpēm. Lielākas distances ir nepieciešamas neveiksmēm ap rezervuāriem , rezervuāru kāti un kontrolētie ezeri nekā tiem, kas atrodas apkārt mitrājiem un ūdenstecēm, kas aptver visas daudzgadīgās straumes un dažos gadījumos periodiskas straumes.

Neskatoties uz to, ka ūdensceļu noteikumos visā valstī ir diezgan izplatīta neveiksmju izmantošana, ir maz pētījumu par neveiksmju efektivitāti kā tādu, novēršot ūdenstilpju piesārņošanu no nerealizēta piesārņojuma. Drīzāk pētījumi ir koncentrējušies uz buferzonas piesārņotāju noņemšanai no punktveida avotiem. Buferzonas ir dabiskas vai apsaimniekotas teritorijas, ko izmanto, lai aizsargātu ekosistēmu vai kritisko zonu no blakus esošajiem zemes izmantošanas veidiem vai piesārņojuma avotiem. Tie ir arvien vairāk izmantota labākā vadības prakse (BMP) daudzām aktivitātēm. Efektīvie buferi gar upēm, ūdenskrātuvēm un ezeriem (piekrastes buferi) vai nu notur, vai pārveido piesārņotājus no nenoteiktiem avotiem, vai rada labvēlīgāku vidi ūdens ekosistēmas procesiem.

Neveiksmes, atšķirībā no buferzonām, vienkārši nosaka attālumus starp piesārņotāju avotiem un resursu vai ūdens ekosistēmu, kurai nepieciešama aizsardzība. Tikai

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).

Groundwater flow 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 rather than 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 un 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. The