Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java @ 2164:d548e2e13524
Added code for the simple case of "Bezugslinienverfahren" ("W auf freier Strecke").
flys-artifacts/trunk@3752 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 23 Jan 2012 16:55:42 +0000 |
parents | d626ae185305 |
children | 637dd38d0e2f |
comparison
equal
deleted
inserted
replaced
2163:105097966111 | 2164:d548e2e13524 |
---|---|
381 return error(new WQKms[0], "No range found"); | 381 return error(new WQKms[0], "No range found"); |
382 } | 382 } |
383 | 383 |
384 double refKm; | 384 double refKm; |
385 | 385 |
386 if (isFreeQ()) { | 386 if (isFreeQ() || isFreeW()) { |
387 refKm = range[0]; | 387 refKm = range[0]; |
388 logger.debug("'free' calculation (km " + refKm + ")"); | 388 logger.debug("'free' calculation (km " + refKm + ")"); |
389 } | 389 } |
390 else { | 390 else { |
391 Gauge gauge = river.determineGaugeByPosition(range[0]); | 391 Gauge gauge = river.determineGaugeByPosition(range[0]); |
732 if (range == null) { | 732 if (range == null) { |
733 logger.warn("no ranges found"); | 733 logger.warn("no ranges found"); |
734 return null; | 734 return null; |
735 } | 735 } |
736 | 736 |
737 if (isFreeW()) { | |
738 WstValueTable wst = WstValueTableFactory.getTable(r); | |
739 if (wst == null) { | |
740 logger.warn("no wst value table found"); | |
741 return null; | |
742 } | |
743 double km = range[0]; | |
744 | |
745 double [] outQs = new double[ws.length]; | |
746 | |
747 for (int i = 0; i < ws.length; ++i) { | |
748 double [] qs = wst.findQsForW(km, ws[i]); | |
749 if (qs.length < 1) { | |
750 logger.warn("no q found for w = " + ws[i]); | |
751 outQs[i] = Double.NaN; | |
752 } | |
753 if (qs.length > 1) { | |
754 // TODO: Generate more than w/q line! | |
755 logger.warn("more than one q found for w = " + ws[i]); | |
756 } | |
757 outQs[i] = qs[0]; | |
758 } | |
759 | |
760 return outQs; | |
761 } | |
762 | |
737 if (debug) { | 763 if (debug) { |
738 logger.debug("range: " + Arrays.toString(range)); | 764 logger.debug("range: " + Arrays.toString(range)); |
739 } | 765 } |
740 | 766 |
741 Gauge g = r.determineGaugeByPosition(range[0]); | 767 Gauge g = r.determineGaugeByPosition(range[0]); |
937 public boolean isQ() { | 963 public boolean isQ() { |
938 StateData mode = getData("wq_mode"); | 964 StateData mode = getData("wq_mode"); |
939 return mode != null && mode.getValue().equals("Q"); | 965 return mode != null && mode.getValue().equals("Q"); |
940 } | 966 } |
941 | 967 |
968 public boolean isFreeW() { | |
969 StateData mode = getData("wq_mode"); | |
970 return mode != null && mode.getValue().equals("FREEW"); | |
971 } | |
972 | |
942 | 973 |
943 /** | 974 /** |
944 * Returns true, if the parameter is set to compute data on a free range. | 975 * Returns true, if the parameter is set to compute data on a free range. |
945 * Otherwise it returns false, which tells the calculation that it is bound | 976 * Otherwise it returns false, which tells the calculation that it is bound |
946 * to a gauge. | 977 * to a gauge. |
952 StateData mode = getData("wq_free"); | 983 StateData mode = getData("wq_free"); |
953 String value = (mode != null) ? (String) mode.getValue() : null; | 984 String value = (mode != null) ? (String) mode.getValue() : null; |
954 | 985 |
955 logger.debug("isFreeQ: " + value); | 986 logger.debug("isFreeQ: " + value); |
956 | 987 |
957 if (value == null) { | 988 return value != null && Boolean.valueOf(value); |
958 return false; | |
959 } | |
960 | |
961 return Boolean.valueOf(value); | |
962 } | 989 } |
963 | 990 |
964 | 991 |
965 /** | 992 /** |
966 * Returns the Q values based on a specified kilometer range. | 993 * Returns the Q values based on a specified kilometer range. |