//--------------------------------------------------------- CGEOTRANS_Grid::CGEOTRANS_Grid(void) { //----------------------------------------------------- Set_Name (_TL("GeoTrans (Grid)")); Set_Author ("O.Conrad (c) 2003"); Set_Description (_TW( "Coordinate Transformation for Grids. " "This library makes use of the Geographic Translator (GeoTrans) library. " "The GeoTrans library is maintained by the National Geospatial Agency (NGA)." )); Add_Reference("http://earth-info.nga.mil/GandG/geotrans/"); //----------------------------------------------------- Parameters.Add_Grid_Output("", "OUT_GRID" , _TL("Grid"), _TL("") ); Parameters.Add_Grid_Output("", "OUT_X" , _TL("X Coordinates"), _TL("") ); Parameters.Add_Grid_Output("", "OUT_Y" , _TL("Y Coordinates"), _TL("") ); Parameters.Add_Shapes_Output("", "OUT_SHAPES", _TL("Shapes"), _TL("") ); //----------------------------------------------------- Parameters.Add_Grid("SOURCE_NODE", "SOURCE" , _TL("Source"), _TL(""), PARAMETER_INPUT ); Parameters.Add_Bool("TARGET_NODE", "CREATE_XY" , _TL("Create X/Y Grids"), _TL(""), false ); Parameters.Add_Choice("TARGET_NODE", "RESAMPLING", _TL("Resampling"), _TL(""), CSG_String::Format("%s|%s|%s|%s|", _TL("Nearest Neighbour"), _TL("Bilinear Interpolation"), _TL("Bicubic Spline Interpolation"), _TL("B-Spline Interpolation") ), 3 ); //----------------------------------------------------- m_Grid_Target.Create(Add_Parameters("TARGET", _TL("Target Grid System"), _TL(""))); }
//----------------------------------------------------------- CGrid_Accumulation_Functions::CGrid_Accumulation_Functions(void) { Parameters.Set_Name(_TL("Accumulation Functions")); Set_Author(SG_T("Copyrights (c) 2009 by Volker Wichmann")); Parameters.Set_Description(_TW( "Provides \"accumulation functions\" that can be used to e.g. move material over a \"local " "drain direction\" (LDD) network. The LDD net is computed for the supplied surface by MFD " "and D8 flow-routing algorithms. It is possible to switch from MFD to D8 as soon as a " "threshold is exceeded.\n" "The input to each cell on the grid can be supplied from e.g. time series and the material " "can be moved over the net in several ways. All of these, except the \"accuflux\" operation, " "compute both the flux and the state for a given cell. For time series modelling (batch " "processing), the state of each cell at time t can be initialized with the previous state t - 1.\n" "The capacity, fraction, threshold and trigger operations compute the fluxes and cell states " "at time t + 1 according to cell-specific parameters that control the way the flux is computed. " "The capacity function limits the cell-to-cell flux by a (channel) capacity control; the fraction " "function transports only a given proportion of material from cell to cell, the threshold " "function transports material only once a given threshold has been exceeded, and the trigger " "function transports nothing until a trigger value has been exceeded (at which point all " "accumulated material in the state of the cell is discharged to its downstream neighbour(s)).\n\n" "The following operations are supported:\n\n" "\t* ACCUFLUX: The accuflux function computes the new state of the attributes for the cell " "as the sum of the input cell values plus the cumulative sum of all upstream elements " "draining through the cell.\n\n" "\t* ACCUCAPACITYFLUX / STATE: The operation modifies the accumulation of flow over the " "network by a limiting transport capacity given in absolute values.\n\n" "\t* ACCUFRACTIONFLUX / STATE: The operation limits the flow over the network by a " "parameter which controls the proportion (0-1) of the material that can flow through each cell.\n\n" "\t* ACCUTHRESHOLDFLUX / STATE: The operation modifies the accummulation of flow over " "the network by limiting transport to values greater than a minimum threshold value " "per cell. No flow occurs if the threshold is not exceeded.\n\n" "\t* ACCUTRIGGERFLUX / STATE: The operation only allows transport (flux) to occur if " "a trigger value is exceeded, otherwise no transport occurs and storage accumulates.\n\n" "References:\n" "BURROUGH, P.A. (1998): Dynamic Modelling and Geocomputation.- In: LONGLEY, P.A., BROOKS, S.M., " "MCDONNELL, R. & B. MACMILLAN [Eds.]: Geocomputation: A Primer. John Wiley & Sons, pp. 165-191.\r\n" )); Parameters.Add_Grid( NULL, "SURFACE", _TL("Surface"), _TL("Surface used to derive the LDD network, e.g. a DTM."), PARAMETER_INPUT ); Parameters.Add_Grid( NULL, "INPUT", _TL("Input"), _TL("Grid with the input values to accumulate."), PARAMETER_INPUT ); Parameters.Add_Grid( NULL, "STATE_IN", _TL("State t"), _TL("Grid describing the state of each cell at timestep t."), PARAMETER_INPUT_OPTIONAL ); Parameters.Add_Grid( NULL, "CONTROL", _TL("Operation Control"), _TL("Depending on mode of operation either transport capacity, transport fraction, threshold value or trigger value."), PARAMETER_INPUT_OPTIONAL ); Parameters.Add_Grid( Parameters("LINEAR"), "CTRL_LINEAR", _TL("Linear Flow Control Grid"), _TL("The values of this grid are checked against the linear flow threshold to decide on the flow-routing algorithm."), PARAMETER_INPUT_OPTIONAL ); Parameters.Add_Grid( NULL, "FLUX", _TL("Flux"), _TL("Flux out of each cell, i.e. everything accumulated so far."), PARAMETER_OUTPUT ); Parameters.Add_Grid( NULL, "STATE_OUT", _TL("State t + 1"), _TL("Grid describing the state of each cell at timestep t + 1."), PARAMETER_OUTPUT_OPTIONAL ); Parameters.Add_Choice( NULL, "OPERATION", _TL("Operation"), _TL("Select a mode of operation"), CSG_String::Format(SG_T("%s|%s|%s|%s|%s|"), _TL("accuflux"), _TL("accucapacityflux / state"), _TL("accufractionflux / state"), _TL("accuthresholdflux / state"), _TL("accutriggerflux / state") ), 0 ); Parameters.Add_Value( NULL, "LINEAR", _TL("Switch to Linear Flow"), _TL("Switch from MFD8 to D8 if linear flow threshold is crossed."), PARAMETER_TYPE_Bool, true ); Parameters.Add_Value( Parameters("LINEAR"), "THRES_LINEAR", _TL("Threshold Linear Flow"), _TL("Threshold for linear flow, if exceeded D8 is used."), PARAMETER_TYPE_Double, 0.0 ); }
//--------------------------------------------------------- CFlow_Parallel::CFlow_Parallel(void) { Set_Name (_TL("Flow Accumulation (Top-Down)")); Set_Author ("O.Conrad (c) 2001-2016, T.Grabs portions (c) 2010"); Set_Description (_TW( "Top-down processing of cells for calculation of flow accumulation and related parameters. " "This set of algorithms processes a DEM downwards from the highest to the lowest cell.\n" "\n" "References:\n" "\n" "Deterministic 8\n" "- O'Callaghan, J.F. / Mark, D.M. (1984):\n" " 'The extraction of drainage networks from digital elevation data',\n" " Computer Vision, Graphics and Image Processing, 28:323-344\n" "\n" "Rho 8:\n" "- Fairfield, J. / Leymarie, P. (1991):\n" " 'Drainage networks from grid digital elevation models',\n" " Water Resources Research, 27:709-717\n" "\n" "Braunschweiger Reliefmodell:\n" "- Bauer, J. / Rohdenburg, H. / Bork, H.-R. (1985):\n" " 'Ein Digitales Reliefmodell als Vorraussetzung fuer ein deterministisches Modell der Wasser- und Stoff-Fluesse',\n" " Landschaftsgenese und Landschaftsoekologie, H.10, Parameteraufbereitung fuer deterministische Gebiets-Wassermodelle,\n" " Grundlagenarbeiten zu Analyse von Agrar-Oekosystemen, (Eds.: Bork, H.-R. / Rohdenburg, H.), p.1-15\n" "\n" "Deterministic Infinity:\n" "- Tarboton, D.G. (1997):\n" " 'A new method for the determination of flow directions and upslope areas in grid digital elevation models',\n" " Water Resources Research, Vol.33, No.2, p.309-319\n" "\n" "Multiple Flow Direction:\n" "- Freeman, G.T. (1991):\n" " 'Calculating catchment area with divergent flow based on a regular grid',\n" " Computers and Geosciences, 17:413-22\n" "\n" "- Quinn, P.F. / Beven, K.J. / Chevallier, P. / Planchon, O. (1991):\n" " 'The prediction of hillslope flow paths for distributed hydrological modelling using digital terrain models',\n" " Hydrological Processes, 5:59-79\n" "\n" "Triangular Multiple Flow Direction\n" "- Seibert, J. / McGlynn, B. (2007):\n" " 'A new triangular multiple flow direction algorithm for computing upslope areas from gridded digital elevation models',\n" " Water Resources Research, Vol. 43, W04501\n" " C++ Implementation into SAGA by Thomas Grabs, Copyrights (c) 2007\n" " Contact: [email protected], [email protected] \n" "\n" "Multiple Flow Direction based on Maximum Downslope Gradient:\n" "- Qin, C. Z. / Zhu, A. X. / Pei, T. / Li, B. L. / Scholten, T. / Behrens, T. / & Zhou, C. H. (2011):\n" " 'An approach to computing topographic wetness index based on maximum downslope gradient',\n" " Precision Agriculture, 12(1), 32-43.\n" )); //----------------------------------------------------- Parameters.Add_Grid( NULL , "FLOW_LENGTH" , _TL("Flow Path Length"), _TL("average distance that a cell's accumulated flow travelled"), PARAMETER_OUTPUT_OPTIONAL ); Parameters.Add_Grid( NULL , "LINEAR_VAL" , _TL("Linear Flow Threshold Grid"), _TL("optional grid providing values to be compared with linear flow threshold instead of flow accumulation"), PARAMETER_INPUT_OPTIONAL ); Parameters.Add_Grid( NULL , "LINEAR_DIR" , _TL("Channel Direction"), _TL("use this for (linear) flow routing, if the value is a valid direction (0-7 = N, NE, E, SE, S, SW, W, NW)"), PARAMETER_INPUT_OPTIONAL ); //----------------------------------------------------- Parameters.Add_Choice( NULL , "METHOD" , _TL("Method"), _TL(""), CSG_String::Format("%s|%s|%s|%s|%s|%s|%s|", _TL("Deterministic 8"), _TL("Rho 8"), _TL("Braunschweiger Reliefmodell"), _TL("Deterministic Infinity"), _TL("Multiple Flow Direction"), _TL("Multiple Triangular Flow Directon"), _TL("Multiple Maximum Downslope Gradient Based Flow Directon") ), 4 ); //----------------------------------------------------- CSG_Parameter *pNode; pNode = Parameters.Add_Value( NULL , "LINEAR_DO" , _TL("Thresholded Linear Flow"), _TL("apply linear flow routing (D8) to all cells, having a flow accumulation greater than the specified threshold"), PARAMETER_TYPE_Bool ); Parameters.Add_Value( pNode , "LINEAR_MIN" , _TL("Linear Flow Threshold"), _TL("flow accumulation threshold (cells) for linear flow routing"), PARAMETER_TYPE_Int, 500 ); Parameters.Add_Value( NULL , "CONVERGENCE" , _TL("Convergence"), _TL("Convergence factor for Multiple Flow Direction Algorithm (Freeman 1991).\nApplies also to the Multiple Triangular Flow Directon Algorithm."), PARAMETER_TYPE_Double, 1.1, 0.0, true ); Parameters.Add_Value( NULL , "NO_NEGATIVES", _TL("Prevent Negative Flow Accumulation"), _TL("when using weights: do not transport negative flow, set it to zero instead; useful e.g. when accumulating measures of water balance."), PARAMETER_TYPE_Bool, true ); Parameters.Add_Grid( NULL , "WEIGHT_LOSS" , _TL("Loss through Negative Weights"), _TL("when using weights without support for negative flow: output of the absolute amount of negative flow that occured"), PARAMETER_OUTPUT_OPTIONAL ); }
CGPSBabel::CGPSBabel(){ Parameters.Set_Name(_TL("GPSBabel")); Parameters.Set_Description(_TW( "An interface to the GPSBabel software" "(c) 2005 by Victor Olaya\r\nemail: [email protected]")); Parameters.Add_FilePath(NULL, "BASEPATH", _TL("GPSBabel path"), _TL("GPSBabel path"), _TL(""), _TL(""), false, true); Parameters.Add_FilePath(NULL, "INPUT", _TL("Input file"), _TL(""), _TL("All Files|*.*|")); Parameters.Add_Choice(NULL, "FORMATIN", _TL("Input format"), _TL(""), _TW("Geocaching.com .loc|" "GPSman|" "GPX XML|" "Magellan protocol|" "Magellan Mapsend|" "Garmin PCX5|" "Garmin Mapsource|" "gpsutil|" "U.S. Census Bureau Tiger Mapping Service|" "Comma separated values|" "Delorme Topo USA4/XMap Conduit|" "Navitrak DNA marker format|" "MS PocketStreets 2002 Pushpin|" "Cetus for Palm/OS|" "GPSPilot Tracker for Palm/OS|" "Magellan NAV Companion for PalmOS|" "Garmin serial protocol|" "MapTech Exchange Format|" "Holux (gm-100) .wpo Format|" "OziExplorer Waypoint|" "National Geographic Topo .tpg|" "TopoMapPro Places File|" ), 0); Parameters.Add_FilePath(NULL, "OUTPUT", _TL("Output file"), _TL(""), _TL("All Files|*.*|"), _TL(""), true, false); Parameters.Add_Choice(NULL, "FORMATOUT", _TL("Output format"), _TL(""), _TW("Geocaching.com .loc|" "GPSman|" "GPX XML|" "Magellan protocol|" "Magellan Mapsend|" "Garmin PCX5|" "Garmin Mapsource|" "gpsutil|" "U.S. Census Bureau Tiger Mapping Service|" "Comma separated values|" "Delorme Topo USA4/XMap Conduit|" "Navitrak DNA marker format|" "MS PocketStreets 2002 Pushpin|" "Cetus for Palm/OS|" "GPSPilot Tracker for Palm/OS|" "Magellan NAV Companion for PalmOS|" "Garmin serial protocol|" "MapTech Exchange Format|" "Holux (gm-100) .wpo Format|" "OziExplorer Waypoint|" "National Geographic Topo .tpg|" "TopoMapPro Places File|"), 0); }//constructor
//--------------------------------------------------------- CShapes_Cut_Interactive::CShapes_Cut_Interactive(void) { Set_Name (_TL("Cut Shapes Layer")); Set_Author (SG_T("(c) 2006 by O.Conrad")); Set_Description (_TW( "" )); Set_Drag_Mode (MODULE_INTERACTIVE_DRAG_BOX); //----------------------------------------------------- Parameters.Add_Shapes( NULL , "SHAPES" , _TL("Shapes"), _TL(""), PARAMETER_INPUT ); Parameters.Add_Shapes( NULL , "CUT" , _TL("Cut"), _TL(""), PARAMETER_OUTPUT ); Parameters.Add_Shapes( NULL , "EXTENT" , _TL("Extent"), _TL(""), PARAMETER_OUTPUT_OPTIONAL, SHAPE_TYPE_Polygon ); Parameters.Add_Choice( NULL , "METHOD" , _TL("Method"), _TL(""), Cut_Methods_Str(), 0 ); //----------------------------------------------------- CSG_Parameters *pParameters = Add_Parameters("CUT", _TL("Extent"), _TL("")); pParameters->Add_Value( NULL, "AX" , _TL("Left") , _TL(""), PARAMETER_TYPE_Double ); pParameters->Add_Value( NULL, "BX" , _TL("Right") , _TL(""), PARAMETER_TYPE_Double ); pParameters->Add_Value( NULL, "AY" , _TL("Bottom") , _TL(""), PARAMETER_TYPE_Double ); pParameters->Add_Value( NULL, "BY" , _TL("Top") , _TL(""), PARAMETER_TYPE_Double ); pParameters->Add_Value( NULL, "DX" , _TL("Horizontal Range") , _TL(""), PARAMETER_TYPE_Double, 1.0, 0.0, true ); pParameters->Add_Value( NULL, "DY" , _TL("Vertical Range") , _TL(""), PARAMETER_TYPE_Double, 1.0, 0.0, true ); }
//--------------------------------------------------------- CDVWK_SoilMoisture::CDVWK_SoilMoisture(void) { CSG_Parameter *pNode; //----------------------------------------------------- Set_Name (_TL("Soil Moisture Content")); Set_Author (SG_T("(c) 2002 by O.Conrad")); Set_Description (_TW( "The WEELS (Wind Erosion on European Light Soils) soil moisture " "model dynamically calculates the soil moisture based on the rules " "proposed by the DVWK (1996) with input data about:\n" "- soil properties (grids: field capacity and permanent wilting point)\n" "- land use (grid: crop types)\n" "- climate (table: daily values of precipitation, temperature, air humidity)\n\n" "References:\n" "- DVWK - Deutscher Verband fuer Wasserwirtschaft und Kulturbau e.V. (1996): " "'Ermittlung der Verdunstung von Land- und Wasserflaechen', " "DVWK Merkblaetter 238/1996, Bonn, 135p.\n" "- Boehner, J., Schaefer, W., Conrad, O., Gross, J., Ringeler, A. (2001): " "'The WEELS Model: methods, results and limits of wind erosion modelling', " "In: Catena, Special Issue\n") ); //----------------------------------------------------- pNode = Parameters.Add_Grid( NULL , "STA_FC" , _TL("Field Capacity [mm]"), _TL(""), PARAMETER_INPUT_OPTIONAL ); Parameters.Add_Value( pNode , "STA_FC_DEF" , _TL("Default"), _TL(""), PARAMETER_TYPE_Double , 20.0 , 0.0, true ); pNode = Parameters.Add_Grid( NULL , "STA_PWP" , _TL("Permanent Wilting Point [mm]"), _TL(""), PARAMETER_INPUT_OPTIONAL ); Parameters.Add_Value( pNode , "STA_PWP_DEF" , _TL("Default"), _TL(""), PARAMETER_TYPE_Double , 2.0 , 0.0, true ); pNode = Parameters.Add_Grid( NULL , "LANDUSE" , _TL("Land Use"), _TL(""), PARAMETER_INPUT_OPTIONAL ); Parameters.Add_Value( pNode , "LANDUSE_DEF" , _TL("Default"), _TL(""), PARAMETER_TYPE_Int , -1.0 ); //----------------------------------------------------- pNode = Parameters.Add_Grid( NULL , "DYN_W" , _TL("Soil Moisture"), _TL(""), PARAMETER_OUTPUT ); //----------------------------------------------------- pNode = Parameters.Add_FixedTable( NULL , "DYN_CLIMATE" , _TL("Climate Data"), _TL("") ); pClimate = pNode->asTable(); pClimate->Set_Name(_TL("Climate Data")); pClimate->Add_Field(_TL("Precipitation [mm]") , SG_DATATYPE_Double); pClimate->Add_Field(_TL("Temperature (2pm) [DegreeC]"), SG_DATATYPE_Double); pClimate->Add_Field(_TL("Air Humidity (2pm) [%%]"), SG_DATATYPE_Double); //----------------------------------------------------- pNode = Parameters.Add_FixedTable( NULL , "STA_KC" , _TL("Crop Coefficients"), _TL("") ); pCropCoeff = pNode->asTable(); pCropCoeff->Set_Name(_TL("Crop Coefficients")); pCropCoeff->Add_Field(_TL("Land Use ID") , SG_DATATYPE_Int); pCropCoeff->Add_Field(_TL("Name") , SG_DATATYPE_String); pCropCoeff->Add_Field(_TL("January") , SG_DATATYPE_Double); pCropCoeff->Add_Field(_TL("February") , SG_DATATYPE_Double); pCropCoeff->Add_Field(_TL("March") , SG_DATATYPE_Double); pCropCoeff->Add_Field(_TL("April") , SG_DATATYPE_Double); pCropCoeff->Add_Field(_TL("May") , SG_DATATYPE_Double); pCropCoeff->Add_Field(_TL("June") , SG_DATATYPE_Double); pCropCoeff->Add_Field(_TL("July") , SG_DATATYPE_Double); pCropCoeff->Add_Field(_TL("August") , SG_DATATYPE_Double); pCropCoeff->Add_Field(_TL("September") , SG_DATATYPE_Double); pCropCoeff->Add_Field(_TL("October") , SG_DATATYPE_Double); pCropCoeff->Add_Field(_TL("November") , SG_DATATYPE_Double); pCropCoeff->Add_Field(_TL("December") , SG_DATATYPE_Double); CSG_Table_Record *pRec; #define ADD_RECORD(ID, NAME, m01, m02, m03, m04, m05, m06, m07, m08, m09, m10, m11, m12) pRec = pCropCoeff->Add_Record();\ pRec->Set_Value( 0, ID); pRec->Set_Value( 1, NAME);\ pRec->Set_Value( 2, m01); pRec->Set_Value( 3, m02); pRec->Set_Value( 4, m03); pRec->Set_Value( 5, m04);\ pRec->Set_Value( 6, m05); pRec->Set_Value( 7, m06); pRec->Set_Value( 8, m07); pRec->Set_Value( 9, m08);\ pRec->Set_Value(10, m09); pRec->Set_Value(11, m10); pRec->Set_Value(12, m11); pRec->Set_Value(13, m12); // ID NAME Jan Feb Mar Apr Mai Jun Jul Aug Sep Okt Nov Dec ADD_RECORD(1.0, _TL("Maehweide") , 1 , 1 , 1 , 1 , 1.05, 1.10, 1.10, 1.05, 1.05, 1 , 1 , 1 ); ADD_RECORD(2.0, _TL("Winterweizen") , 0.65, 0.65, 0.80, 0.85, 1.15, 1.45, 1.40, 1 , 0.80, 0.70, 0.65, 0.65); ADD_RECORD(3.0, _TL("Wintergerste") , 1 , 1 , 0.85, 0.95, 1.30, 1.35, 1.25, 1 , 1 , 1 , 1 , 1 ); ADD_RECORD(4.0, _TL("Sommergerste") , 1 , 1 , 0.80, 0.90, 1.20, 1.35, 1.20, 1 , 1 , 1 , 1 , 1 ); ADD_RECORD(5.0, _TL("Winterroggen") , 0.65, 0.65, 0.85, 0.90, 1.20, 1.30, 1.25, 0.95, 0.80, 0.70, 0.65, 0.65); ADD_RECORD(6.0, _TL("Hafer" ) , 1 , 1 , 0.65, 0.70, 1.10, 1.45, 1.35, 0.95, 1 , 1 , 1 , 1 ); ADD_RECORD(7.0, _TL("Zuckerrueben") , 1 , 1 , 1 , 0.50, 0.75, 1.05, 1.40, 1.30, 1.10, 0.85, 1 , 1 ); ADD_RECORD(8.0, _TL("Kartoffeln") , 1 , 1 , 1 , 0.50, 0.90, 1.05, 1.45, 1.20, 0.90, 1 , 1 , 1 ); ADD_RECORD(9.0, _TL("Winterraps") , 0.65, 0.65, 0.85, 1 , 1.35, 1.35, 1.10, 0.85, 1 , 1 , 0.65, 0.65); ADD_RECORD(0.0, _TL("Unknown") , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ); #undef ADD_RECORD }
//--------------------------------------------------------- CWatersheds_ext::CWatersheds_ext(void) { Set_Name (_TL("Watershed Basins (Extended)")); Set_Author (SG_T("V.Olaya (c) 2004, O.Conrad (c) 2011")); Set_Description (_TW( "Extended watershed basin analysis. " )); Parameters.Add_Grid( NULL , "DEM" , _TL("DEM"), _TL(""), PARAMETER_INPUT ); Parameters.Add_Grid( NULL , "CHANNELS" , _TL("Drainage Network"), _TL(""), PARAMETER_INPUT ); Parameters.Add_Grid( NULL , "BASINS" , _TL("Basins"), _TL(""), PARAMETER_OUTPUT ); Parameters.Add_Grid( NULL , "SUBBASINS" , _TL("Subbasins"), _TL(""), PARAMETER_OUTPUT ); Parameters.Add_Shapes( NULL , "V_BASINS" , _TL("Basins"), _TL(""), PARAMETER_OUTPUT, SHAPE_TYPE_Polygon ); Parameters.Add_Shapes( NULL , "V_SUBBASINS" , _TL("Subbasins"), _TL(""), PARAMETER_OUTPUT, SHAPE_TYPE_Polygon ); Parameters.Add_Shapes( NULL , "HEADS" , _TL("River Heads"), _TL(""), PARAMETER_OUTPUT, SHAPE_TYPE_Point ); Parameters.Add_Shapes( NULL , "MOUTHS" , _TL("River Mouths"), _TL(""), PARAMETER_OUTPUT, SHAPE_TYPE_Point ); Parameters.Add_Value( NULL , "DISTANCE" , _TL("Flow Distances"), _TL(""), PARAMETER_TYPE_Bool, false ); }