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