Mercurial > dive4elements > river
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 |