comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java @ 735:db68806e6563

Fixed "W am Pegel" calculations. flys-artifacts/trunk@2230 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sat, 25 Jun 2011 17:35:50 +0000
parents 4800230fba8a
children 5abdb2fa8eb1
comparison
equal deleted inserted replaced
734:56d70e546800 735:db68806e6563
1 package de.intevation.flys.artifacts; 1 package de.intevation.flys.artifacts;
2 2
3 import java.util.Arrays;
3 import java.util.ArrayList; 4 import java.util.ArrayList;
4 import java.util.Collection; 5 import java.util.Collection;
5 import java.util.Collections; 6 import java.util.Collections;
6 import java.util.HashMap; 7 import java.util.HashMap;
7 import java.util.TreeMap; 8 import java.util.TreeMap;
491 * Returns the selected distance of points. 492 * Returns the selected distance of points.
492 * 493 *
493 * @return the selected distance or points. 494 * @return the selected distance or points.
494 */ 495 */
495 public double[] getDistance() { 496 public double[] getDistance() {
497 StateData dMode = getData("ld_mode");
496 StateData dFrom = getData("ld_from"); 498 StateData dFrom = getData("ld_from");
497 StateData dTo = getData("ld_to"); 499 StateData dTo = getData("ld_to");
498 StateData dLocations = getData("ld_locations"); 500 StateData dLocations = getData("ld_locations");
499 501
502 if (dMode != null) {
503 String mode = (String)dMode.getValue();
504 if ("location".equals(mode)) {
505 double[] locations = getLocations();
506 return new double[] { locations[0], locations[locations.length-1] };
507 }
508 if (dFrom != null && dTo != null) {
509 return getDistanceByRange(dFrom, dTo);
510 }
511 }
512
513 if (dLocations != null) {
514 double[] locations = getLocations();
515 return new double[] { locations[0], locations[locations.length-1] };
516 }
517
500 if (dFrom != null && dTo != null) { 518 if (dFrom != null && dTo != null) {
501 return getDistanceByRange(dFrom, dTo); 519 return getDistanceByRange(dFrom, dTo);
502 }
503 else if (dLocations != null) {
504 double[] locations = getLocations();
505 return new double[] { locations[0], locations[locations.length-1] };
506 } 520 }
507 521
508 logger.warn("No data found for distance determination!"); 522 logger.warn("No data found for distance determination!");
509 523
510 return null; 524 return null;
662 * 676 *
663 * @return the gauge. 677 * @return the gauge.
664 */ 678 */
665 public Gauge getGauge() { 679 public Gauge getGauge() {
666 River river = getRiver(); 680 River river = getRiver();
681
682 if (river == null) {
683 logger.debug("no river found");
684 return null;
685 }
686
667 double[] dist = getDistance(); 687 double[] dist = getDistance();
688
689 if (dist == null) {
690 logger.debug("no range found");
691 return null;
692 }
668 693
669 if (logger.isDebugEnabled()) { 694 if (logger.isDebugEnabled()) {
670 logger.debug("Determine gauge for:"); 695 logger.debug("Determine gauge for:");
671 logger.debug("... river: " + river.getName()); 696 logger.debug("... river: " + river.getName());
672 logger.debug("... distance: " + dist[0] + " - " + dist[1]); 697 logger.debug("... distance: " + dist[0] + " - " + dist[1]);
846 * @param ws An array of W values. 871 * @param ws An array of W values.
847 * 872 *
848 * @return an array of Q values. 873 * @return an array of Q values.
849 */ 874 */
850 public double[] getQsForWs(double[] ws) { 875 public double[] getQsForWs(double[] ws) {
851 logger.debug("FLYSArtifact.getQsForWs"); 876
877 boolean debug = logger.isDebugEnabled();
878
879 if (debug) {
880 logger.debug("FLYSArtifact.getQsForWs");
881 }
852 882
853 River r = getRiver(); 883 River r = getRiver();
854 Gauge g = getGauge(); 884 if (r == null) {
885 logger.warn("no river found");
886 return null;
887
888 }
889
890 double [] range = getDistance();
891 if (range == null) {
892 logger.warn("no ranges found");
893 return null;
894 }
895
896 if (debug) {
897 logger.debug("range: " + Arrays.toString(range));
898 }
899
900 Gauge g = r.determineGaugeByPosition(range[0]);
901 if (g == null) {
902 logger.warn("no gauge found for km: " + range[0]);
903 return null;
904 }
905
906 if (debug) {
907 logger.debug("convert w->q with gauge '" + g.getName() + "'");
908 }
855 909
856 DischargeTables dt = new DischargeTables(r.getName(), g.getName()); 910 DischargeTables dt = new DischargeTables(r.getName(), g.getName());
857 Map<String, double [][]> tmp = dt.getValues(); 911 Map<String, double [][]> tmp = dt.getValues();
858 912
859 double[][] values = tmp.get(g.getName()); 913 double[][] values = tmp.get(g.getName());
860 double[] qs = new double[ws.length]; 914 double[] qs = new double[ws.length];
861 915
862 for (int i = 0; i < ws.length; i++) { 916 for (int i = 0; i < ws.length; i++) {
863 qs[i] = dt.getQForW(values, ws[i]); 917 qs[i] = dt.getQForW(values, ws[i]);
918 if (debug) {
919 logger.debug("w: " + ws[i] + " -> q: " + qs[i]);
920 }
864 } 921 }
865 922
866 return qs; 923 return qs;
867 } 924 }
868 925

http://dive4elements.wald.intevation.org