Exemple #1
0
        public void testNoOutgoingDirEdgeFoundException()
        {
            var a = new WKTReader().Read("MULTIPOLYGON (((1668033.7441322226 575074.5372325261, 1668043.6526485088 575601.4901441064, 1668049.5076808596 575876.2262774946, 1668054.4619390026 576155.4662819218, 1668057.61464873 576428.4008668943, 1668059.8665842495 576711.2439681528, 1668063.9200681846 576991.3847467878, 1668071.576648951 577269.7239770072, 1668075.630132886 577547.1624330188, 1668077.8820684056 577825.5016632382, 1668081.935552341 578102.9401192497, 1668087.7905846918 578380.3785752613, 1668094.5463912506 578650.6108376103, 1668097.699100978 578919.9423257514, 1668103.5541333288 579191.0753623082, 1668111.2107140953 579455.9029794101, 1668112.5230371233 579490.6388405386, 1668120.62746972 579490.4954984378, 1668113.4626496148 579183.8691686456, 1668108.5083914716 578916.3392289202, 1668104.4549075365 578642.50386974, 1668100.401423601 578368.6685105597, 1668094.54639125 578095.7339255873, 1668088.6913588992 577822.7993406148, 1668085.5386491718 577548.9639814346, 1668082.3859394444 577275.1286222544, 1668076.5309070935 577002.1940372819, 1668072.4774231582 576729.2594523095, 1668066.6223908074 576456.324867337, 1668063.46968108 576183.3902823646, 1668059.416197145 575910.4556973921, 1668055.3627132094 575637.5211124197, 1668052.210003482 575366.3880758629, 1668046.354971131 575097.9573619296, 1668046.805358235 575068.2318130712, 1668033.7441322226 575074.5372325261)))");
            var b = new WKTReader().Read("MULTIPOLYGON (((1665830.62 580116.54, 1665859.44 580115.84, 1666157.24 580108.56, 1666223.3 580107.1, 1666313 580105.12, 1666371.1 580103.62, 1666402 580102.78, 1666452.1 580101.42, 1666491.02 580100.36, 1666613.94 580097.02, 1666614.26 580097.02, 1666624 580096.74, 1666635.14 580096.42, 1666676.16 580095.28, 1666722.42 580093.94, 1666808.26 580091.44, 1666813.42 580091.3, 1666895.02 580088.78, 1666982.06 580086.1, 1667067.9 580083.46, 1667151.34 580080.88, 1667176.8 580080.1, 1667273.72 580077.14, 1667354.54 580074.68, 1667392.4 580073.88, 1667534.24 580070.9, 1667632.7 580068.82, 1667733.94 580066.68, 1667833.62 580064.58, 1667933.24 580062.5, 1667985 580061.4, 1668033.12 580060.14, 1668143.7 580057.24, 1668140.64 579872.78, 1668134.7548600042 579519.7278276943, 1668104.737250423 579518.9428425882, 1668110.64 579873.68, 1668113.18 580025.46, 1668032.4 580027.46, 1667932.66 580030.08, 1667832.8 580032.58, 1667632.28 580037.78, 1667392.14 580043.78, 1667273.4 580046.72, 1667150.62 580049.46, 1667067.14 580051.78, 1666981.14 580053.84, 1666807.4 580057.96, 1666613.64 580062.58, 1666490.14 580065.78, 1666400.9 580067.78, 1666312.18 580070.36, 1666222.1 580072.6, 1665859.28 580079.52, 1665830.28 580080.14, 1665830.62 580116.54)), ((1668134.2639058917 579490.2543124713, 1668130.62 579270.86, 1668125.86 578984.78, 1668117.3 578470.2, 1668104.02 577672.06, 1668096.78 577237.18, 1668093.4 577033.64, 1668087.28 576666.92, 1668085.24 576543.96, 1668083.32 576428.36, 1668081.28 576305.86, 1668075.38 575950.9, 1668061.12 575018.44, 1666745.6 575072.62, 1665835.48 575109.72, 1665429.26 575126.26, 1664940.66 575148.86, 1664365.4 575170.64, 1664116.02 575181.78, 1662804.22 575230.32, 1662804.780409841 575260.319992344, 1664086.52 575208.92, 1664150.3090003466 579072.2660557877, 1664180.345101783 579073.7529915024, 1664174.46 578717.2, 1664204.44 578716.82, 1664173.3 576830.12, 1664146.48 575206.52, 1665410.98 575155.82, 1665439.18 576784.24, 1665441.16 576899.44, 1665441.88 576940.4, 1665478.5547472103 579058.5389785315, 1665518.6155320513 579061.3502616781, 1665450.98 575156.2, 1668030.38 575050.3, 1668104.2687072477 579490.7848338542, 1668134.2639058917 579490.2543124713)), ((1664150.7710040906 579100.2470608585, 1664160.68 579700.38, 1664165.68 579987.66, 1664195.2 579986.98, 1664190.68 579699.9, 1664180.7918241904 579100.8179797827, 1664150.7710040906 579100.2470608585)), ((1665478.9532824333 579081.5562602862, 1665483.38 579337.22, 1665503.38 579336.64, 1665505.06 579443.26, 1665525.22 579442.68, 1665522.9750161383 579313.0587927903, 1665513.4612495075 579308.8304520656, 1665510.9439672586 579258.4848070825, 1665510.9439672586 579114.9997188805, 1665503.392120511 579082.2750496415, 1665478.9532824333 579081.5562602862)))");

            a.Difference(b);
            b.Difference(a);
        }
        public void DifferenceDoesNotCrashForCertainPolygons()
        {
            //TEST demonstrates problem in NTS 1.7.1 was the reason for upgrade to 1.7.3
            var g1 = new WKTReader().Read("POLYGON ((5 -10, 2 -10, 0 0, 0 1, 5 1, 5 -10))");
            var g2 = new WKTReader().Read("POLYGON ((0.6 -3, 2.6 -3, 3.4 -7, 1.4 -7, 0.6 -3))");

            //this used to crash..
            g1.Difference(g2);
        }
