Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/states/WQSelect.java @ 9130:f61bc0c63188
WQSelect can now handle distance-only data
author | gernotbelger |
---|---|
date | Wed, 06 Jun 2018 14:16:28 +0200 |
parents | e3519c3e7a0a |
children | 2323d005f9a5 |
comparison
equal
deleted
inserted
replaced
9129:28eec75415d8 | 9130:f61bc0c63188 |
---|---|
30 import org.dive4elements.river.model.Wst; | 30 import org.dive4elements.river.model.Wst; |
31 | 31 |
32 import org.dive4elements.river.artifacts.D4EArtifact; | 32 import org.dive4elements.river.artifacts.D4EArtifact; |
33 | 33 |
34 import org.dive4elements.river.artifacts.access.RangeAccess; | 34 import org.dive4elements.river.artifacts.access.RangeAccess; |
35 import org.dive4elements.river.artifacts.access.RangeAccess.KM_MODE; | |
35 import org.dive4elements.river.artifacts.access.ComputationRangeAccess; | 36 import org.dive4elements.river.artifacts.access.ComputationRangeAccess; |
36 import org.dive4elements.river.artifacts.model.WstFactory; | 37 import org.dive4elements.river.artifacts.model.WstFactory; |
37 import org.dive4elements.river.artifacts.model.WstValueTable; | 38 import org.dive4elements.river.artifacts.model.WstValueTable; |
38 import org.dive4elements.river.artifacts.model.WstValueTableFactory; | 39 import org.dive4elements.river.artifacts.model.WstValueTableFactory; |
39 import org.dive4elements.river.artifacts.resources.Resources; | 40 import org.dive4elements.river.artifacts.resources.Resources; |
430 | 431 |
431 ComputationRangeAccess access = new ComputationRangeAccess(winfo); | 432 ComputationRangeAccess access = new ComputationRangeAccess(winfo); |
432 | 433 |
433 double[] minmaxW = null; | 434 double[] minmaxW = null; |
434 if(valueTable != null) { | 435 if(valueTable != null) { |
435 double[] km = null; | 436 |
436 if(access.isRange()) { | 437 final double startKm = access.getStartKm(); |
437 km = access.getFromToStep(); | 438 // Use the start km to determine the min max values. |
438 // Use the start km to determine the min max values. | 439 minmaxW = valueTable.getMinMaxW(startKm); |
439 minmaxW = valueTable.getMinMaxW(km[0]); | |
440 } | |
441 else { | |
442 km = access.getKms(); | |
443 minmaxW = valueTable.getMinMaxW(km[0]); | |
444 } | |
445 } | 440 } |
446 return minmaxW != null | 441 return minmaxW != null |
447 ? minmaxW | 442 ? minmaxW |
448 : new double[] { Double.MIN_VALUE, Double.MAX_VALUE }; | 443 : new double[] { Double.MIN_VALUE, Double.MAX_VALUE }; |
449 } | 444 } |
488 * @return the min and max Q values for the current kilometer range. | 483 * @return the min and max Q values for the current kilometer range. |
489 */ | 484 */ |
490 protected double[] determineMinMaxQ(D4EArtifact winfo) { | 485 protected double[] determineMinMaxQ(D4EArtifact winfo) { |
491 log.debug("WQSelect.determineMinMaxQ"); | 486 log.debug("WQSelect.determineMinMaxQ"); |
492 | 487 |
493 WstValueTable valueTable = WstValueTableFactory.getTable( | 488 final WstValueTable valueTable = WstValueTableFactory.getTable(RiverUtils.getRiver(winfo)); |
494 RiverUtils.getRiver(winfo)); | 489 |
495 | 490 final ComputationRangeAccess access = new ComputationRangeAccess(winfo); |
496 ComputationRangeAccess access = new ComputationRangeAccess(winfo); | |
497 | 491 |
498 double[] minmaxQ = null; | 492 double[] minmaxQ = null; |
499 if(valueTable != null) { | 493 if(valueTable != null) { |
500 double[] km = null; | 494 |
501 if(access.isRange()) { | 495 final KM_MODE mode = access.getKmRangeMode(); |
502 km = new ComputationRangeAccess(winfo).getFromToStep(); | 496 switch (mode) { |
497 case RANGE: { | |
498 final double[] km = access.getFromToStep(); | |
503 minmaxQ = valueTable.getMinMaxQ(km[0], km[1], km[2]); | 499 minmaxQ = valueTable.getMinMaxQ(km[0], km[1], km[2]); |
504 } | 500 break; |
505 else { | 501 } |
506 km = access.getKms(); | 502 |
503 case DISTANCE_ONLY: { | |
504 minmaxQ = valueTable.getMinMaxQ(access.getFrom(), access.getTo(), 0.1); | |
505 break; | |
506 } | |
507 | |
508 default: { | |
509 final double[] km = access.getKms(); | |
507 minmaxQ = valueTable.getMinMaxQ(km[0]); | 510 minmaxQ = valueTable.getMinMaxQ(km[0]); |
508 for (int i = 1; i < km.length; i++) { | 511 for (int i = 1; i < km.length; i++) { |
509 double[] tmp = valueTable.getMinMaxQ(km[i]); | 512 double[] tmp = valueTable.getMinMaxQ(km[i]); |
510 if(tmp[0] < minmaxQ[0]) { | 513 if(tmp[0] < minmaxQ[0]) { |
511 minmaxQ[0] = tmp[0]; | 514 minmaxQ[0] = tmp[0]; |
512 } | 515 } |
513 if(tmp[1] > minmaxQ[1]) { | 516 if(tmp[1] > minmaxQ[1]) { |
514 minmaxQ[1] = tmp[1]; | 517 minmaxQ[1] = tmp[1]; |
515 } | 518 } |
516 } | 519 } |
520 break; | |
521 } | |
517 } | 522 } |
518 } | 523 } |
519 return minmaxQ != null | 524 return minmaxQ != null |
520 ? minmaxQ | 525 ? minmaxQ |
521 : new double[] { Double.MIN_VALUE, Double.MAX_VALUE }; | 526 : new double[] { Double.MIN_VALUE, Double.MAX_VALUE }; |