comparison artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/FlowVelocityModelKmValueFinder.java @ 9096:9bd4505a20dc

Fixed removing duplicates
author mschaefer
date Sat, 26 May 2018 15:41:47 +0200
parents 1b24fdbf7fe2
children 5be112fba832
comparison
equal deleted inserted replaced
9095:1b24fdbf7fe2 9096:9bd4505a20dc
50 /** 50 /**
51 * Query for a range of stations of a river with all their q, main-v and tau values.<br /> 51 * Query for a range of stations of a river with all their q, main-v and tau values.<br />
52 * (Might be several 10000 rows if many stations and large q range) 52 * (Might be several 10000 rows if many stations and large q range)
53 */ 53 */
54 private static final String SQL_SELECT_ALL = // 54 private static final String SQL_SELECT_ALL = //
55 "SELECT DISTINCT fvmv.station AS station, fvmv.q AS q, fvmv.main_channel AS vmain, fvmv.shear_stress AS tau" 55 "SELECT fvmv.station AS station, fvmv.q AS q, fvmv.main_channel AS vmain, fvmv.shear_stress AS tau"
56 + " FROM (discharge_zone dz INNER JOIN flow_velocity_model fvm ON dz.id = fvm.discharge_zone_id)" 56 + " FROM (discharge_zone dz INNER JOIN flow_velocity_model fvm ON dz.id = fvm.discharge_zone_id)"
57 + " INNER JOIN flow_velocity_model_values fvmv ON fvm.id = fvmv.flow_velocity_model_id" 57 + " INNER JOIN flow_velocity_model_values fvmv ON fvm.id = fvmv.flow_velocity_model_id"
58 + " WHERE (dz.river_id = :river_id) AND (fvmv.station BETWEEN :kmfrom - 0.0001 AND :kmto + 0.0001)" 58 + " WHERE (dz.river_id = :river_id) AND (fvmv.station BETWEEN :kmfrom - 0.0001 AND :kmto + 0.0001)"
59 /* + " WHERE (dz.river_id = :river_id) AND (fvmv.q BETWEEN :qmin AND :qmax)" */ 59 /* + " WHERE (dz.river_id = :river_id) AND (fvmv.q BETWEEN :qmin AND :qmax)" */
60 + " ORDER BY fvmv.station ASC, fvmv.q ASC"; 60 + " ORDER BY fvmv.station ASC, fvmv.q ASC";
61 61
62 /** 62 /**
63 * Query for a river's max km below a limit with all its q, main-v and tau values. 63 * Query for a river's max km below a limit with all its q, main-v and tau values.
64 */ 64 */
65 private static final String SQL_SELECT_KMLOWER = // 65 private static final String SQL_SELECT_KMLOWER = //
66 "SELECT DISTINCT fvmv.station AS station, fvmv.q AS q, fvmv.main_channel AS vmain, fvmv.shear_stress AS tau" 66 "SELECT fvmv.station AS station, fvmv.q AS q, fvmv.main_channel AS vmain, fvmv.shear_stress AS tau"
67 + " FROM flow_velocity_model_values fvmv" 67 + " FROM flow_velocity_model_values fvmv"
68 + " INNER JOIN (SELECT MAX(fvmvi.station) AS kmmax" 68 + " INNER JOIN (SELECT MAX(fvmvi.station) AS kmmax"
69 + " FROM discharge_zone dz INNER JOIN flow_velocity_model fvm ON dz.id = fvm.discharge_zone_id" 69 + " FROM discharge_zone dz INNER JOIN flow_velocity_model fvm ON dz.id = fvm.discharge_zone_id"
70 + " INNER JOIN flow_velocity_model_values fvmvi ON fvm.id = fvmvi.flow_velocity_model_id" 70 + " INNER JOIN flow_velocity_model_values fvmvi ON fvm.id = fvmvi.flow_velocity_model_id"
71 + " WHERE (dz.river_id = :river_id) AND (fvmvi.station < :kmfrom - 0.0001)) finf ON fvmv.station = finf.kmmax" 71 + " WHERE (dz.river_id = :river_id) AND (fvmvi.station < :kmfrom - 0.0001)) finf ON fvmv.station = finf.kmmax"
72 + " ORDER BY fvmv.q ASC"; 72 + " ORDER BY fvmv.q ASC";
73 73
74 /** 74 /**
75 * Query for a river's min km above a limit with all its q, main-v and tau values. 75 * Query for a river's min km above a limit with all its q, main-v and tau values.
76 */ 76 */
77 private static final String SQL_SELECT_KMUPPER = // 77 private static final String SQL_SELECT_KMUPPER = //
78 "SELECT DISTINCT fvmv.station AS station, fvmv.q AS q, fvmv.main_channel AS vmain, fvmv.shear_stress AS tau" 78 "SELECT fvmv.station AS station, fvmv.q AS q, fvmv.main_channel AS vmain, fvmv.shear_stress AS tau"
79 + " FROM flow_velocity_model_values fvmv" 79 + " FROM flow_velocity_model_values fvmv"
80 + " INNER JOIN (SELECT MIN(fvmvi.station) AS kmmin" 80 + " INNER JOIN (SELECT MIN(fvmvi.station) AS kmmin"
81 + " FROM discharge_zone dz INNER JOIN flow_velocity_model fvm ON dz.id = fvm.discharge_zone_id" 81 + " FROM discharge_zone dz INNER JOIN flow_velocity_model fvm ON dz.id = fvm.discharge_zone_id"
82 + " INNER JOIN flow_velocity_model_values fvmvi ON fvm.id = fvmvi.flow_velocity_model_id" 82 + " INNER JOIN flow_velocity_model_values fvmvi ON fvm.id = fvmvi.flow_velocity_model_id"
83 + " WHERE (dz.river_id = :river_id) AND (fvmvi.station > :kmto + 0.0001)) fsup ON fvmv.station = fsup.kmmin" 83 + " WHERE (dz.river_id = :river_id) AND (fvmvi.station > :kmto + 0.0001)) fsup ON fvmv.station = fsup.kmmin"
84 + " ORDER BY fvmv.q ASC"; 84 + " ORDER BY fvmv.q ASC";
85 85
86 // /** 86 // /**
275 * Adds the km-q-v-tau values of a query result row to the last km of the list, or a new one resp. 275 * Adds the km-q-v-tau values of a query result row to the last km of the list, or a new one resp.
276 * 276 *
277 * @return Number of rows 277 * @return Number of rows
278 */ 278 */
279 private int addKms(final List<Object[]> rows, final boolean isDemoValuesCorrection) { 279 private int addKms(final List<Object[]> rows, final boolean isDemoValuesCorrection) {
280 log.trace("addKms i km j q v tau");
280 for (final Object[] row : rows) { 281 for (final Object[] row : rows) {
281 if ((this.kms.size() == 0) || !Utils.epsilonEquals(this.kms.get(this.kms.size() - 1), (double) row[0], 0.0001)) { 282 if ((this.kms.size() == 0) || !Utils.epsilonEquals(this.kms.get(this.kms.size() - 1), (double) row[0], 0.0001)) {
282 this.kms.add((double) row[0]); 283 this.kms.add((double) row[0]);
283 this.values.add(new FlowVelocityKmModelValues(this.kms.get(this.kms.size() - 1))); 284 this.values.add(new FlowVelocityKmModelValues(this.kms.get(this.kms.size() - 1)));
284 } 285 }
286 // "Verfremdung" der v-Werte etwas korrigieren (Originalwerte wurden mit Zufallswert zwischen 10 und 20 multipliziert) 287 // "Verfremdung" der v-Werte etwas korrigieren (Originalwerte wurden mit Zufallswert zwischen 10 und 20 multipliziert)
287 this.values.get(this.values.size() - 1).addValues((double) row[1], ((double) row[2]) / 10, (double) row[3]); 288 this.values.get(this.values.size() - 1).addValues((double) row[1], ((double) row[2]) / 10, (double) row[3]);
288 else 289 else
289 this.values.get(this.values.size() - 1).addValues((double) row[1], (double) row[2], (double) row[3]); 290 this.values.get(this.values.size() - 1).addValues((double) row[1], (double) row[2], (double) row[3]);
290 final int j = this.values.size() - 1; 291 final int j = this.values.size() - 1;
291 log.trace(String.format("addKms %d km %.3f q %.0f v %.2f tau %.2f", this.values.size() - 1, this.values.get(j).getKm(), (double) row[1], 292 log.trace(String.format("addKms %d %.3f %d %.0f %.2f %.2f", this.values.size() - 1, this.values.get(j).getKm(),
292 (double) row[2], (double) row[3])); 293 this.values.get(j).size() - 1, (double) row[1], (double) row[2], (double) row[3]));
293 } 294 }
294 return rows.size(); 295 return rows.size();
295 } 296 }
296 297
297 /** 298 /**

http://dive4elements.wald.intevation.org