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 }

http://dive4elements.wald.intevation.org