Changeset 61096
- Timestamp:
- Jul 1, 2014, 2:24:45 AM (10 years ago)
- File:
-
- 1 edited
-
grass/trunk/raster/r.horizon/main.c (modified) (18 diffs)
Legend:
- Unmodified
- Added
- Removed
-
grass/trunk/raster/r.horizon/main.c
r58552 r61096 70 70 const char *mapset = NULL; 71 71 const char *per; 72 char shad_filename[GNAME_MAX];72 char *shad_filename; 73 73 char *outfile; 74 74 … … 120 120 int d, day, tien = 0; 121 121 122 double length, maxlength = BIG, zmult = 1.0, step = 0.0,dist;123 double fixedMaxLength = BIG ;122 double length, maxlength = BIG, zmult = 1.0, dist; 123 double fixedMaxLength = BIG, step = 0.0, start = 0.0, end = 0.0; 124 124 char *tt, *lt; 125 125 double z_orig, zp; … … 128 128 distcosangle; 129 129 double TOLER; 130 const char *str_step; 130 131 131 132 int mode; … … 141 142 int ll_correction = FALSE; 142 143 double coslatsq; 144 143 145 144 146 /* why not use G_distance() here which switches to geodesic/great … … 156 158 157 159 158 159 160 int main(int argc, char *argv[]) 160 161 { … … 164 165 struct 165 166 { 166 struct Option *elevin, *dist, *coord, *direction, *horizon, *step, 167 *bufferzone, *e_buff, *w_buff, *n_buff, *s_buff, *maxdistance, *output; 167 struct Option *elevin, *dist, *coord, *direction, *horizon, 168 *step, *start, *end, *bufferzone, *e_buff, *w_buff, 169 *n_buff, *s_buff, *maxdistance, *output; 168 170 } parm; 169 171 … … 190 192 " counterclockwise with east=0, north=90 etc. The output is the horizon height in radians."); 191 193 192 parm.elevin = G_define_option(); 193 parm.elevin->key = "elev_in"; 194 parm.elevin->type = TYPE_STRING; 195 parm.elevin->required = YES; 196 parm.elevin->gisprompt = "old,cell,raster"; 197 parm.elevin->description = 198 _("Name of the input elevation raster map [meters]"); 194 parm.elevin = G_define_standard_option(G_OPT_R_ELEV); 199 195 parm.elevin->guisection = _("Input options"); 200 196 … … 209 205 210 206 parm.step = G_define_option(); 211 parm.step->key = " horizon_step";207 parm.step->key = "step"; 212 208 parm.step->type = TYPE_DOUBLE; 213 209 parm.step->required = NO; … … 215 211 _("Angle step size for multidirectional horizon [degrees]"); 216 212 parm.step->guisection = _("Input options"); 213 214 parm.start = G_define_option(); 215 parm.start->key = "start"; 216 parm.start->type = TYPE_DOUBLE; 217 parm.start->answer = "0.0"; 218 parm.start->required = NO; 219 parm.start->description = 220 _("Start angle for multidirectional horizon [degrees]"); 221 parm.start->guisection = _("Input options"); 222 223 parm.end = G_define_option(); 224 parm.end->key = "end"; 225 parm.end->type = TYPE_DOUBLE; 226 parm.end->answer = "360.0"; 227 parm.end->required = NO; 228 parm.end->description = 229 _("End angle for multidirectional horizon [degrees]"); 230 parm.end->guisection = _("Input options"); 217 231 218 232 parm.bufferzone = G_define_option(); … … 265 279 266 280 267 parm.horizon = G_define_option(); 268 parm.horizon->key = "horizon"; 269 parm.horizon->type = TYPE_STRING; 281 parm.horizon = G_define_standard_option(G_OPT_R_BASENAME_OUTPUT); 270 282 parm.horizon->required = NO; 271 parm.horizon->gisprompt = "old,cell,raster";272 parm.horizon->description = _("Prefix of the horizon raster output maps");273 283 parm.horizon->guisection = _("Output options"); 274 284 … … 342 352 343 353 if (parm.coord->answer == NULL) { 354 G_debug(1, "Setting mode: WHOLE_RASTER"); 344 355 setMode(WHOLE_RASTER); 345 356 } 346 357 else { 358 G_debug(1, "Setting mode: SINGLE_POINT"); 347 359 setMode(SINGLE_POINT); 348 360 if (sscanf(parm.coord->answer, "%lf,%lf", &xcoord, &ycoord) != 2) { … … 384 396 horizon = parm.horizon->answer; 385 397 if (parm.step->answer != NULL) 398 str_step = parm.step->answer; 386 399 sscanf(parm.step->answer, "%lf", &step); 400 sscanf(parm.start->answer, "%lf", &start); 401 sscanf(parm.end->answer, "%lf", &end); 402 if (start < 0.0) { 403 G_fatal_error( 404 _("Negative values of start angle are not allowed. Aborting.")); 405 } 406 if (end < 0.0 || end > 360.0) { 407 G_fatal_error( 408 _("End angle is not between 0 and 360. Aborting.")); 409 } 410 if (start >= end) { 411 G_fatal_error( 412 _("You specify a start grater than the end angle. Aborting.")); 413 } 414 G_debug(1, "Angle step: %g, start: %g, end: %g", step, start, end); 387 415 } 388 416 else { … … 393 421 } 394 422 sscanf(parm.step->answer, "%lf", &step); 395 396 397 423 } 398 424 … … 1014 1040 { 1015 1041 int i, j, l, k = 0; 1016 int numDigits; 1042 size_t numDigits = 3; 1043 size_t decimals, add; 1017 1044 1018 1045 int xindex, yindex; … … 1027 1054 double delt_dist; 1028 1055 1029 char formatString[10];1056 char *formatString; 1030 1057 char msg_buff[256]; 1031 1058 … … 1040 1067 1041 1068 int arrayNumInt; 1042 double dfr_rad; 1069 int start_indx; 1070 double dfr_rad, start_rad, angle_deg; 1043 1071 1044 1072 xindex = (int)((xcoord - xmin) / stepx); … … 1104 1132 else { 1105 1133 dfr_rad = step * deg2rad; 1106 arrayNumInt = (int)(360. / fabs(step)); 1107 } 1108 1109 numDigits = (int)(log10(1. * arrayNumInt)) + 1; 1110 sprintf(formatString, "%%s_%%0%dd", numDigits); 1134 start_rad = start * deg2rad; 1135 arrayNumInt = (int)((end - start) / fabs(step)); 1136 start_indx = (int)(start / step); 1137 } 1138 1139 /* numDigits = (int)(log10(1. * arrayNumInt)) + 1; 1140 sprintf(formatString, "%%s_%%0%dd", numDigits); */ 1141 1142 decimals = G_get_num_decimals(str_step); 1111 1143 1112 1144 for (k = 0; k < arrayNumInt; k++) { 1113 1145 struct History history; 1114 1146 1115 if (step != 0.0) 1116 sprintf(shad_filename, formatString, horizon, k); 1117 1118 angle = (single_direction * deg2rad) + (dfr_rad * k); 1147 angle = (start + single_direction) * deg2rad + (dfr_rad * k); 1148 angle_deg = angle * rad2deg + 0.0001; 1149 1150 if (step != 0.0) 1151 shad_filename = G_generate_basename(horizon, angle_deg, 3, decimals); 1152 1119 1153 /* 1120 1154 com_par(angle); 1121 1155 */ 1122 1156 G_message(_("Calculating map %01d of %01d (angle %.2f, raster map <%s>)"), 1123 (k + 1), arrayNumInt, angle * rad2deg, shad_filename);1157 (k + 1), arrayNumInt, angle_deg, shad_filename); 1124 1158 1125 1159 for (j = hor_row_start; j < hor_row_end; j++) { … … 1265 1299 1266 1300 Rast_write_history(shad_filename, &history); 1267 } 1268 } 1269 } 1301 G_free(shad_filename); 1302 } 1303 } 1304 }
Note:
See TracChangeset
for help on using the changeset viewer.
