Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/WINFOArtifact.java @ 8728:f51b9305d338
(issue1801) Reference gauge for waterlevel calculation depends on direction of calculation or flow direction.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Wed, 29 Apr 2015 18:20:23 +0200 |
parents | 93a31cfb18c0 |
children | 1d46e388fe2b |
comparison
equal
deleted
inserted
replaced
8727:20b543616e6d | 8728:f51b9305d338 |
---|---|
256 if (isFreeQ() || isFreeW()) { | 256 if (isFreeQ() || isFreeW()) { |
257 refKm = range[0]; | 257 refKm = range[0]; |
258 log.debug("'free' calculation (km " + refKm + ")"); | 258 log.debug("'free' calculation (km " + refKm + ")"); |
259 } | 259 } |
260 else { | 260 else { |
261 Gauge gauge = river.determineGaugeByPosition(range[0]); | 261 Gauge gauge = determineRefGauge(range, river); |
262 | |
262 if (gauge == null) { | 263 if (gauge == null) { |
263 return error( | 264 return error( |
264 new WQKms[0], "no.gauge.found.for.km", range[0]); | 265 new WQKms[0], "no.gauge.found.for.km", range[0]); |
265 } | 266 } |
266 | 267 |
652 return Lines.createWaterLines(points, last_w); | 653 return Lines.createWaterLines(points, last_w); |
653 } | 654 } |
654 | 655 |
655 | 656 |
656 /** | 657 /** |
657 * Returns the Qs for a number of Ws. This method makes use of | 658 * Returns the Qs for a number of Ws. |
658 * DischargeTables.getQForW(). | |
659 * | 659 * |
660 * @param ws An array of W values. | 660 * @param ws An array of W values. |
661 * | 661 * |
662 * @return an array of Q values. | 662 * @return an array of Q values. |
663 */ | 663 */ |
728 | 728 |
729 if (debug) { | 729 if (debug) { |
730 log.debug("range: " + Arrays.toString(range)); | 730 log.debug("range: " + Arrays.toString(range)); |
731 } | 731 } |
732 | 732 |
733 Gauge g = r.determineGaugeByPosition(range[0]); | 733 Gauge g = determineRefGauge(range, rangeAccess.getRiver()); |
734 if (g == null) { | 734 if (g == null) { |
735 log.warn("no gauge found for km: " + range[0]); | 735 log.warn("no gauge found for km: " + range[0]); |
736 return null; | 736 return null; |
737 } | 737 } |
738 | 738 |
778 qsOut.toNativeArray(), | 778 qsOut.toNativeArray(), |
779 generatedWs ? wsOut.toNativeArray() : null | 779 generatedWs ? wsOut.toNativeArray() : null |
780 }; | 780 }; |
781 } | 781 } |
782 | 782 |
783 | |
784 /** | |
785 * Determine reference gauge dependent on direction of calculation | |
786 * for a range calculation, otherwise dependent on flow direction. | |
787 */ | |
788 public Gauge determineRefGauge(double[] range, River river) { | |
789 if (isRange()) { | |
790 return river.determineGaugeByPosition( | |
791 range[0], | |
792 range[0] > range[1]); | |
793 } | |
794 else { | |
795 return river.determineGaugeByPosition(range[0]); | |
796 } | |
797 } | |
783 | 798 |
784 /** | 799 /** |
785 * Determines the selected mode of distance/range input. | 800 * Determines the selected mode of distance/range input. |
786 * | 801 * |
787 * @return true, if the range mode is selected otherwise false. | 802 * @return true, if the range mode is selected otherwise false. |