Exemple #3
0
        public void TestDifferenceOfComplexMultipolygons()
        {
            string pol1String =
                @"MULTIPOLYGON (((636192.59787309519 6154321.6995911133,
636182.897398793 6154321.8655825993,
636173.596086427 6154322.1355276527,
636167.86522464128 6154325.0849273112,
636161.6231205092 6154326.6646057721,
636160.17831999587 6154326.7813923974,
636161.62312051 6154326.66460577,
636167.86343093 6154325.08425578,
636173.59608643 6154322.13552765,
636182.89523056 6154321.86485684,
636185.751571696 6154321.8162046,
636192.59787309519 6154321.6995911133)),
((636152.84859301744 6154319.8801070936,
636153.02270491 6154322.12552969,
636154.630037279 6154324.02402822,
636157.17036459 6154327.02453251,
636157.17036458931 6154327.02453251,
636153.02270490839 6154322.1255296879,
636152.84859301744 6154319.8801070936)),
((636211.11390913755 6154314.0155097777,
636211.114677974 6154314.0171801187,
636207.437031418 6154321.4456680715,
636207.43681213306 6154321.4456718238,
636211.11390913755 6154314.0155097777)),
((636203.68238669413 6154308.2698675757,
636208.89654585847 6154309.1981610162,
636209.84867722925 6154311.2667209692,
636208.89554388 6154309.19807967,
636203.68238669413 6154308.2698675757)),
((636172.16130951955 6154302.44953468,
636178.5428774301 6154303.7584576393,
636172.16345147 6154302.45243773,
636158.325838736 6154303.24290477,
636158.1491036 6154303.25300068,
636157.253171342 6154304.03329127,
636152.6634752 6154308.0305764,
636152.581231977 6154315.22303587,
636152.56918352365 6154316.2767155087,
636152.65988775936 6154308.0283991182,
636158.15162006055 6154303.2493718751,
636172.16130951955 6154302.44953468)))";

            string pol2String =
                @"MULTIPOLYGON (((636167.79101204267 6154298.2703853333,
