Mercurial > dive4elements > river
comparison 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 |
comparison
equal
deleted
inserted
replaced
634:d8c47520c726 | 635:acf3b49ec31f |
---|---|
275 WstValueTable wst = WstValueTableFactory.getTable(river); | 275 WstValueTable wst = WstValueTableFactory.getTable(river); |
276 if (wst == null) { | 276 if (wst == null) { |
277 throw new NullPointerException("No Wst found for selected river."); | 277 throw new NullPointerException("No Wst found for selected river."); |
278 } | 278 } |
279 | 279 |
280 WQKms[] results = computeWaterlevelData(kms, qs, wst); | 280 WQKms[] results = computeWaterlevelData(kms, qs, wst, river.getKmUp()); |
281 | 281 |
282 // TODO Introduce a caching mechanism here! | 282 // TODO Introduce a caching mechanism here! |
283 | 283 |
284 setWaterlevelNames(results, qSel ? qs : ws, qSel ? "Q" : "W"); | 284 setWaterlevelNames(results, qSel ? qs : ws, qSel ? "Q" : "W"); |
285 | 285 |
313 * @return an array of data triples that consist of W, Q and Kms. | 313 * @return an array of data triples that consist of W, Q and Kms. |
314 */ | 314 */ |
315 public static WQKms[] computeWaterlevelData( | 315 public static WQKms[] computeWaterlevelData( |
316 double[] kms, | 316 double[] kms, |
317 double[] qs, | 317 double[] qs, |
318 WstValueTable wst) | 318 WstValueTable wst, |
319 { | 319 boolean up |
320 ) { | |
320 logger.info("WINFOArtifact.computeWaterlevelData"); | 321 logger.info("WINFOArtifact.computeWaterlevelData"); |
321 | 322 |
322 WQKms[] wqkms = new WQKms[qs.length]; | 323 WQKms[] wqkms = new WQKms[qs.length]; |
323 | 324 |
324 ArrayList<WQKms> results = new ArrayList<WQKms>(); | 325 ArrayList<WQKms> results = new ArrayList<WQKms>(); |
325 | 326 |
326 for (int i = 0; i < qs.length; i++) { | 327 for (int i = 0; i < qs.length; i++) { |
327 double [] oqs = new double[kms.length]; | 328 double [] oqs = new double[kms.length]; |
328 double [] ows = new double[kms.length]; | 329 double [] ows = new double[kms.length]; |
329 int referenceIndex = 0; // TODO: Make depend on the flow direction | 330 int referenceIndex = up ? 0 : kms.length-1; |
330 WstValueTable.QPosition qPosition = | 331 WstValueTable.QPosition qPosition = |
331 wst.interpolate(qs[i], referenceIndex, kms, ows, oqs); | 332 wst.interpolate(qs[i], referenceIndex, kms, ows, oqs); |
332 if (qPosition != null) { | 333 if (qPosition != null) { |
333 results.add(new WQKms(kms, oqs, ows)); | 334 results.add(new WQKms(kms, oqs, ows)); |
334 } | 335 } |
509 if (river == null) { | 510 if (river == null) { |
510 logger.error("No river selected."); | 511 logger.error("No river selected."); |
511 return new WQKms[0]; | 512 return new WQKms[0]; |
512 } | 513 } |
513 | 514 |
515 boolean kmUp = river.getKmUp(); | |
516 | |
514 WstValueTable wst = WstValueTableFactory.getTable(river); | 517 WstValueTable wst = WstValueTableFactory.getTable(river); |
515 if (wst == null) { | 518 if (wst == null) { |
516 logger.error("No wst found for selected river."); | 519 logger.error("No wst found for selected river."); |
517 return new WQKms[0]; | 520 return new WQKms[0]; |
518 } | 521 } |
531 logger.warn("no qs given"); | 534 logger.warn("no qs given"); |
532 return new WQKms[0]; | 535 return new WQKms[0]; |
533 } | 536 } |
534 if (qs.length == 1) { | 537 if (qs.length == 1) { |
535 double [] kms = getKms(segments[0]); | 538 double [] kms = getKms(segments[0]); |
536 return computeWaterlevelData(kms, qs, wst); | 539 return computeWaterlevelData(kms, qs, wst, kmUp); |
537 } | 540 } |
538 } | 541 } |
539 | 542 |
540 // more than one segment | 543 // more than one segment |
541 | 544 |
615 | 618 |
616 for (int i = 0; i < iqs.length; ++i) { | 619 for (int i = 0; i < iqs.length; ++i) { |
617 double [] iqsi = iqs[i]; | 620 double [] iqsi = iqs[i]; |
618 | 621 |
619 QPosition qPosition = wst.interpolate( | 622 QPosition qPosition = wst.interpolate( |
620 iqsi[0], 0, boundKms, boundWs, boundQs); | 623 iqsi[0], |
624 kmUp ? 0 : boundKms.length-1, | |
625 boundKms, boundWs, boundQs); | |
621 | 626 |
622 if (qPosition == null) { | 627 if (qPosition == null) { |
623 logger.warn("interpolation failed for " + iqsi[i]); | 628 logger.warn("interpolation failed for " + iqsi[i]); |
624 continue; | 629 continue; |
625 } | 630 } |