Mercurial > dive4elements > river
annotate backend/src/main/java/org/dive4elements/river/model/CrossSectionLine.java @ 6229:3fea9701d58d
Fix gauge determination.
If we look upstream ( a > b ) we still have to compare
the start value of our range against the gauge and not the end
value. The start value is always the relevant value as we
handle the direction by checking this against A or B of the gauge.
Also:
I will never compare doubles with == again.
I will never compare doubles with == again.
I will never compare doubles with == again.
I will never compare doubles with == again.
I will never compare doubles with == again.
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Thu, 06 Jun 2013 18:23:17 +0200 |
parents | 939fea2b24a2 |
children | ad57b1938d8a |
rev | line source |
---|---|
5844
4dd33b86dc61
Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde |
4dd33b86dc61
Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
2 * Software engineering by Intevation GmbH |
4dd33b86dc61
Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
3 * |
5992
4c3ccf2b0304
Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
4 * This file is Free Software under the GNU AGPL (>=v3) |
5844
4dd33b86dc61
Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
5992
4c3ccf2b0304
Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
6 * documentation coming with Dive4Elements River for details. |
5844
4dd33b86dc61
Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
7 */ |
4dd33b86dc61
Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
8 |
5829
18619c1e7c2a
Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5828
diff
changeset
|
9 package org.dive4elements.river.model; |
1203
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
11 import java.io.Serializable; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
12 |
2342
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
13 import java.util.ArrayList; |
1203
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
14 import java.util.List; |
2342
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
15 import java.util.Collections; |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
16 import java.util.Comparator; |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
17 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
18 import java.awt.geom.Point2D; |
1203
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
19 |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
20 import javax.persistence.Entity; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
21 import javax.persistence.Id; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
22 import javax.persistence.Table; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
23 import javax.persistence.GeneratedValue; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
24 import javax.persistence.Column; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
25 import javax.persistence.SequenceGenerator; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
26 import javax.persistence.GenerationType; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
27 import javax.persistence.OneToOne; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
28 import javax.persistence.OneToMany; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
29 import javax.persistence.JoinColumn; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
30 |
2342
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
31 import org.apache.log4j.Logger; |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
32 |
1203
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
33 @Entity |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
34 @Table(name = "cross_section_lines") |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
35 public class CrossSectionLine |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
36 implements Serializable |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
37 { |
2342
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
38 private static Logger logger = Logger.getLogger(CrossSectionLine.class); |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
39 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
40 public static final double EPSILON = 1e-4; |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
41 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
42 public static final double TOO_SMALL = 0.2; |
3684
3b001c273f1b
issue821 (cross sections beyond 500m).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3334
diff
changeset
|
43 public static final double TOO_BIG = 2500; |
2342
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
44 |
1203
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
45 private Integer id; |
2860
2f874d14ac68
Use Doubles to store meassure points of profiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2380
diff
changeset
|
46 private Double km; |
1203
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
47 private CrossSection crossSection; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
48 |
1204
22858e7cca79
Integrated PRF parsing into importer. Needs testing!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1203
diff
changeset
|
49 private List<CrossSectionPoint> points; |
22858e7cca79
Integrated PRF parsing into importer. Needs testing!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1203
diff
changeset
|
50 |
2342
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
51 public static final Comparator<CrossSectionPoint> COL_POS_CMP = |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
52 new Comparator<CrossSectionPoint>() { |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
53 @Override |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
54 public int compare(CrossSectionPoint a, CrossSectionPoint b) { |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
55 double xa = a.getX().doubleValue(); |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
56 double xb = b.getX().doubleValue(); |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
57 double d = xa - xb; |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
58 if (d < -EPSILON) return -1; |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
59 if (d > +EPSILON) return +1; |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
60 int diff = a.getColPos() - b.getColPos(); |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
61 return diff < 0 ? -1 : diff > 0 ? +1 : 0; |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
62 } |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
63 }; |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
64 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
65 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
66 public static final boolean isValid(double x) { |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
67 x = Math.abs(x); |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
68 return x > TOO_SMALL && x < TOO_BIG; |
2380
e237a08acf6e
Create fast cross section lines in the backend now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2378
diff
changeset
|
69 } |
e237a08acf6e
Create fast cross section lines in the backend now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2378
diff
changeset
|
70 |
e237a08acf6e
Create fast cross section lines in the backend now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2378
diff
changeset
|
71 public static final boolean isValid(Point2D p) { |
e237a08acf6e
Create fast cross section lines in the backend now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2378
diff
changeset
|
72 return isValid(p.getX()) && isValid(p.getY()); |
e237a08acf6e
Create fast cross section lines in the backend now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2378
diff
changeset
|
73 } |
2342
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
74 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
75 |
1203
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
76 public CrossSectionLine() { |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
77 } |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
78 |
2860
2f874d14ac68
Use Doubles to store meassure points of profiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2380
diff
changeset
|
79 public CrossSectionLine(CrossSection crossSection, Double km) { |
1204
22858e7cca79
Integrated PRF parsing into importer. Needs testing!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1203
diff
changeset
|
80 this.crossSection = crossSection; |
22858e7cca79
Integrated PRF parsing into importer. Needs testing!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1203
diff
changeset
|
81 this.km = km; |
22858e7cca79
Integrated PRF parsing into importer. Needs testing!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1203
diff
changeset
|
82 } |
22858e7cca79
Integrated PRF parsing into importer. Needs testing!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1203
diff
changeset
|
83 |
1203
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
84 @Id |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
85 @SequenceGenerator( |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
86 name = "SEQUENCE_CROSS_SECTION_LINES_ID_SEQ", |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
87 sequenceName = "CROSS_SECTION_LINES_ID_SEQ", |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
88 allocationSize = 1) |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
89 @GeneratedValue( |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
90 strategy = GenerationType.SEQUENCE, |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
91 generator = "SEQUENCE_CROSS_SECTION_LINES_ID_SEQ") |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
92 @Column(name = "id") |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
93 public Integer getId() { |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
94 return id; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
95 } |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
96 |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
97 public void setId(Integer id) { |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
98 this.id = id; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
99 } |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
100 |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
101 @Column(name = "km") |
2860
2f874d14ac68
Use Doubles to store meassure points of profiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2380
diff
changeset
|
102 public Double getKm() { |
1203
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
103 return km; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
104 } |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
105 |
2860
2f874d14ac68
Use Doubles to store meassure points of profiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2380
diff
changeset
|
106 public void setKm(Double km) { |
1203
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
107 this.km = km; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
108 } |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
109 |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
110 @OneToOne |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
111 @JoinColumn(name = "cross_section_id") |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
112 public CrossSection getCrossSection() { |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
113 return crossSection; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
114 } |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
115 |
6058
939fea2b24a2
in relation to flys1313: fix typo that prevented setting crossSection to c.s.l.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
5992
diff
changeset
|
116 public void setCrossSection(CrossSection crossSection) { |
1203
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
117 this.crossSection = crossSection; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
118 } |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
119 |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
120 @OneToMany |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
121 @JoinColumn(name="cross_section_line_id") |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
122 public List<CrossSectionPoint> getPoints() { |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
123 return points; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
124 } |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
125 |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
126 public void setPoints(List<CrossSectionPoint> points) { |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
127 this.points = points; |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
128 } |
2342
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
129 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
130 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
131 public List<Point2D> fetchCrossSectionLinesPoints() { |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
132 |
3334
2ae732e2c65c
FLYS backend: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2860
diff
changeset
|
133 List<CrossSectionPoint> linePoints = |
2378
c5d83366d0b1
CrossSectionLine: Simplified creation of Point2Ds.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2342
diff
changeset
|
134 new ArrayList<CrossSectionPoint>(getPoints()); |
2342
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
135 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
136 Collections.sort(linePoints, COL_POS_CMP); |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
137 |
2378
c5d83366d0b1
CrossSectionLine: Simplified creation of Point2Ds.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2342
diff
changeset
|
138 List<Point2D> points = new ArrayList<Point2D>(linePoints.size()); |
2342
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
139 for (CrossSectionPoint p: linePoints) { |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
140 double x = p.getX().doubleValue(); |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
141 double y = p.getY().doubleValue(); |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
142 if (isValid(x) && isValid(y)) { |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
143 points.add(new Point2D.Double(x, y)); |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
144 } |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
145 } |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
146 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
147 return points; |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
148 } |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
149 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
150 public double [][] fetchCrossSectionProfile() { |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
151 return fetchCrossSectionProfile(fetchCrossSectionLinesPoints()); |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
152 } |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
153 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
154 public static double [][] fetchCrossSectionProfile(List<Point2D> points) { |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
155 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
156 int P = points.size(); |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
157 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
158 double [] xs = new double[P]; |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
159 double [] ys = new double[P]; |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
160 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
161 if (P > 0) { |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
162 xs[0] = points.get(0).getX(); |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
163 ys[0] = points.get(0).getY(); |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
164 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
165 for (int i = 1; i < P; i++) { |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
166 Point2D p = points.get(i); |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
167 double x = p.getX(); |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
168 double y = p.getY(); |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
169 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
170 if (x <= xs[i-1]) { |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
171 x = xs[i-1] + EPSILON; |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
172 } |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
173 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
174 xs[i] = x; |
3334
2ae732e2c65c
FLYS backend: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2860
diff
changeset
|
175 ys[i] = y; |
2342
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
176 } |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
177 } |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
178 |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
179 return new double [][] { xs, ys }; |
3efc3942b765
CrossSectionLine: Moved some logic from cross section demo app to this model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1204
diff
changeset
|
180 } |
1203
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
181 } |
3c01bef43a98
Querprofile: Added a table to map the points to a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
182 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |