You can only call getMergedLineStrings once. If you need to merge
repeatedly, you will have to create a new LineMerger each time.
I'll add this caveat to the javadoc.
Jeff Adams wrote:
I am trying to join successive LineStrings until I find a gap. So the
way I am doing it is something like this:
while (merger.getMergedLineStrings().count() == 1)
merger.add(...);
}
The problem is, getMergedLineStrings only calculates the merged line
once. After that, no matter how many more I add, it seems to always
returns the same value.
What I don't know is if that is correct behavior or not. I am
actually using NTS, so there are a couple possibilities:
1) It's correct
2) It's a bug in the NTS port.
3) It's a JTS bug that has been faithfully ported to NTS.
Here is a C# test case, which you should be able to port to Java by
changing capitalization on the methods and changing the
Assert.IsBlah()s to assertIsBlah()s. I apologize but I do not have a
java development environment here so I cannot port it myself.
[Test] public void TestLineMerger()
{
Coordinate coord1 = new Coordinate(0, 0);
Coordinate coord2 = new Coordinate(0, 100);
Coordinate coord3 = new Coordinate(0, 200);
Coordinate coord4 = new Coordinate(0, 300);
LineString line1 = new LineString(new ICoordinate[] {
coord1, coord2 });
LineString line2 = new LineString(new ICoordinate[] {
coord2, coord3 });
LineString line3 = new LineString(new ICoordinate[] {
coord3, coord4 });
LineMerger merger = new LineMerger();
merger.Add(line1);
IList mergedLines = merger.GetMergedLineStrings();
Assert.IsNotNull(mergedLines, "Shouldn't get null when
merging 1 line.");
Assert.AreEqual(1, mergedLines.Count, "Should get 1 merged
line from 1 input.");
ILineString mergedLine = (ILineString)mergedLines[0];
Assert.Greater(mergedLine.Length, 99.9, "Merged line was
too short.");
Assert.Less(mergedLine.Length, 100.1, "Merged line was too
long.");
merger.Add(line2);
mergedLines = merger.GetMergedLineStrings();
Assert.IsNotNull(mergedLines, "Shouldn't get null when
merging 2 line.");
Assert.AreEqual(1, mergedLines.Count, "Should get 1 merged
line from 2 inputs.");
mergedLine = (ILineString)mergedLines[0];
// Fails here because the "merged" linestring is exactly
the same as the first time
// we called it.
Assert.Greater(mergedLine.Length, 199.9, "Merged line was
too short.");
Assert.Less(mergedLine.Length, 200.1, "Merged line was too
long.");
merger.Add(line3);
mergedLines = merger.GetMergedLineStrings();
Assert.IsNotNull(mergedLines, "Shouldn't get null when
merging 3 line.");
Assert.AreEqual(1, mergedLines.Count, "Should get 1 merged
line from 3 inputs.");
mergedLine = (ILineString)mergedLines[0];
Assert.Greater(mergedLine.Length, 299.9, "Merged line was
too short.");
Assert.Less(mergedLine.Length, 300.1, "Merged line was too
long.");
}
------------------------------------------------------------------------
_______________________________________________
jts-devel mailing list
[email protected]
http://lists.refractions.net/mailman/listinfo/jts-devel
--
Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022
_______________________________________________
jts-devel mailing list
[email protected]
http://lists.refractions.net/mailman/listinfo/jts-devel