Subversion Repositories hibernate-spatial

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
306 maesenka 1
package org.hibernatespatial.jts.linearref;
2
 
3
import com.vividsolutions.jts.geom.Coordinate;
4
import com.vividsolutions.jts.geom.GeometryFactory;
5
import com.vividsolutions.jts.geom.LineString;
6
import com.vividsolutions.jts.geom.Point;
7
import org.hibernatespatial.jts.geom.MeasuredCoordinate;
8
import org.hibernatespatial.jts.geom.MeasuredCoordinateSequence;
9
import org.hibernatespatial.jts.geom.MeasuredCoordinateSequenceFactory;
10
import org.junit.Before;
11
import org.junit.Test;
12
 
13
import static junit.framework.Assert.assertNull;
14
import static junit.framework.Assert.fail;
15
import static org.junit.Assert.assertEquals;
16
import static org.junit.Assert.assertTrue;
17
 
18
/**
19
 * @author Karel Maesen, Geovise BVBA
20
 *         creation-date: Nov 29, 2010
21
 */
22
public class TestMeasuredLineString {
23
 
24
    MeasuredCoordinateSequenceFactory coordinateFactory = new MeasuredCoordinateSequenceFactory();
25
    GeometryFactory geometryFactory = new GeometryFactory(coordinateFactory);
26
    MeasuredLineString mli;
27
    LineString[] testLineStrings;
28
 
29
    @Before
30
    public void setUp() {
31
 
32
        MeasuredCoordinateSequence seq0 = coordinateFactory.create(4, 4);
33
        seq0.setMeasuredCoordinate(0, MeasuredCoordinate.to2DM(1, 2, 0));
34
        seq0.setMeasuredCoordinate(1, MeasuredCoordinate.to2DM(2, 3, 1));
35
        seq0.setMeasuredCoordinate(2, MeasuredCoordinate.to2DM(3, 4, 2));
36
        seq0.setMeasuredCoordinate(3, MeasuredCoordinate.to2DM(4, 5, 3));
37
 
38
        //monotonic increasing
39
        MeasuredCoordinateSequence seq1 = coordinateFactory.create(4, 4);
40
        seq1.setMeasuredCoordinate(0, MeasuredCoordinate.to2DM(0, 0, 0));
41
        seq1.setMeasuredCoordinate(1, MeasuredCoordinate.to2DM(1, 0, 1));
42
        seq1.setMeasuredCoordinate(2, MeasuredCoordinate.to2DM(2, 0, 2));
43
        seq1.setMeasuredCoordinate(3, MeasuredCoordinate.to2DM(3, 0, 3));
44
 
45
        //monotonic decreasing
46
        MeasuredCoordinateSequence seq2 = coordinateFactory.create(4, 4);
47
        seq2.setMeasuredCoordinate(0, MeasuredCoordinate.to2DM(3, 0, 3));
48
        seq2.setMeasuredCoordinate(1, MeasuredCoordinate.to2DM(2, 0, 2));
49
        seq2.setMeasuredCoordinate(2, MeasuredCoordinate.to2DM(1, 0, 1));
50
        seq2.setMeasuredCoordinate(3, MeasuredCoordinate.to2DM(0, 0, 0));
51
 
52
        //non-monotonic
53
        MeasuredCoordinateSequence seq3 = coordinateFactory.create(4, 4);
54
        seq3.setMeasuredCoordinate(0, MeasuredCoordinate.to2DM(1, 0, 0));
55
        seq3.setMeasuredCoordinate(1, MeasuredCoordinate.to2DM(2, 0, 5));
56
        seq3.setMeasuredCoordinate(2, MeasuredCoordinate.to2DM(3, 0, 2));
57
        seq3.setMeasuredCoordinate(3, MeasuredCoordinate.to2DM(8, 0, 7));
58
 
59
        //non-measured
60
        MeasuredCoordinateSequence seq4 = coordinateFactory.create(4, 4);
61
        seq4.setMeasuredCoordinate(0, MeasuredCoordinate.to2D(1, 0));
62
        seq4.setMeasuredCoordinate(1, MeasuredCoordinate.to2D(2, 0));
63
        seq4.setMeasuredCoordinate(2, MeasuredCoordinate.to2D(3, 0));
64
        seq4.setMeasuredCoordinate(3, MeasuredCoordinate.to2D(8, 0));
65
 
66
        //non-strict monotonic increasing
67
        MeasuredCoordinateSequence seq5 = coordinateFactory.create(4, 4);
68
        seq5.setMeasuredCoordinate(0, MeasuredCoordinate.to2DM(0, 0, 0));
69
        seq5.setMeasuredCoordinate(1, MeasuredCoordinate.to2DM(1, 0, 1));
70
        seq5.setMeasuredCoordinate(2, MeasuredCoordinate.to2DM(2, 0, 1));
71
        seq5.setMeasuredCoordinate(3, MeasuredCoordinate.to2DM(3, 0, 2));
72
 
73
        //monotonic decreasing
74
        MeasuredCoordinateSequence seq6 = coordinateFactory.create(4, 4);
75
        seq6.setMeasuredCoordinate(0, MeasuredCoordinate.to2DM(3, 0, 2));
76
        seq6.setMeasuredCoordinate(1, MeasuredCoordinate.to2DM(2, 0, 1));
77
        seq6.setMeasuredCoordinate(2, MeasuredCoordinate.to2DM(1, 0, 1));
78
        seq6.setMeasuredCoordinate(3, MeasuredCoordinate.to2DM(0, 0, 0));
79
 
80
 
81
        testLineStrings = new LineString[]{
82
                geometryFactory.createLineString(seq0),
83
                geometryFactory.createLineString(seq1),
84
                geometryFactory.createLineString(seq2),
85
                geometryFactory.createLineString(seq3),
86
                geometryFactory.createLineString(seq4),
87
                geometryFactory.createLineString(seq5),
88
                geometryFactory.createLineString(seq6)
89
        };
90
 
91
    }
92
 
93
    @Test
94
    public void test_constructor_on_null() {
95
        try {
96
            mli = new MeasuredLineString(null);
97
            fail();
98
        } catch (IllegalArgumentException e) {
99
            //OK
100
        }
101
    }
102
 
103
    @Test
104
    public void test_get_measure_at_coordinate() {
105
 
106
        mli = new MeasuredLineString(testLineStrings[1]);
107
 
108
        double received = mli.getMeasureAtCoordinate(new Coordinate(1.5d, 0d), 0.01d);
109
        assertEquals(1.5d, received, Math.ulp(5d));
110
 
111
        received = mli.getMeasureAtCoordinate(new Coordinate(0.0d, 0d), 0.01d);
112
        assertEquals(0d, received, Math.ulp(5d));
113
 
114
        received = mli.getMeasureAtCoordinate(new Coordinate(2.0d, 0d), 0.01d);
115
        assertEquals(2d, received, Math.ulp(5d));
116
 
117
 
118
        received = mli.getMeasureAtCoordinate(new Coordinate(3.009d, 0d), 0.01d);
119
        assertEquals(3d, received, Math.ulp(5d));
120
 
121
        received = mli.getMeasureAtCoordinate(new Coordinate(5.0d, 0d), 0.01d);
122
        assertTrue(Double.isNaN(received));
123
 
124
    }
125
 
126
    @Test
127
    public void test_get_coordinate_at_measure_monotone_increasing() {
128
 
129
        mli = new MeasuredLineString(testLineStrings[1]);
130
 
131
        assertNull(mli.getCoordinateAtMeasure(-1d));
132
        assertNull(mli.getCoordinateAtMeasure(3.2d));
133
 
134
        assertEquals(MeasuredCoordinate.to2DM(0, 0, 0), mli.getCoordinateAtMeasure(0));
135
 
136
        assertEquals(MeasuredCoordinate.to2DM(0.8, 0, 0.8), mli.getCoordinateAtMeasure(0.8));
137
        assertEquals(MeasuredCoordinate.to2DM(2.1, 0.0, 2.1), mli.getCoordinateAtMeasure(2.1));
138
        assertEquals(MeasuredCoordinate.to2DM(3.0, 0, 3.0), mli.getCoordinateAtMeasure(3));
139
 
140
    }
141
 
142
    @Test
143
    public void test_get_coordinate_at_measure_non_strict_monotone_increasing() {
144
 
145
        mli = new MeasuredLineString(testLineStrings[5]);
146
        assertNull(mli.getCoordinateAtMeasure(-1d));
147
        assertNull(mli.getCoordinateAtMeasure(3.2d));
148
        assertEquals(MeasuredCoordinate.to2DM(0, 0, 0), mli.getCoordinateAtMeasure(0));
149
        assertEquals(MeasuredCoordinate.to2DM(1.0, 0, 1.0), mli.getCoordinateAtMeasure(1.0));
150
 
151
    }
152
 
153
    @Test
154
    public void test_get_coordinate_at_measure_monotone_decreasing() {
155
 
156
        mli = new MeasuredLineString(testLineStrings[2]);
157
 
158
        assertNull(mli.getCoordinateAtMeasure(-1d));
159
        assertNull(mli.getCoordinateAtMeasure(3.2d));
160
 
161
        assertEquals(MeasuredCoordinate.to2DM(0, 0, 0), mli.getCoordinateAtMeasure(0));
162
 
163
        assertEquals(MeasuredCoordinate.to2DM(0.8, 0, 0.8), mli.getCoordinateAtMeasure(0.8));
164
        assertEquals(MeasuredCoordinate.to2DM(2.1, 0.0, 2.1), mli.getCoordinateAtMeasure(2.1));
165
        assertEquals(MeasuredCoordinate.to2DM(3.0, 0, 3.0), mli.getCoordinateAtMeasure(3));
166
 
167
    }
168
 
169
    @Test
170
    public void test_get_coordinate_at_measure_non_monotone() {
171
 
172
        mli = new MeasuredLineString(testLineStrings[3]);
173
 
174
        assertNull(mli.getCoordinateAtMeasure(-1d));
175
        assertNull(mli.getCoordinateAtMeasure(9d));
176
 
177
        assertEquals(MeasuredCoordinate.to2DM(1, 0, 0), mli.getCoordinateAtMeasure(0));
178
 
179
        assertEquals(MeasuredCoordinate.to2DM(1.5, 0, 2.5), mli.getCoordinateAtMeasure(2.5));
180
        assertEquals(MeasuredCoordinate.to2DM(2.0, 0.0, 5.0d), mli.getCoordinateAtMeasure(5.0d));
181
        assertEquals(MeasuredCoordinate.to2DM(7.0, 0, 6.0), mli.getCoordinateAtMeasure(6));
182
 
183
    }
184
 
185
    @Test
186
    public void test_min_measure() {
187
        for (int i = 0; i < 4; i++) {
188
            mli = new MeasuredLineString(testLineStrings[i]);
189
            assertEquals(0.0d, mli.getMinMeasure(), Math.ulp(1.0d));
190
        }
191
        mli = new MeasuredLineString(testLineStrings[4]);
192
        assertTrue(Double.isNaN(mli.getMinMeasure()));
193
 
194
    }
195
 
196
    @Test
197
    public void test_max_measure() {
198
        for (int i = 0; i < 3; i++) {
199
            mli = new MeasuredLineString(testLineStrings[i]);
200
            assertEquals(3.0d, mli.getMaxMeasure(), Math.ulp(1.0d));
201
        }
202
 
203
        mli = new MeasuredLineString(testLineStrings[3]);
204
        assertEquals(7.0d, mli.getMaxMeasure(), Math.ulp(1.0d));
205
 
206
        mli = new MeasuredLineString(testLineStrings[4]);
207
        assertTrue(Double.isNaN(mli.getMaxMeasure()));
208
 
209
    }
210
 
211
    @Test
212
    public void test_get_coordinates_between_monotone_increasing() {
213
 
214
        mli = new MeasuredLineString(testLineStrings[1]);
215
        MeasuredCoordinateSequence[] sequences = mli.getCoordinatesBetween(1.5d, 2.5d);
216
        assertEquals(1, sequences.length);
217
        assertEquals(3, sequences[0].size());
218
        assertEquals(MeasuredCoordinate.to2DM(1.5d, 0.0d, 1.5d), sequences[0].getMeasuredCoordinate(0));
219
        assertEquals(MeasuredCoordinate.to2DM(2.0d, 0.0d, 2.0d), sequences[0].getMeasuredCoordinate(1));
220
        assertEquals(MeasuredCoordinate.to2DM(2.5d, 0.0d, 2.5d), sequences[0].getMeasuredCoordinate(2));
221
 
222
        sequences = mli.getCoordinatesBetween(0.25d, 0.75d);
223
        assertEquals(1, sequences.length);
224
        assertEquals(2, sequences[0].size());
225
        assertEquals(MeasuredCoordinate.to2DM(0.25d, 0.0d, 0.25d), sequences[0].getMeasuredCoordinate(0));
226
        assertEquals(MeasuredCoordinate.to2DM(0.75d, 0.0d, 0.75d), sequences[0].getMeasuredCoordinate(1));
227
 
228
        sequences = mli.getCoordinatesBetween(0d, 1.5d);
229
        assertEquals(1, sequences.length);
230
        assertEquals(3, sequences[0].size());
231
        assertEquals(MeasuredCoordinate.to2DM(0.0d, 0.0d, 0.0d), sequences[0].getMeasuredCoordinate(0));
232
        assertEquals(MeasuredCoordinate.to2DM(1.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(1));
233
        assertEquals(MeasuredCoordinate.to2DM(1.5d, 0.0d, 1.5d), sequences[0].getMeasuredCoordinate(2));
234
 
235
        sequences = mli.getCoordinatesBetween(1.5d, 0d);
236
        assertEquals(1, sequences.length);
237
        assertEquals(3, sequences[0].size());
238
        assertEquals(MeasuredCoordinate.to2DM(0.0d, 0.0d, 0.0d), sequences[0].getMeasuredCoordinate(0));
239
        assertEquals(MeasuredCoordinate.to2DM(1.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(1));
240
        assertEquals(MeasuredCoordinate.to2DM(1.5d, 0.0d, 1.5d), sequences[0].getMeasuredCoordinate(2));
241
 
242
        sequences = mli.getCoordinatesBetween(-1d, 1.5d);
243
        assertEquals(1, sequences.length);
244
        assertEquals(3, sequences[0].size());
245
        assertEquals(MeasuredCoordinate.to2DM(0.0d, 0.0d, 0.0d), sequences[0].getMeasuredCoordinate(0));
246
        assertEquals(MeasuredCoordinate.to2DM(1.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(1));
247
        assertEquals(MeasuredCoordinate.to2DM(1.5d, 0.0d, 1.5d), sequences[0].getMeasuredCoordinate(2));
248
 
249
        sequences = mli.getCoordinatesBetween(-1d, -0.5d);
250
        assertEquals(1, sequences.length);
251
        assertEquals(0, sequences[0].size());
252
 
253
        sequences = mli.getCoordinatesBetween(0.5d, 5d);
254
        assertEquals(1, sequences.length);
255
        assertEquals(4, sequences[0].size());
256
        assertEquals(MeasuredCoordinate.to2DM(0.5d, 0.0d, 0.5d), sequences[0].getMeasuredCoordinate(0));
257
        assertEquals(MeasuredCoordinate.to2DM(1.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(1));
258
        assertEquals(MeasuredCoordinate.to2DM(2.0d, 0.0d, 2.0d), sequences[0].getMeasuredCoordinate(2));
259
        assertEquals(MeasuredCoordinate.to2DM(3.0d, 0.0d, 3.0d), sequences[0].getMeasuredCoordinate(3));
260
 
261
        sequences = mli.getCoordinatesBetween(2.5d, 2.75d);
262
        assertEquals(1, sequences.length);
263
        assertEquals(2, sequences[0].size());
264
        assertEquals(MeasuredCoordinate.to2DM(2.5d, 0.0d, 2.5d), sequences[0].getMeasuredCoordinate(0));
265
        assertEquals(MeasuredCoordinate.to2DM(2.75d, 0.0d, 2.75d), sequences[0].getMeasuredCoordinate(1));
266
 
267
        sequences = mli.getCoordinatesBetween(0.0d, 0.0d);
268
        assertEquals(1, sequences.length);
269
        assertEquals(0, sequences[0].size());
270
 
271
 
272
        sequences = mli.getCoordinatesBetween(0.0d, 1.0d);
273
        assertEquals(1, sequences.length);
274
        assertEquals(2, sequences[0].size());
275
        assertEquals(MeasuredCoordinate.to2DM(0.0d, 0.0d, 0.0d), sequences[0].getMeasuredCoordinate(0));
276
        assertEquals(MeasuredCoordinate.to2DM(1.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(1));
277
 
278
 
279
    }
280
 
281
    @Test
282
    public void test_get_coordinates_between_monotone_decreasing() {
283
        mli = new MeasuredLineString(testLineStrings[2]);
284
        MeasuredCoordinateSequence[] sequences = mli.getCoordinatesBetween(1.5d, 2.5d);
285
        assertEquals(1, sequences.length);
286
        assertEquals(3, sequences[0].size());
287
        assertEquals(MeasuredCoordinate.to2DM(2.5d, 0.0d, 2.5d), sequences[0].getMeasuredCoordinate(0));
288
        assertEquals(MeasuredCoordinate.to2DM(2.0d, 0.0d, 2.0d), sequences[0].getMeasuredCoordinate(1));
289
        assertEquals(MeasuredCoordinate.to2DM(1.5d, 0.0d, 1.5d), sequences[0].getMeasuredCoordinate(2));
290
 
291
        sequences = mli.getCoordinatesBetween(0d, 1.5d);
292
        assertEquals(1, sequences.length);
293
        assertEquals(3, sequences[0].size());
294
        assertEquals(MeasuredCoordinate.to2DM(1.5d, 0.0d, 1.5d), sequences[0].getMeasuredCoordinate(0));
295
        assertEquals(MeasuredCoordinate.to2DM(1.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(1));
296
        assertEquals(MeasuredCoordinate.to2DM(0.0d, 0.0d, 0.0d), sequences[0].getMeasuredCoordinate(2));
297
 
298
        sequences = mli.getCoordinatesBetween(1.5d, 0d);
299
        assertEquals(1, sequences.length);
300
        assertEquals(3, sequences[0].size());
301
        assertEquals(MeasuredCoordinate.to2DM(1.5d, 0.0d, 1.5d), sequences[0].getMeasuredCoordinate(0));
302
        assertEquals(MeasuredCoordinate.to2DM(1.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(1));
303
        assertEquals(MeasuredCoordinate.to2DM(0.0d, 0.0d, 0.0d), sequences[0].getMeasuredCoordinate(2));
304
 
305
        sequences = mli.getCoordinatesBetween(-1d, 1.5d);
306
        assertEquals(1, sequences.length);
307
        assertEquals(3, sequences[0].size());
308
        assertEquals(MeasuredCoordinate.to2DM(1.5d, 0.0d, 1.5d), sequences[0].getMeasuredCoordinate(0));
309
        assertEquals(MeasuredCoordinate.to2DM(1.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(1));
310
        assertEquals(MeasuredCoordinate.to2DM(0.0d, 0.0d, 0.0d), sequences[0].getMeasuredCoordinate(2));
311
 
312
        sequences = mli.getCoordinatesBetween(-1d, -0.5d);
313
        assertEquals(1, sequences.length);
314
        assertEquals(0, sequences[0].size());
315
 
316
        sequences = mli.getCoordinatesBetween(0.5d, 5d);
317
        assertEquals(1, sequences.length);
318
        assertEquals(4, sequences[0].size());
319
        assertEquals(MeasuredCoordinate.to2DM(3.0d, 0.0d, 3.0d), sequences[0].getMeasuredCoordinate(0));
320
        assertEquals(MeasuredCoordinate.to2DM(2.0d, 0.0d, 2.0d), sequences[0].getMeasuredCoordinate(1));
321
        assertEquals(MeasuredCoordinate.to2DM(1.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(2));
322
        assertEquals(MeasuredCoordinate.to2DM(0.5d, 0.0d, 0.5d), sequences[0].getMeasuredCoordinate(3));
323
 
324
        sequences = mli.getCoordinatesBetween(0.0d, 0.0d);
325
        assertEquals(1, sequences.length);
326
        assertEquals(0, sequences[0].size());
327
 
328
 
329
        sequences = mli.getCoordinatesBetween(0.0d, 1.0d);
330
        assertEquals(1, sequences.length);
331
        assertEquals(2, sequences[0].size());
332
        assertEquals(MeasuredCoordinate.to2DM(1.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(0));
333
        assertEquals(MeasuredCoordinate.to2DM(0.0d, 0.0d, 0.0d), sequences[0].getMeasuredCoordinate(1));
334
 
335
 
336
    }
337
 
338
    @Test
339
    public void test_get_coordinates_between_non_strict_monotone_increasing() {
340
        mli = new MeasuredLineString(testLineStrings[5]);
341
 
342
        MeasuredCoordinateSequence[] sequences = mli.getCoordinatesBetween(0.5d, 1.5d);
343
        assertEquals(1, sequences.length);
344
        assertEquals(4, sequences[0].size());
345
        assertEquals(MeasuredCoordinate.to2DM(0.5d, 0.0d, 0.5d), sequences[0].getMeasuredCoordinate(0));
346
        assertEquals(MeasuredCoordinate.to2DM(1.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(1));
347
        assertEquals(MeasuredCoordinate.to2DM(2.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(2));
348
        assertEquals(MeasuredCoordinate.to2DM(2.5d, 0.0d, 1.5d), sequences[0].getMeasuredCoordinate(3));
349
 
350
        sequences = mli.getCoordinatesBetween(0.5d, 1.0d);
351
        assertEquals(1, sequences.length);
352
        assertEquals(3, sequences[0].size());
353
        assertEquals(MeasuredCoordinate.to2DM(0.5d, 0.0d, 0.5d), sequences[0].getMeasuredCoordinate(0));
354
        assertEquals(MeasuredCoordinate.to2DM(1.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(1));
355
        assertEquals(MeasuredCoordinate.to2DM(2.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(2));
356
 
357
 
358
        sequences = mli.getCoordinatesBetween(1.5d, 0.5d);
359
        assertEquals(1, sequences.length);
360
        assertEquals(4, sequences[0].size());
361
        assertEquals(MeasuredCoordinate.to2DM(0.5d, 0.0d, 0.5d), sequences[0].getMeasuredCoordinate(0));
362
        assertEquals(MeasuredCoordinate.to2DM(1.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(1));
363
        assertEquals(MeasuredCoordinate.to2DM(2.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(2));
364
        assertEquals(MeasuredCoordinate.to2DM(2.5d, 0.0d, 1.5d), sequences[0].getMeasuredCoordinate(3));
365
    }
366
 
367
    @Test
368
    public void test_get_coordinates_between_non_strict_monotone_decreasing() {
369
        mli = new MeasuredLineString(testLineStrings[6]);
370
 
371
        MeasuredCoordinateSequence[] sequences = mli.getCoordinatesBetween(0.5d, 1.5d);
372
        assertEquals(1, sequences.length);
373
        assertEquals(4, sequences[0].size());
374
        assertEquals(MeasuredCoordinate.to2DM(2.5d, 0.0d, 1.5d), sequences[0].getMeasuredCoordinate(0));
375
        assertEquals(MeasuredCoordinate.to2DM(2.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(1));
376
        assertEquals(MeasuredCoordinate.to2DM(1.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(2));
377
        assertEquals(MeasuredCoordinate.to2DM(0.5d, 0.0d, 0.5d), sequences[0].getMeasuredCoordinate(3));
378
 
379
        sequences = mli.getCoordinatesBetween(0.5d, 1.0d);
380
        assertEquals(1, sequences.length);
381
        assertEquals(3, sequences[0].size());
382
        assertEquals(MeasuredCoordinate.to2DM(2.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(0));
383
        assertEquals(MeasuredCoordinate.to2DM(1.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(1));
384
        assertEquals(MeasuredCoordinate.to2DM(0.5d, 0.0d, 0.5d), sequences[0].getMeasuredCoordinate(2));
385
 
386
 
387
        sequences = mli.getCoordinatesBetween(1.5d, 0.5d);
388
        assertEquals(1, sequences.length);
389
        assertEquals(4, sequences[0].size());
390
        assertEquals(MeasuredCoordinate.to2DM(2.5d, 0.0d, 1.5d), sequences[0].getMeasuredCoordinate(0));
391
        assertEquals(MeasuredCoordinate.to2DM(2.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(1));
392
        assertEquals(MeasuredCoordinate.to2DM(1.0d, 0.0d, 1.0d), sequences[0].getMeasuredCoordinate(2));
393
        assertEquals(MeasuredCoordinate.to2DM(0.5d, 0.0d, 0.5d), sequences[0].getMeasuredCoordinate(3));
394
    }
395
 
396
    @Test
397
    public void test_get_coordinates_between_non_monotone() {
398
        mli = new MeasuredLineString(testLineStrings[3]);
399
        try {
400
            MeasuredCoordinateSequence[] sequences = mli.getCoordinatesBetween(1.5d, 2.5d);
401
            fail();
402
        } catch(IllegalStateException e){
403
            //OK
404
        }
405
    }
406
 
407
    @Test
408
    public void test_locate_along(){
409
        mli = new MeasuredLineString(testLineStrings[1]);
410
        Point received = (Point)mli.locateAlong(0.0d);
411
        MeasuredCoordinateSequence mseq = (MeasuredCoordinateSequence)received.getCoordinateSequence();
412
        assertEquals(MeasuredCoordinate.to2DM(0,0,0), mseq.getMeasuredCoordinate(0));
413
 
414
        received = (Point)mli.locateAlong(0.5d);
415
        mseq = (MeasuredCoordinateSequence)received.getCoordinateSequence();
416
        assertEquals(MeasuredCoordinate.to2DM(0.5,0,0.5), mseq.getMeasuredCoordinate(0));
417
 
418
        received = (Point)mli.locateAlong(2.5d);
419
        mseq = (MeasuredCoordinateSequence)received.getCoordinateSequence();
420
        assertEquals(MeasuredCoordinate.to2DM(2.5,0,2.5), mseq.getMeasuredCoordinate(0));
421
 
422
        received = (Point)mli.locateAlong(3.5d);
423
        assertTrue(received.isEmpty());
424
 
425
    }
426
 
427
 
428
}