17
17
import org .junit .jupiter .params .provider .CsvSource ;
18
18
import org .locationtech .jts .geom .Coordinate ;
19
19
import org .locationtech .jts .geom .Geometry ;
20
- import org .locationtech .jts .geom .PrecisionModel ;
21
20
import org .locationtech .jts .io .ParseException ;
22
21
import org .locationtech .jts .io .WKBReader ;
23
22
import org .locationtech .jts .operation .linemerge .LineMerger ;
@@ -28,6 +27,8 @@ class LoopLineMergerTest {
28
27
void testMergeTouchingLinestrings () {
29
28
var merger = new LoopLineMerger ()
30
29
.setMinLength (-1 )
30
+ .setStubMinLength (-1 )
31
+ .setTolerance (-1 )
31
32
.setLoopMinLength (-1 );
32
33
33
34
merger .add (newLineString (10 , 10 , 20 , 20 ));
@@ -59,6 +60,8 @@ void testKeepTwoSeparateLinestring() {
59
60
void testDoesNotOvercountAlreadyAddedLines () {
60
61
var merger = new LoopLineMerger ()
61
62
.setMinLength (-1 )
63
+ .setTolerance (-1 )
64
+ .setStubMinLength (-1 )
62
65
.setLoopMinLength (-1 );
63
66
64
67
merger .add (newLineString (10 , 10 , 20 , 20 ));
@@ -74,21 +77,25 @@ void testDoesNotOvercountAlreadyAddedLines() {
74
77
void testSplitLinestringsBeforeMerging () {
75
78
var merger = new LoopLineMerger ()
76
79
.setMinLength (-1 )
77
- .setLoopMinLength (-1 );
80
+ .setLoopMinLength (-1 )
81
+ .setStubMinLength (-1 )
82
+ .setTolerance (-1 );
78
83
79
84
merger .add (newLineString (10 , 10 , 20 , 20 , 30 , 30 ));
80
85
merger .add (newLineString (20 , 20 , 30 , 30 , 40 , 40 ));
81
86
assertEquals (
82
- List .of (newLineString (40 , 40 , 30 , 30 , 20 , 20 , 10 , 10 )),
87
+ List .of (newLineString (10 , 10 , 20 , 20 , 30 , 30 , 40 , 40 )),
83
88
merger .getMergedLineStrings ()
84
89
);
85
90
}
86
91
87
92
@ Test
88
93
void testProgressiveStubRemoval () {
89
94
var merger = new LoopLineMerger ()
90
- .setMinLength (4 )
91
- .setPrecisionModel (new PrecisionModel (-1.0 ));
95
+ .setMinLength (-1 )
96
+ .setStubMinLength (4 )
97
+ .setLoopMinLength (-1 )
98
+ .setTolerance (-1 );
92
99
93
100
merger .add (newLineString (0 , 0 , 5 , 0 )); // stub length 5
94
101
merger .add (newLineString (5 , 0 , 6 , 0 )); // mid piece
@@ -97,7 +104,7 @@ void testProgressiveStubRemoval() {
97
104
merger .add (newLineString (6 , 0 , 6 , 1 )); // stub length 1
98
105
99
106
assertEquals (
100
- List .of (newLineString (8 , 0 , 6 , 0 , 5 , 0 , 0 , 0 )),
107
+ List .of (newLineString (0 , 0 , 5 , 0 , 6 , 0 , 8 , 0 )),
101
108
merger .getMergedLineStrings ()
102
109
);
103
110
}
@@ -106,7 +113,9 @@ void testProgressiveStubRemoval() {
106
113
void testRoundCoordinatesBeforeMerging () {
107
114
var merger = new LoopLineMerger ()
108
115
.setMinLength (-1 )
109
- .setLoopMinLength (-1 );
116
+ .setLoopMinLength (-1 )
117
+ .setStubMinLength (-1 )
118
+ .setTolerance (-1 );
110
119
111
120
merger .add (newLineString (10.00043983098 , 10 , 20 , 20 ));
112
121
merger .add (newLineString (20 , 20 , 30 , 30 ));
@@ -120,11 +129,10 @@ void testRoundCoordinatesBeforeMerging() {
120
129
void testRemoveSmallLoops () {
121
130
var merger = new LoopLineMerger ()
122
131
.setMinLength (-1 )
132
+ .setStubMinLength (-1 )
133
+ .setTolerance (-1 )
123
134
.setLoopMinLength (100 );
124
135
125
- /*
126
- * 10 20 30 40 10 o--o--o \ | \| 20 o--o
127
- */
128
136
merger .add (newLineString (
129
137
10 , 10 ,
130
138
20 , 10 ,
@@ -139,10 +147,10 @@ void testRemoveSmallLoops() {
139
147
assertEquals (
140
148
List .of (
141
149
newLineString (
142
- 40 , 20 ,
143
- 30 , 20 ,
150
+ 10 , 10 ,
144
151
20 , 10 ,
145
- 10 , 10
152
+ 30 , 20 ,
153
+ 40 , 20
146
154
)
147
155
),
148
156
merger .getMergedLineStrings ()
@@ -151,13 +159,24 @@ void testRemoveSmallLoops() {
151
159
152
160
@ Test
153
161
void testRemoveSelfClosingLoops () {
162
+ // Note that self-closing loops are considered stubs.
163
+ // They are removed by stubMinLength, not loopMinLength...
154
164
var merger = new LoopLineMerger ()
155
165
.setMinLength (-1 )
156
- .setLoopMinLength (10 );
166
+ .setTolerance (-1 )
167
+ .setStubMinLength (5 )
168
+ .setLoopMinLength (-1 );
157
169
158
- merger .add (newLineString (1 , 0 , 1 , 1 , 1 , 2 , 0 , 2 , 0 , 1 , 1 , 1 , 2 , 1 ));
170
+ merger .add (newLineString (
171
+ 1 , -10 ,
172
+ 1 , 1 ,
173
+ 1 , 2 ,
174
+ 0 , 2 ,
175
+ 0 , 1 ,
176
+ 1 , 1 ,
177
+ 10 , 1 ));
159
178
assertEquals (
160
- List .of (newLineString (1 , 0 , 1 , 1 , 2 , 1 )),
179
+ List .of (newLineString (1 , - 10 , 1 , 1 , 10 , 1 )),
161
180
merger .getMergedLineStrings ()
162
181
);
163
182
}
@@ -168,9 +187,6 @@ void testDoNotRemoveLargeLoops() {
168
187
.setMinLength (-1 )
169
188
.setLoopMinLength (0.001 );
170
189
171
- /*
172
- * 10 20 30 40 10 o--o--o \ | \| 20 o--o
173
- */
174
190
merger .add (newLineString (
175
191
10 , 10 ,
176
192
20 , 10 ,
@@ -207,9 +223,11 @@ void testDoNotRemoveLargeLoops() {
207
223
}
208
224
209
225
@ Test
210
- void testRemoveShortStubs () {
226
+ void testRemoveShortLine () {
211
227
var merger = new LoopLineMerger ()
212
228
.setMinLength (10 )
229
+ .setStubMinLength (-1 )
230
+ .setTolerance (-1 )
213
231
.setLoopMinLength (-1 );
214
232
215
233
merger .add (newLineString (10 , 10 , 11 , 11 ));
@@ -224,20 +242,19 @@ void testRemoveShortStubs() {
224
242
@ Test
225
243
void testRemovesShortStubsTheNonStubsThatAreTooShort () {
226
244
var merger = new LoopLineMerger ()
227
- .setMinLength (15 )
228
- .setLoopMinLength (-1 );
245
+ .setMinLength (0 )
246
+ .setLoopMinLength (-1 )
247
+ .setStubMinLength (15 )
248
+ .setTolerance (-1 );
229
249
230
- /*
231
- * 0 20 30 50 0 o----o--o----o | | 10 o o
232
- */
233
250
merger .add (newLineString (0 , 0 , 20 , 0 ));
234
251
merger .add (newLineString (20 , 0 , 30 , 0 ));
235
252
merger .add (newLineString (30 , 0 , 50 , 0 ));
236
253
merger .add (newLineString (20 , 0 , 20 , 10 ));
237
254
merger .add (newLineString (30 , 0 , 30 , 10 ));
238
255
239
256
assertEquals (
240
- List .of (newLineString (50 , 0 , 30 , 0 , 20 , 0 , 0 , 0 )),
257
+ List .of (newLineString (0 , 0 , 20 , 0 , 30 , 0 , 50 , 0 )),
241
258
merger .getMergedLineStrings ()
242
259
);
243
260
}
0 commit comments