Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/exports/WaterlevelExporter.java @ 6603:90756201c488
Factor out filtering code in WaterlevelExporter
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Thu, 18 Jul 2013 13:26:33 +0200 |
parents | 5ecc6d4d73f2 |
children | ddef735db96a |
comparison
equal
deleted
inserted
replaced
6602:244beb29418e | 6603:90756201c488 |
---|---|
358 } | 358 } |
359 } | 359 } |
360 } | 360 } |
361 /* Append the official fixing at the bottom */ | 361 /* Append the official fixing at the bottom */ |
362 for (WQKms wqkms: officalFixings) { | 362 for (WQKms wqkms: officalFixings) { |
363 logger.debug("Exporting official fixing fromKM: " + first + | 363 wQKms2CSV(writer, filterWQKms(wqkms, first, last), atGauge, isQ); |
364 " toKM: " + last); | 364 } |
365 /* To handle upstream / downstream and to limit | 365 } |
366 * the officialFixings to the calculation distance | 366 |
367 * we create a new wqkms object here and fill it only | 367 |
368 * with the relevant data. */ | 368 /** Filter a wqkms object to a distance. |
369 if (first.isNaN() || last.isNaN()) { | 369 * |
370 logger.warn("Exporting official fixing without valid first/last."); | 370 * To handle upstream / downstream and to limit |
371 wQKms2CSV(writer, wqkms, atGauge, isQ); | 371 * the officialFixings to the calculation distance |
372 return; | 372 * we create a new wqkms object here and fill it only |
373 } | 373 * with the relevant data. |
374 int firstIdx = first > last ? wqkms.size() - 1 : 0; | 374 * |
375 int lastIdx = first > last ? 0 : wqkms.size() -1; | 375 * @param wqkms: The WQKms Object to filter |
376 WQKms filtered = new WQKms (wqkms.size()); | 376 * @param first: The fist kilometer of the range |
377 filtered.setReferenceSystem(wqkms.getReferenceSystem()); | 377 * @param last: The last kilometer of the range |
378 filtered.setName(wqkms.getName()); | 378 * |
379 double [] dp = new double [3]; | 379 * @return A new WQKms with the relevant data sorted by direction |
380 | 380 */ |
381 if (first > last) { | 381 private WQKms filterWQKms(WQKms wqkms, Double first, Double last) { |
382 for (int i = wqkms.size() - 1; i >= 0; i--) { | 382 if (first.isNaN() || last.isNaN()) { |
383 dp = wqkms.get(i, dp); | 383 logger.warn("Filtering official fixing without valid first/last."); |
384 if (dp[2] < first && dp[2] > last) { | 384 return wqkms; |
385 filtered.add(dp[0], dp[1], dp[2]); | 385 } |
386 } | 386 int firstIdx = first > last ? wqkms.size() - 1 : 0; |
387 } | 387 int lastIdx = first > last ? 0 : wqkms.size() -1; |
388 } else { | 388 WQKms filtered = new WQKms (wqkms.size()); |
389 for (int i = 0; i < wqkms.size(); i++) { | 389 filtered.setReferenceSystem(wqkms.getReferenceSystem()); |
390 dp = wqkms.get(i, dp); | 390 filtered.setName(wqkms.getName()); |
391 if (dp[2] < last && dp[2] > first) { | 391 double [] dp = new double [3]; |
392 filtered.add(dp[0], dp[1], dp[2]); | 392 |
393 } | 393 if (first > last) { |
394 } | 394 for (int i = wqkms.size() - 1; i >= 0; i--) { |
395 } | 395 dp = wqkms.get(i, dp); |
396 wQKms2CSV(writer, filtered, atGauge, isQ); | 396 if (dp[2] < first && dp[2] > last) { |
397 } | 397 filtered.add(dp[0], dp[1], dp[2]); |
398 } | 398 } |
399 /* | 399 } |
400 private WQKms filterWQKms (wkqm | 400 } else { |
401 */ | 401 for (int i = 0; i < wqkms.size(); i++) { |
402 dp = wqkms.get(i, dp); | |
403 if (dp[2] < last && dp[2] > first) { | |
404 filtered.add(dp[0], dp[1], dp[2]); | |
405 } | |
406 } | |
407 } | |
408 return filtered; | |
409 } | |
410 | |
402 | 411 |
403 protected void writeCSVMeta(CSVWriter writer) { | 412 protected void writeCSVMeta(CSVWriter writer) { |
404 logger.info("WaterlevelExporter.writeCSVMeta"); | 413 logger.info("WaterlevelExporter.writeCSVMeta"); |
405 | 414 |
406 // TODO use Access instead of RiverUtils | 415 // TODO use Access instead of RiverUtils |