Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java @ 635:acf3b49ec31f
Take the flow direction into account.
flys-artifacts/trunk@2010 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 26 May 2011 14:27:06 +0000 |
parents | 929137ee8154 |
children | 58276db49b16 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java Thu May 26 09:41:57 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java Thu May 26 14:27:06 2011 +0000 @@ -277,7 +277,7 @@ throw new NullPointerException("No Wst found for selected river."); } - WQKms[] results = computeWaterlevelData(kms, qs, wst); + WQKms[] results = computeWaterlevelData(kms, qs, wst, river.getKmUp()); // TODO Introduce a caching mechanism here! @@ -315,8 +315,9 @@ public static WQKms[] computeWaterlevelData( double[] kms, double[] qs, - WstValueTable wst) - { + WstValueTable wst, + boolean up + ) { logger.info("WINFOArtifact.computeWaterlevelData"); WQKms[] wqkms = new WQKms[qs.length]; @@ -326,7 +327,7 @@ for (int i = 0; i < qs.length; i++) { double [] oqs = new double[kms.length]; double [] ows = new double[kms.length]; - int referenceIndex = 0; // TODO: Make depend on the flow direction + int referenceIndex = up ? 0 : kms.length-1; WstValueTable.QPosition qPosition = wst.interpolate(qs[i], referenceIndex, kms, ows, oqs); if (qPosition != null) { @@ -511,6 +512,8 @@ return new WQKms[0]; } + boolean kmUp = river.getKmUp(); + WstValueTable wst = WstValueTableFactory.getTable(river); if (wst == null) { logger.error("No wst found for selected river."); @@ -533,7 +536,7 @@ } if (qs.length == 1) { double [] kms = getKms(segments[0]); - return computeWaterlevelData(kms, qs, wst); + return computeWaterlevelData(kms, qs, wst, kmUp); } } @@ -617,7 +620,9 @@ double [] iqsi = iqs[i]; QPosition qPosition = wst.interpolate( - iqsi[0], 0, boundKms, boundWs, boundQs); + iqsi[0], + kmUp ? 0 : boundKms.length-1, + boundKms, boundWs, boundQs); if (qPosition == null) { logger.warn("interpolation failed for " + iqsi[i]);