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

Reply via email to