MultiPolygon.Difference(MultiPolygon): found null Directed Edge

404 views
Skip to first unread message

Jeremy

unread,
Jan 7, 2013, 6:07:37 PM1/7/13
to nettopol...@googlegroups.com
I'm trying to take a MP (operateOn) and trying to "subtract" MP (toBeRemoved) from it.  They may or may not intersect.  Every time I try it I hit "found null Directed Edge" in GeometriesGraph.EdgeRing.ComputePoints.  I'm not sure why.

private static IGeometry RemoveGeometry(IGeometry operateOn, IGeometry toBeRemoved)
        {
            return operateOn.Difference(toBeRemoved);
        }



>    0x18 in NetTopologySuite.GeometriesGraph.EdgeRing.ComputePoints at c:\Users\jkolb\Downloads\NTS-v1.12.1-SRC\NetTopologySuite\GeometriesGraph\EdgeRing.cs:207    C#
     0x43 in NetTopologySuite.GeometriesGraph.EdgeRing..ctor at c:\Users\jkolb\Downloads\NTS-v1.12.1-SRC\NetTopologySuite\GeometriesGraph\EdgeRing.cs:43    C#
     0x3 in NetTopologySuite.Operation.Overlay.MaximalEdgeRing..ctor at c:\Users\jkolb\Downloads\NTS-v1.12.1-SRC\NetTopologySuite\Operation\Overlay\MaximalEdgeRing.cs:26    C#
     0x3F in NetTopologySuite.Operation.Overlay.PolygonBuilder.BuildMaximalEdgeRings at c:\Users\jkolb\Downloads\NTS-v1.12.1-SRC\NetTopologySuite\Operation\Overlay\PolygonBuilder.cs:87    C#
     0x8 in NetTopologySuite.Operation.Overlay.PolygonBuilder.Add at c:\Users\jkolb\Downloads\NTS-v1.12.1-SRC\NetTopologySuite\Operation\Overlay\PolygonBuilder.cs:52    C#
     0xD in NetTopologySuite.Operation.Overlay.PolygonBuilder.Add at c:\Users\jkolb\Downloads\NTS-v1.12.1-SRC\NetTopologySuite\Operation\Overlay\PolygonBuilder.cs:39    C#
     0xEA in NetTopologySuite.Operation.Overlay.OverlayOp.ComputeOverlay at c:\Users\jkolb\Downloads\NTS-v1.12.1-SRC\NetTopologySuite\Operation\Overlay\OverlayOp.cs:172    C#
     0x2 in NetTopologySuite.Operation.Overlay.OverlayOp.GetResultGeometry at c:\Users\jkolb\Downloads\NTS-v1.12.1-SRC\NetTopologySuite\Operation\Overlay\OverlayOp.cs:110    C#
     0xA in NetTopologySuite.Operation.Overlay.OverlayOp.Overlay at c:\Users\jkolb\Downloads\NTS-v1.12.1-SRC\NetTopologySuite\Operation\Overlay\OverlayOp.cs:42    C#
     0x17 in NetTopologySuite.Operation.Overlay.Snap.SnapIfNeededOverlayOp.GetResultGeometry at c:\Users\jkolb\Downloads\NTS-v1.12.1-SRC\NetTopologySuite\Operation\Overlay\Snap\SnapIfNeededOverlayOp.cs:59    C#
     0xA in NetTopologySuite.Operation.Overlay.Snap.SnapIfNeededOverlayOp.Overlay at c:\Users\jkolb\Downloads\NTS-v1.12.1-SRC\NetTopologySuite\Operation\Overlay\Snap\SnapIfNeededOverlayOp.cs:21    C#
     0x3D in NetTopologySuite.Geometries.Geometry.Difference at c:\Users\jkolb\Downloads\NTS-v1.12.1-SRC\NetTopologySuite\Geometries\Geometry.cs:1559    C#

FObermaier

unread,
Jan 9, 2013, 8:13:03 AM1/9/13
to nettopol...@googlegroups.com
This little test does not fail for me:
        [Test]
        public void TestMultipolygonDifference()
        {
            var mp1 = Reader.Read(@"MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))");
            var mp2 = Reader.Read(@"MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 45 20, 30 5, 10 10, 10 30, 20 35),(30 20, 20 25, 20 15, 30 20)))");

            IGeometry diff = null;
            Assert.DoesNotThrow(() => diff = mp1.Difference(mp2));
            Assert.IsNotNull(diff);
            Console.WriteLine("1-2:\n{0}", diff.AsText());
            Assert.DoesNotThrow(() => diff = mp2.Difference(mp1));
            Assert.IsNotNull(diff);
            Console.WriteLine("2-1:\n{0}", diff.AsText());
        }

Could you confirm or provide different geometries? Have you checked your geometries for validity? Perhaps
return operateOn.Buffer(0).Difference(toBeRemoved.Buffer(0));
does the trick? If not, another thing that comes to my mind is that you may want to compare AddSnappedNode of HotPixel class with the version in trunk. If there is a difference, use the version in trunk.

Hth FObermaier

Jeremy

unread,
Jan 11, 2013, 10:15:28 AM1/11/13
to nettopol...@googlegroups.com
Disregard.  I dad to union the geometry first and that seemed to get rid of the problem.
Reply all
Reply to author
Forward
0 new messages