Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/StaticWKmsArtifact.java @ 2745:b63017afbca8
Add helper to allow for points at duration curve facet.
flys-artifacts/trunk@4480 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Wed, 23 May 2012 19:31:26 +0000 |
parents | 10e6400d4166 |
children | 2f7fed1eb4bf |
comparison
equal
deleted
inserted
replaced
2744:c1f2e792704a | 2745:b63017afbca8 |
---|---|
15 | 15 |
16 import de.intevation.artifacts.Artifact; | 16 import de.intevation.artifacts.Artifact; |
17 import de.intevation.artifacts.ArtifactFactory; | 17 import de.intevation.artifacts.ArtifactFactory; |
18 import de.intevation.artifacts.ArtifactNamespaceContext; | 18 import de.intevation.artifacts.ArtifactNamespaceContext; |
19 import de.intevation.artifacts.CallMeta; | 19 import de.intevation.artifacts.CallMeta; |
20 import de.intevation.flys.artifacts.math.Linear; | |
20 | 21 |
21 import de.intevation.flys.artifacts.model.CrossSectionWaterLineFacet; | 22 import de.intevation.flys.artifacts.model.CrossSectionWaterLineFacet; |
22 import de.intevation.flys.artifacts.model.FacetTypes; | 23 import de.intevation.flys.artifacts.model.FacetTypes; |
23 import de.intevation.flys.artifacts.model.RelativePointFacet; | 24 import de.intevation.flys.artifacts.model.RelativePointFacet; |
24 import de.intevation.flys.artifacts.model.WKms; | 25 import de.intevation.flys.artifacts.model.WKms; |
232 Integer.valueOf(getDataAsString("wst_id"))); | 233 Integer.valueOf(getDataAsString("wst_id"))); |
233 } | 234 } |
234 | 235 |
235 | 236 |
236 /** | 237 /** |
238 * Returns W at Km of WKms, linearly interpolated. | |
239 * Returns -1 if not found. | |
240 */ | |
241 public static double getWAtKmLin(WKms wkms, double km) { | |
242 // Uninformed search. | |
243 int size = wkms.size(); | |
244 int idx = 0; | |
245 boolean kmIncreasing = (wkms.getKm(0) < wkms.getKm(wkms.size()-1)) | |
246 ? true : false; | |
247 if (kmIncreasing) { | |
248 while (idx < size && wkms.getKm(idx) < km) { | |
249 idx++; | |
250 } | |
251 } | |
252 else { | |
253 idx = wkms.size() -1; | |
254 while (idx > 0 && wkms.getKm(idx) > km) { | |
255 idx--; | |
256 } | |
257 } | |
258 | |
259 if (idx == size -1 || idx == 0) { | |
260 return -1; | |
261 } | |
262 | |
263 // Do linear interpolation | |
264 int mod = kmIncreasing ? -1 : +1; | |
265 return Linear.linear(km, wkms.getKm(idx+mod), wkms.getKm(idx), wkms.getW(idx+mod), wkms.getW(idx)); | |
266 } | |
267 | |
268 | |
269 /** | |
237 * Returns W at Km of WKms, searching linearly. | 270 * Returns W at Km of WKms, searching linearly. |
238 * Returns -1 if not found. | 271 * Returns -1 if not found. |
239 */ | 272 */ |
240 public double getWAtKm(WKms wkms, double km) { | 273 public static double getWAtKm(WKms wkms, double km) { |
241 // Uninformed search. | 274 // Uninformed search. |
242 int size = wkms.size(); | 275 int size = wkms.size(); |
243 for (int i = 0; i < size; i++) { | 276 for (int i = 0; i < size; i++) { |
244 if (wkms.getKm(i) == km) { | 277 if (wkms.getKm(i) == km) { |
245 return wkms.getW(i); | 278 return wkms.getW(i); |