636168.33523776615 6154298.2803832982,
636170.65232001338 6154298.4203548077,
636170.69354923489 6154298.4303527726,
636171.18829989259 6154298.4703446319,
636173.33221940952 6154298.7302917205,
636173.42292369681 6154298.7502876511,
636174.0083786418 6154298.8402693355,
636174.02487033047 6154298.8502673,
636176.01211880578 6154299.2501858976,
636176.56459037366 6154299.3701614775,
636177.13355363009 6154299.5501248464,
636177.521108312 6154299.690096355,
636179.05483535107 6154300.2899742518,
636179.219752237 6154300.3499620417,
636179.75573211617 6154300.5999111654,
636180.27522030682 6154300.8698562188,
636180.76997096464 6154301.1897910973,
636180.976117072 6154301.3197646411,
636182.44387735671 6154302.3595529953,
636182.71599021845 6154302.5695102587,
636183.177757499 6154302.9394349623,
636183.60654140241 6154303.33935356,
636184.01058777294 6154303.7692660522,
636184.38165076624 6154304.2291724393,
636184.72797622671 6154304.7090747571,
636184.85528403521 6154304.9176677912,
636179.86541827 6154304.02921314,
636172.16345147 6154302.45243773,
636158.325838736 6154303.24290477,
636158.1491036 6154303.25300068,
636157.253171342 6154304.03329127,
636152.6634752 6154308.0305764,
636152.581231977 6154315.22303587,
636152.56918347 6154316.2767202,
636153.02270491 6154322.12552969,
636154.630037279 6154324.02402822,
636157.17036459 6154327.02453251,
636157.518183773 6154326.99641747,
636161.62312051 6154326.66460577,
636167.86343093 6154325.08425578,
636173.59608643 6154322.13552765,
636182.89523056 6154321.86485684,
636184.8490700468 6154321.8315769676,
636184.60428856232 6154322.2854971271,
636184.46410920925 6154322.525448286,
636183.4416245165 6154324.1751125008,
636183.2767076306 6154324.4350595893,
636182.93038217013 6154324.9149619071,
636182.55931917683 6154325.3748682942,
636182.1552728063 6154325.8047807869,
636181.72648890293 6154326.204699385,
636181.26472162234 6154326.5746240877,
636180.7864626532 6154326.9145548958,
636180.29171199538 6154327.2344897734,
636179.77222380473 6154327.5044348277,
636179.70625705039 6154327.5444266871,
636178.88167262077 6154327.9343473194,
636176.35019842186 6154329.2740746224,
636176.11931478162 6154329.3940502014,
636175.58333490242 6154329.6439993251,
636175.03086333454 6154329.8439586237,
636174.46190007811 6154330.0239219926,
636173.89293682168 6154330.1538955374,
636173.30748187669 6154330.2438772218,
636172.7220269317 6154330.3038650118,
636172.202538741 6154330.3238609415,
636170.808991055 6154330.3338589063,
636170.74302430055 6154330.3338589063,
636170.41319052875 6154330.3338589063,
636168.17032088025 6154330.2438772218,
636167.634341001 6154330.2538751867,
636163.00017650658 6154331.173687961,
636162.4147215616 6154331.2636696463,
636162.18383792136 6154331.2936635409,
636157.70634446852 6154331.7635678928,
636157.35177316377 6154331.7935617883,
636156.76631821878 6154331.8135577179,
636156.1808632738 6154331.7935617883,
636155.59540832881 6154331.7335739983,
636155.00995338371 6154331.6435923139,
636154.44099012727 6154331.5036208043,
636154.02869791246 6154331.39364319,
636152.30531645461 6154330.8437551185,
636152.148645413 6154330.7837673286,
636151.59617384523 6154330.58380803,
636151.06019396591 6154330.3338589063,
636150.54070577526 6154330.0639138529,
636150.04595511756 6154329.7439789744,
636149.5676961483 6154329.4040481662,
636149.10592886782 6154329.0341234636,
636148.67714496434 6154328.6342048654,
636148.56170314422 6154328.5142292865,
636148.05046079785 6154327.9843371445,
636147.76185624755 6154327.6744002309,
636147.39079325413 6154327.2144938437,
636147.04446779378 6154326.7345915269,
636146.73937155481 6154326.2346932795,
636146.45901284879 6154325.7147991024,
636146.23637505271 6154325.2348967856,
636145.69214932923 6154323.9451593077,
636145.67565764056 6154323.8851715177,
636145.46126568888 6154323.3352834461,
636145.296348803 6154322.7753974088,
636145.27985711442 6154322.7254075846,
636144.71913970227 6154320.5858430862,
636144.60369788215 6154320.0659489091,
636144.50474775059 6154319.5160608375,
636144.38106008607 6154318.6062460281,
636144.38106008607 6154318.5662541678,
636144.348076709 6154318.3163050441,
636144.16666813439 6154316.4966754252,
636144.05947215855 6154315.5468687555,
636144.02648878144 6154315.1569481222,
636144.00999709277 6154314.5670681912,
636144.02648878144 6154313.9771882594,
636144.0842096915 6154313.3873083275,
636144.18315982306 6154312.80742636,
636144.31509333174 6154312.2375423592,
636144.36456839752 6154312.05757899,
636144.405797619 6154311.6776563218,
636144.50474775059 6154311.0877763908,
636144.55422281637 6154310.847825232,
636144.81808983383 6154309.6880612988,
636144.90054827684 6154309.3581284555,
636145.06546516274 6154308.798242419,
636145.27985711442 6154308.2483543465,
636145.51898659894 6154307.70846424,
636145.79934530507 6154307.1885700626,
636146.104441544 6154306.6886718152,
636146.12917907687 6154306.6586779207,
636147.300088967 6154304.9190320205,
636147.62167689449 6154304.4691235982,
636147.99273988779 6154304.009217211,
636148.39678625832 6154303.5793047184,
636148.5699489885 6154303.4193372792,
636149.55120445974 6154302.4895265391,
636149.80682563293 6154302.2495753812,
636150.26859291352 6154301.8796506776,
636150.74685188266 6154301.53971987,
636151.24160254048 6154301.2197849918,
636151.76109073113 6154300.9498399384,
636152.04144943715 6154300.8098684289,
636153.32780114736 6154300.2299864627,
636153.58342232055 6154300.1200088477,
636154.13589388831 6154299.9200495491,
636154.70485714474 6154299.74008618,
636154.91100325214 6154299.690096355,
636155.94173378916 6154299.4401472323,
636156.30455093819 6154299.3601635126,
636156.8900058833 6154299.2701818282,
636157.12088952353 6154299.2401879327,
636159.77605138684 6154298.9602449145,
636160.056410093 6154298.93025102,
636164.47618263564 6154298.6103161415,
636166.69431475119 6154298.3403710881,
636167.20555709756 6154298.290381263,
636167.79101204267 6154298.2703853333)))";
            var      polygon1 = /*(MultiPolygon)*/ new WKTReader().Read(pol1String);
            var      polygon2 = /*(MultiPolygon)*/ new WKTReader().Read(pol2String);
            Geometry result   = null;

            while (true)
            {
                try
                {
                    result = polygon1.Difference(polygon2);
                    break;
                }
                catch (TopologyException ex)
                {
                    polygon1 = InsertTopologyExceptionPoint(ex.Coordinate, polygon1);
                    polygon2 = InsertTopologyExceptionPoint(ex.Coordinate, polygon2);
                }
            }

            Assert.IsNotNull(result);
            double area = 0;

            Assert.DoesNotThrow(() => area = result.Area);
            Assert.AreEqual(0.01025390625, area, 0.01);

            Console.WriteLine("WKT : {0}", result.AsText());
            Console.WriteLine("Area: {0}", area);

            //2nd Attempt
            var gpr = new GeometryPrecisionReducer(new PrecisionModel(10000000000));
            var p1  = gpr.Reduce(polygon1);
            var p2  = gpr.Reduce(polygon2);

            result = null;
            Assert.DoesNotThrow(() => result = p1.Difference(p2));
            area = 0;
            Assert.DoesNotThrow(() => area = result.Area);
            Assert.AreEqual(0.01025390625, area, 0.01);

            Console.WriteLine("WKT : {0}", result.AsText());
            Console.WriteLine("Area: {0}", area);
        }