Ejemplo n.º 1
0
        public void CanTestNaNZs()
        {
            var multiPatchClass = new FeatureClassMock(
                1, "multipatch", esriGeometryType.esriGeometryMultiPatch);
            var polygonClass = new FeatureClassMock(
                1, "polygon", esriGeometryType.esriGeometryPolygon);

            var multiPatch = new MultiPatchConstruction();

            multiPatch.StartOuterRing(0, 0, 0)
            .Add(5, 0, 0)
            .Add(5, 1, 5)
            .Add(0, 1, 5);

            IFeature multiPatchRow = multiPatchClass.CreateFeature(multiPatch.MultiPatch);

            CurveConstruction polygon =
                CurveConstruction.StartPoly(0, 0)
                .LineTo(10, 0)
                .LineTo(0, 10);

            IFeature polygonRow = polygonClass.CreateFeature(polygon.ClosePolygon());

            var test = new QaZDifferenceSelfWrapper(
                new[] { (IFeatureClass)multiPatchClass, polygonClass },
                20, 0,
                ZComparisonMethod.BoundingBox,
                null);

            var runner     = new QaTestRunner(test);
            int errorCount = test.TestDirect(multiPatchRow, 0, polygonRow, 1);

            Assert.AreEqual(1, errorCount);
            Assert.AreEqual(1, runner.Errors.Count);
        }
        public void CanDetectConnectedAndNotConnectedAtReentrantAngle()
        {
            IFeatureClass fcArea1;
            IFeatureClass fcArea2;
            IFeatureClass fcBorder1;
            IFeatureClass fcBorder2;

            CreateFeatureClasses(out fcArea1, out fcArea2, out fcBorder1, out fcBorder2);

            // border lines are coincident
            AddFeature(fcBorder1,
                       CurveConstruction.StartLine(10, 100)
                       .LineTo(0, 0)
                       .LineTo(0, -2)
                       .LineTo(100, -2)
                       .Curve, stateId: "A");
            AddFeature(fcBorder2,
                       CurveConstruction.StartLine(100, -2)
                       .LineTo(0, -2)
                       .LineTo(0, 0)
                       .LineTo(10, 100)
                       .Curve, stateId: "B");

            // connected to border:
            AddFeature(fcArea1,
                       CurveConstruction.StartPoly(10, 100)
                       .LineTo(0, 0)
                       .LineTo(-10, 0)
                       .LineTo(-10, 100)
                       .ClosePolygon(), stateId: "A");
            AddFeature(fcArea1,
                       CurveConstruction.StartPoly(0, 0)
                       .LineTo(0, -2)
                       .LineTo(100, -2)
                       .LineTo(100, -10)
                       .LineTo(-10, -10)
                       .LineTo(-10, 0)
                       .ClosePolygon(), stateId: "A");

            AddAreaFeature(fcArea2, 0, -2, 100, 0, stateId: "B");             // connected
            AddFeature(fcArea2,
                       CurveConstruction.StartPoly(0.5, 5)
                       .LineTo(50, 50)
                       .Line(50, 100)
                       .LineTo(10, 100)
                       .ClosePolygon(), stateId: "B");                              // connected

            var test = new QaEdgeMatchCrossingAreas(fcArea1, fcBorder1,
                                                    fcArea2, fcBorder2,
                                                    searchDistance: 10,
                                                    boundingClasses1: null,
                                                    boundingClasses2: null)
            {
                AreaClass1BorderMatchCondition = "AREA.STATE = BORDER.STATE",
                AreaClass2BorderMatchCondition = "AREA.STATE = BORDER.STATE",
                CrossingAreaMatchCondition     = "AREA1.STATE <> AREA2.STATE"
            };

            AssertUtils.ExpectedErrors(1, Run(test, 1000));
        }
Ejemplo n.º 3
0
        public void CanTestPolygon()
        {
            var fc = new FeatureClassMock(1, "Fc", esriGeometryType.esriGeometryPolygon);

            CurveConstruction construction = CurveConstruction.StartPoly(5, 4, 1)
                                             .LineTo(5, 8, 1)
                                             .LineTo(8, 8, 1)
                                             .LineTo(8, 4, 1);
            IFeature f = fc.CreateFeature(construction.ClosePolygon());

            GeometryUtils.EnsureSpatialReference(f.Shape, fc);

            var test   = new QaCoplanarRings(fc, 0, false);
            var runner = new QaTestRunner(test);

            runner.Execute(f);
            Assert.AreEqual(0, runner.Errors.Count);

            construction = CurveConstruction.StartPoly(5, 4, 1)
                           .LineTo(5, 8, 1)
                           .LineTo(8, 8, 1)
                           .LineTo(8, 4, 1.01);
            f = fc.CreateFeature(construction.ClosePolygon());
            GeometryUtils.EnsureSpatialReference(f.Shape, fc);

            test   = new QaCoplanarRings(fc, 0, false);
            runner = new QaTestRunner(test);
            runner.Execute(f);
            Assert.AreEqual(1, runner.Errors.Count);
        }
Ejemplo n.º 4
0
        public void CanTestConstraint()
        {
            ISpatialReference sref = SpatialReferenceUtils.CreateSpatialReference(
                WellKnownHorizontalCS.LV95);

            var multiPatchClass = new FeatureClassMock(
                1, "multipatch", esriGeometryType.esriGeometryMultiPatch,
                esriFeatureType.esriFTSimple, sref);

            multiPatchClass.AddField("Level", esriFieldType.esriFieldTypeInteger);
            int levelIndex = multiPatchClass.FindField("Level");

            var polygonClass = new FeatureClassMock(
                1, "polygon", esriGeometryType.esriGeometryPolygon,
                esriFeatureType.esriFTSimple, sref);

            polygonClass.AddField("Level", esriFieldType.esriFieldTypeInteger);

            var multiPatchConstruction = new MultiPatchConstruction();

            multiPatchConstruction.StartOuterRing(0, 0, 0)
            .Add(5, 0, 0)
            .Add(5, 1, 5)
            .Add(0, 1, 5);

            IFeature multiPatchRow =
                multiPatchClass.CreateFeature(multiPatchConstruction.MultiPatch);

            multiPatchRow.set_Value(levelIndex, 2);

            CurveConstruction curveConstruction =
                CurveConstruction.StartPoly(0, 0, 50)
                .LineTo(10, 0, 50)
                .LineTo(0, 10, 50);

            IFeature polygonRow =
                polygonClass.CreateFeature(curveConstruction.ClosePolygon());

            polygonRow.set_Value(levelIndex, 1);

            var test = new QaZDifferenceSelfWrapper(
                new[] { (IFeatureClass)multiPatchClass, polygonClass },
                20, 0,
                ZComparisonMethod.BoundingBox,
                "U.Level > L.Level");

            var runner     = new QaTestRunner(test);
            int errorCount = test.TestDirect(multiPatchRow, 0, polygonRow, 1);

            Assert.AreEqual(1, errorCount);
            Assert.AreEqual(1, runner.Errors.Count);
        }
        public void CanIntersectPolygonWithTouchingPolygon()
        {
            var g1 = CurveConstruction.StartPoly(0, 0, 0)
                     .LineTo(10, 0, 0)
                     .LineTo(10, 10, 5)
                     .LineTo(0, 10, 5)
                     .ClosePolygon();
            var g2 = CurveConstruction.StartPoly(10, 5, 10)
                     .LineTo(20, 5, 10)
                     .LineTo(20, 15, 10)
                     .LineTo(10, 15, 10)
                     .ClosePolygon();

            Check(g1, g2, 0);
        }
        public void CheckAreErrorsIndependentOnFeatureOrder()
        {
            IFeatureClass fcArea1;
            IFeatureClass fcArea2;
            IFeatureClass fcBorder1;
            IFeatureClass fcBorder2;

            CreateFeatureClasses(out fcArea1, out fcArea2,
                                 out fcBorder1, out fcBorder2);

            var border11 =
                (IPolyline)CurveConstruction.StartLine(40, 60).LineTo(0, 50).Curve;
            var border12 =
                (IPolyline)CurveConstruction.StartLine(0, 50).LineTo(200, 0).Curve;

            var border21 =
                (IPolyline)CurveConstruction.StartLine(40, 60.01).LineTo(0, 50.01).Curve;
            var border22 =
                (IPolyline)CurveConstruction.StartLine(0, 50.01).LineTo(200, 0.01).Curve;

            // connected to border:
            IPolygon area11 = CurveConstruction.StartPoly(40, 60).LineTo(0, 50).LineTo(200, 0)
                              .ClosePolygon();

            IPolygon area21 =
                CurveConstruction.StartPoly(40, 60.01).LineTo(0, 50.01).LineTo(-100, 50)
                .ClosePolygon();

            IPolygon area22 =
                CurveConstruction.StartPoly(0, 50.01).LineTo(200, 0.01).LineTo(100, -50)
                .ClosePolygon();

            QaEdgeMatchCrossingAreas test = CreateTest(new[] { area22, area21 },
                                                       new[] { border21, border22 },
                                                       new[] { area11 },
                                                       new[] { border11, border12 });

            var errors1 = new List <QaError>(Run(test, 1000));

            test = CreateTest(new[] { area11 }, new[] { border11, border12 },
                              new[] { area21, area22 }, new[] { border21, border22 });

            var errors2 = new List <QaError>(Run(test, 1000));

            Assert.AreEqual(errors1.Count, errors2.Count);
            // TODO : Compare Errors
        }
        public void CanDetectBorderGapBackslashed()
        {
            IFeatureClass fcArea1;
            IFeatureClass fcArea2;
            IFeatureClass fcBorder1;
            IFeatureClass fcBorder2;

            CreateFeatureClasses(out fcArea1, out fcArea2, out fcBorder1, out fcBorder2);

            // border lines are not coincident
            AddLineFeature(fcBorder1, -2, 2, 1, -2, stateId: "A");
            AddLineFeature(fcBorder2, 1.01, -2, -1.99, 2, stateId: "B");

            AddFeature(fcArea1,
                       CurveConstruction.StartPoly(-2, 2)
                       .LineTo(1, -2)
                       .LineTo(-5, -10)
                       .ClosePolygon(), stateId: "A");                              // connected
            AddFeature(fcArea2,
                       CurveConstruction.StartPoly(1.01, -2)
                       .LineTo(-1.99, 2)
                       .LineTo(5, 10)
                       .ClosePolygon(), stateId: "B");                              // connected

            var test = new QaEdgeMatchCrossingAreas(fcArea1, fcBorder1,
                                                    fcArea2, fcBorder2,
                                                    searchDistance: 0.2,
                                                    boundingClasses1: null,
                                                    boundingClasses2: null)
            {
                AreaClass1BorderMatchCondition = "AREA.STATE = BORDER.STATE",
                AreaClass2BorderMatchCondition = "AREA.STATE = BORDER.STATE",
                CrossingAreaMatchCondition     = "AREA1.STATE <> AREA2.STATE"
            };

            AssertUtils.ExpectedErrors(3, Run(test, 1000));

            AssertUtils.ExpectedErrors(3, Run(test, 1));

            var runner = new QaContainerTestRunner(1, test)
            {
                KeepGeometry = true
            };

            runner.Execute(GeometryFactory.CreateEnvelope(-9, -4, 9, 8));
            AssertUtils.ExpectedErrors(3, runner.Errors);
        }
        public void CanIgnoreConnectedFeaturesAtOppositeSplitBorderInEdge()
        {
            IFeatureClass fcArea1;
            IFeatureClass fcArea2;
            IFeatureClass fcBorder1;
            IFeatureClass fcBorder2;

            CreateFeatureClasses(out fcArea1, out fcArea2, out fcBorder1, out fcBorder2);

            // border lines are coincident BUT with a split at opposite side of area split!!
            AddLineFeature(fcBorder1, 0, 0, 5, 0, stateId: "A");             // split point at x=5
            AddLineFeature(fcBorder1, 5, 0, 0, -5, stateId: "A");

            AddFeature(fcBorder2,
                       CurveConstruction.StartLine(0, -5).LineTo(5, 0).LineTo(0, 0).Curve,
                       stateId: "B");

            // connected to split border, one polygon
            AddFeature(fcArea1,
                       CurveConstruction.StartPoly(2, 0)
                       .LineTo(5, 0)
                       .LineTo(2, -3)
                       .ClosePolygon(), stateId: "A");

            // two polygons connected to non-split border
            AddAreaFeature(fcArea2, 2, 0, 5, 100, stateId: "B");             // split point at x=5
            AddFeature(fcArea2,
                       CurveConstruction.StartPoly(2, -3)
                       .LineTo(5, 0)
                       .LineTo(5, -3)
                       .ClosePolygon(), stateId: "B");

            var test = new QaEdgeMatchCrossingAreas(fcArea1, fcBorder1,
                                                    fcArea2, fcBorder2,
                                                    searchDistance: 1,
                                                    boundingClasses1: null,
                                                    boundingClasses2: null)
            {
                AreaClass1BorderMatchCondition = "AREA.STATE = BORDER.STATE",
                AreaClass2BorderMatchCondition = "AREA.STATE = BORDER.STATE",
                CrossingAreaMatchCondition     = "AREA1.STATE <> AREA2.STATE"
            };

            AssertNoErrors(Run(test, 1000));

            AssertNoErrors(Run(test, 5));
        }
        public void CanIntersectMultiPatchWithPolygon()
        {
            const double z1 = 10;
            const double z2 = 20;
            var          g1 = CurveConstruction.StartPoly(5, 5, z1)
                              .LineTo(15, 5, z1)
                              .LineTo(15, 15, z1)
                              .LineTo(5, 15, z1)
                              .ClosePolygon();
            var g2 = new MultiPatchConstruction().StartOuterRing(0, 0, z2)
                     .Add(10, 0, z2)
                     .Add(10, 10, z2)
                     .Add(0, 10, z2)
                     .MultiPatch;

            Check(g2, g1, 2,
                  (p, i) =>
                  At(i == 1, Equals(5, 10, z2, p.Point)) &&
                  At(i == 0, Equals(10, 5, z2, p.Point)));
        }
        private static void CreateTestPolygons([NotNull] IFeatureClass polygonFeatureClass)
        {
            IFeature feature1 = polygonFeatureClass.CreateFeature();

            feature1.Shape =
                CurveConstruction.StartPoly(100, 100)
                .LineTo(100, 200)
                .LineTo(200, 200)
                .LineTo(200, 100)
                .ClosePolygon();
            feature1.Store();

            IFeature feature2 = polygonFeatureClass.CreateFeature();

            feature2.Shape =
                CurveConstruction.StartPoly(200, 100)
                .LineTo(200, 200)
                .LineTo(300, 200)
                .LineTo(300, 100)
                .ClosePolygon();
            feature2.Store();
        }
        public void CantGetDistanceToNonPlanarPolygon()
        {
            const double z1      = 10;
            var          g1      = GeometryFactory.CreatePoint(100, 0, z1);
            var          polygon =
                CurveConstruction.StartPoly(0, 0, 10)
                .LineTo(10, 0, 10)
                .LineTo(10, 10, 11)
                .LineTo(0, 10, 10)
                .ClosePolygon();

            var polygonClass = new FeatureClassMock(
                1, "polygon", esriGeometryType.esriGeometryPolygon,
                esriFeatureType.esriFTSimple,
                SpatialReferenceUtils.CreateSpatialReference(WellKnownHorizontalCS.LV95));

            var feature = polygonClass.CreateFeature(polygon);

            var intersectionPoints =
                ZDifferenceStrategyIntersectionPoints.GetDistanceToPlane(
                    g1, feature, 0.01);

            foreach (var either in intersectionPoints)
            {
                either.Match(e =>
                {
                    Console.WriteLine(
                        $@"expected nonplanar error: {e.Message} ({e.MaximumOffset})");
                    Assert.AreEqual(0.3324801391253977, e.MaximumOffset);
                    return(0);
                },
                             pts =>
                {
                    Assert.Fail("Unexpected intersection point");
                    return(-1);
                });
            }
        }
        public void CanIntersectPolygonWithPolygon()
        {
            var g1 = CurveConstruction.StartPoly(0, 0, 0)
                     .LineTo(10, 0, 0)
                     .LineTo(10, 10, 5)
                     .LineTo(0, 10, 5)
                     .ClosePolygon();
            var g2 =
                CurveConstruction.StartPoly(5, 5, 10)
                .LineTo(15, 5, 10)
                .LineTo(15, 15, 10)
                .LineTo(5, 15, 10)
                .ClosePolygon();

            Check(g1, g2, 2,
                  (ip, index) =>
                  At(index == 0, Equals(5, 10, 5, 10, ip)) &&
                  At(index == 1, Equals(10, 5, 2.5, 10, ip)));
            Check(g2, g1, 2,
                  (ip, index) =>
                  At(index == 0, Equals(10, 5, 10, 2.5, ip)) &&
                  At(index == 1, Equals(5, 10, 10, 5, ip)));
        }
Ejemplo n.º 13
0
        public void CanIgnoreConnectedFeaturesWithAreaBorders()
        {
            IFeatureClass fcLine1;
            IFeatureClass fcLine2;
            IFeatureClass fcBorder1;
            IFeatureClass fcBorder2;

            CreateFeatureClasses(out fcLine1, out fcLine2, out fcBorder1, out fcBorder2, true);

            // border lines are coincident
            AddFeature(fcBorder1,
                       CurveConstruction.StartPoly(0, 0).LineTo(10, 0).LineTo(5, 5)
                       .ClosePolygon(),
                       stateId: "A");
            AddFeature(fcBorder2,
                       CurveConstruction.StartPoly(10, 0).LineTo(0, 0).LineTo(5, -5)
                       .ClosePolygon(),
                       stateId: "B");

            // connected to border:
            AddLineFeature(fcLine1, 5, 0, 7, 0, stateId: "A");

            // connected to border, exact match:
            AddLineFeature(fcLine2, 7, 0, 5, 0, stateId: "B");

            var test = new QaEdgeMatchBorderingLines(fcLine1, fcBorder1,
                                                     fcLine2, fcBorder2, 0)
            {
                LineClass1BorderMatchCondition = "LINE.STATE = BORDER.STATE",
                LineClass2BorderMatchCondition = "LINE.STATE = BORDER.STATE",
                BorderingLineMatchCondition    = "LINE1.STATE <> LINE2.STATE"
            };

            AssertNoErrors(Run(test, 1000));

            AssertNoErrors(Run(test, 5));
        }
Ejemplo n.º 14
0
        public void CanTestPolygons()
        {
            var featureClassMock = new FeatureClassMock(1, "mock",
                                                        esriGeometryType.esriGeometryPolygon);

            CurveConstruction construction = CurveConstruction
                                             .StartPoly(5, 4, 10).LineTo(-5, 4, 10.1)
                                             .LineTo(-5, -3, 10.05)
                                             .LineTo(5, -7, 10);

            IFeature row1 = featureClassMock.CreateFeature(construction.ClosePolygon());

            GeometryUtils.EnsureSpatialReference(row1.Shape, featureClassMock);

            var test   = new QaHorizontalSegments(featureClassMock, 5, 0);
            var runner = new QaTestRunner(test);

            runner.KeepGeometry = true;

            runner.Execute(row1);

            Assert.AreEqual(1, runner.Errors.Count);
            Assert.IsTrue(runner.ErrorGeometries[0].Envelope.ZMin > 5);
        }
        private static void TestMultiPartErrorCore(IFeatureWorkspace ws)
        {
            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", esriGeometryType.esriGeometryPolygon,
                                SpatialReferenceUtils.CreateSpatialReference
                                    ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                    true), 1000, false, false));

            IFeatureClass featureClass =
                DatasetUtils.CreateSimpleFeatureClass(ws, "TestMultiPartErrorCore1",
                                                      fields,
                                                      null);

            IFieldsEdit refFields = new FieldsClass();

            refFields.AddField(FieldUtils.CreateOIDField());
            refFields.AddField(FieldUtils.CreateShapeField(
                                   "Shape", esriGeometryType.esriGeometryPolygon,
                                   SpatialReferenceUtils.CreateSpatialReference
                                       ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                       true), 1000, false, false));

            IFeatureClass reference =
                DatasetUtils.CreateSimpleFeatureClass(ws, "TestMultiPartErrorCoreRef",
                                                      refFields,
                                                      null);

            IPolygon poly1 = CurveConstruction.StartPoly(0, 0.01)
                             .LineTo(1, 0.01)
                             .LineTo(1, 1)
                             .LineTo(0, 1)
                             .LineTo(0, 0.01)
                             .MoveTo(1.001, 0.01)
                             .LineTo(4, 0.01)
                             .LineTo(4, 1)
                             .LineTo(1.001, 1)
                             .LineTo(1.001, 0.01)
                             .ClosePolygon();

            ((ITopologicalOperator)poly1).Simplify();
            IFeature row1 = featureClass.CreateFeature();

            row1.Shape = poly1;
            row1.Store();

            IPolygon referencePoly = CurveConstruction.StartPoly(-1, 0)
                                     .LineTo(0.5, 0)
                                     .LineTo(0.5, -10)
                                     .LineTo(-1, -10)
                                     .LineTo(-1, 0)
                                     .MoveTo(0.81, 0)
                                     .LineTo(10, 0)
                                     .LineTo(10, -10)
                                     .LineTo(0.81, 0)
                                     .ClosePolygon();

            ((ITopologicalOperator)referencePoly).Simplify();
            IFeature rowRef = reference.CreateFeature();

            rowRef.Shape = referencePoly;
            rowRef.Store();

            var test = new QaPartCoincidenceOther(featureClass, reference,
                                                  0.02, 0.05, 0.1,
                                                  false, 5000, 0);
            var runner = new QaTestRunner(test);

            runner.Execute(row1);
            Assert.AreEqual(3, runner.Errors.Count);
        }
Ejemplo n.º 16
0
        public void CanIgnoreArea()
        {
            IFeatureWorkspace ws = TestWorkspaceUtils.CreateInMemoryWorkspace("ignoreArea");

            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateField("Objektart",
                                                   esriFieldType.esriFieldTypeInteger));
            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", esriGeometryType.esriGeometryPolyline,
                                SpatialReferenceUtils.CreateSpatialReference
                                    ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                    true), 1000));

            IFeatureClass lineFc = DatasetUtils.CreateSimpleFeatureClass(ws, "lineFc", fields);

            fields = new FieldsClass();
            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateField("Objektart",
                                                   esriFieldType.esriFieldTypeInteger));
            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", esriGeometryType.esriGeometryPolygon,
                                SpatialReferenceUtils.CreateSpatialReference
                                    ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                    true), 1000));

            IFeatureClass areaFc = DatasetUtils.CreateSimpleFeatureClass(ws, "areaFc", fields);

            fields = new FieldsClass();
            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateField("Objektart",
                                                   esriFieldType.esriFieldTypeInteger));
            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", esriGeometryType.esriGeometryPolygon,
                                SpatialReferenceUtils.CreateSpatialReference
                                    ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                    true), 1000));

            IFeatureClass ignoreFc = DatasetUtils.CreateSimpleFeatureClass(ws, "ignoreFc", fields);

            ((IWorkspaceEdit)ws).StartEditing(false);
            ((IWorkspaceEdit)ws).StopEditing(true);

            ((IWorkspaceEdit)ws).StartEditing(false);
            ((IWorkspaceEdit)ws).StopEditing(true);

            Create(lineFc, 10, CurveConstruction.StartLine(0, 0)
                   .LineTo(10, 10)
                   .Curve);

            Create(areaFc, 10, CurveConstruction.StartPoly(1, 1)
                   .LineTo(2, 1)
                   .LineTo(2, 2)
                   .LineTo(1, 2)
                   .ClosePolygon());

            Create(areaFc, 10, CurveConstruction.StartPoly(6, 6)
                   .LineTo(7, 6)
                   .LineTo(7, 7)
                   .LineTo(6, 7)
                   .ClosePolygon());

            Create(ignoreFc, 0, CurveConstruction.StartPoly(1, 1)
                   .LineTo(2, 1)
                   .LineTo(2, 2)
                   .LineTo(1, 2)
                   .ClosePolygon());

            Create(ignoreFc, 10, CurveConstruction.StartPoly(6, 6)
                   .LineTo(7, 6)
                   .LineTo(7, 7)
                   .LineTo(6, 7)
                   .ClosePolygon());

            var test = new QaIntersectsOther(lineFc, areaFc);

            test.IgnoreArea = ignoreFc;
            test.SetConstraint(2, "objektart in (10)");
            {
                // Container test
                var runner     = new QaContainerTestRunner(1000, test);
                int errorCount = runner.Execute();

                Assert.AreEqual(
                    1, errorCount);                     // only line errors, point error is removed by test container!
            }
            {
                // simple test
                var runner     = new QaTestRunner(test);
                int errorCount = runner.Execute();

                Assert.AreEqual(2, errorCount);                 // line AND point errors!
            }
        }
Ejemplo n.º 17
0
        public void CanTestPointNotNearPolygon()
        {
            IFeatureWorkspace testWs =
                TestWorkspaceUtils.CreateInMemoryWorkspace("QaPointNotNearTest");

            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", esriGeometryType.esriGeometryPolygon,
                                SpatialReferenceUtils.CreateSpatialReference
                                    ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                    true), 1000, true));

            IFeatureClass polyFc = DatasetUtils.CreateSimpleFeatureClass(
                testWs, "polygonFc",
                fields);

            IFeatureClass pointFc0 = CreatePointClass(testWs, "pointFc0");
            IFeatureClass pointFc1 = CreatePointClass(testWs, "pointFc1");
            IFeatureClass pointFc2 = CreatePointClass(testWs, "pointFc2");

            IFeature polyFeature = polyFc.CreateFeature();

            polyFeature.Shape =
                CurveConstruction.StartPoly(0, 0, 0)
                .LineTo(100, 0, 10)
                .LineTo(50, 100, 10)
                .ClosePolygon();
            polyFeature.Store();

            IFeature p0 = pointFc0.CreateFeature();

            p0.Shape = GeometryFactory.CreatePoint(20, 1.5, 0);
            p0.Store();

            IFeature p1 = pointFc1.CreateFeature();

            p1.Shape = GeometryFactory.CreatePoint(101, -1, 0);
            p1.Store();

            IFeature p2 = pointFc2.CreateFeature();

            p2.Shape = GeometryFactory.CreatePoint(1, 99, 0);
            p2.Store();

            var test1  = new QaPointNotNear(pointFc0, polyFc, 1.0);
            var runner = new QaContainerTestRunner(1000, test1);

            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);

            var test2 = new QaPointNotNear(pointFc0, polyFc, 1.0);

            test2.GeometryComponents = new[] { GeometryComponent.Boundary };
            runner = new QaContainerTestRunner(1000, test2);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test3 = new QaPointNotNear(pointFc0, polyFc, 2.0);

            test3.GeometryComponents = new[] { GeometryComponent.Boundary };
            runner = new QaContainerTestRunner(1000, test3);
            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);

            var test3_1 = new QaPointNotNear(pointFc1, polyFc, 2.0);

            test3.GeometryComponents = new[] { GeometryComponent.Boundary };
            runner = new QaContainerTestRunner(1000, test3_1);
            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);

            var test4 = new QaPointNotNear(pointFc0, polyFc, 2.0);

            test4.GeometryComponents = new[] { GeometryComponent.Vertices };
            runner = new QaContainerTestRunner(1000, test4);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test5 = new QaPointNotNear(pointFc0, polyFc, 22.0);

            test5.GeometryComponents = new[] { GeometryComponent.Vertices };
            runner = new QaContainerTestRunner(1000, test5);
            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);

            var test6 = new QaPointNotNear(pointFc0, polyFc, 44);             // dist is 43.74

            test6.GeometryComponents = new[] { GeometryComponent.Centroid };
            runner = new QaContainerTestRunner(1000, test6);
            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);

            var test8 = new QaPointNotNear(pointFc0, polyFc, 43);

            test8.GeometryComponents = new[] { GeometryComponent.Centroid };
            runner = new QaContainerTestRunner(1000, test8);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test7 = new QaPointNotNear(pointFc0, polyFc, 44);             // dist is 43.74

            test7.GeometryComponents = new[] { GeometryComponent.LabelPoint };
            runner = new QaContainerTestRunner(1000, test7);
            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);

            var test9 = new QaPointNotNear(pointFc0, polyFc, 43);

            test9.GeometryComponents = new[] { GeometryComponent.LabelPoint };
            runner = new QaContainerTestRunner(1000, test9);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test10 = new QaPointNotNear(pointFc0, new[] { polyFc }, 43, "43", null);

            test10.GeometryComponents = new[] { GeometryComponent.LabelPoint };
            runner = new QaContainerTestRunner(1000, test10);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test11 = new QaPointNotNear(pointFc2, polyFc, 0);

            runner = new QaContainerTestRunner(1000, test11);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);
        }
Ejemplo n.º 18
0
        public void CanTestPointNotNearWithConstraint()
        {
            IFeatureWorkspace testWs =
                TestWorkspaceUtils.CreateInMemoryWorkspace("QaPointNotNearTest");

            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", esriGeometryType.esriGeometryPolygon,
                                SpatialReferenceUtils.CreateSpatialReference
                                    ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                    true), 1000, true));

            IFeatureClass polyFc = DatasetUtils.CreateSimpleFeatureClass(
                testWs, "polygonFc",
                fields);

            IFeatureClass pointFc = CreatePointClass(testWs, "pointFc");

            IFeature polyFeature = polyFc.CreateFeature();

            polyFeature.Shape =
                CurveConstruction.StartPoly(0, 0, 0)
                .LineTo(100, 0, 10)
                .LineTo(50, 100, 10)
                .ClosePolygon();
            polyFeature.Store();

            IFeature p1 = pointFc.CreateFeature();

            p1.Shape = GeometryFactory.CreatePoint(20, 1.5, 0);
            p1.Store();

            var test1  = new QaPointNotNear(pointFc, polyFc, 1.0);
            var runner = new QaContainerTestRunner(1000, test1);

            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);

            var test2 = new QaPointNotNear(pointFc, polyFc, 1.0);

            test2.ValidRelationConstraints = new[] { "G1.ObjectId = 1" };
            runner = new QaContainerTestRunner(1000, test2);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test3 = new QaPointNotNear(pointFc, polyFc, 2.0);

            test3.ValidRelationConstraints = new[] { "G2.ObjectId = 1" };
            runner = new QaContainerTestRunner(1000, test3);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test4 = new QaPointNotNear(pointFc, polyFc, 2.0);

            test4.ValidRelationConstraints = new[] { "G1.ObjectId = G2.ObjectId" };
            runner = new QaContainerTestRunner(1000, test4);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test5 = new QaPointNotNear(pointFc, polyFc, 2.0);

            test5.ValidRelationConstraints = new[] { "G1.ObjectId > G2.ObjectId" };
            runner = new QaContainerTestRunner(1000, test5);
            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);
        }
Ejemplo n.º 19
0
        private static void VerifyPolyErrorHasZ(IFeatureWorkspace ws)
        {
            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", esriGeometryType.esriGeometryPolygon,
                                SpatialReferenceUtils.CreateSpatialReference
                                    ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                    true), 1000, true, false));

            IFeatureClass featureClass =
                DatasetUtils.CreateSimpleFeatureClass(ws, "VerifyPolyErrorHasZ", fields,
                                                      null);

            // make sure the table is known by the workspace
            ((IWorkspaceEdit)ws).StartEditing(false);
            ((IWorkspaceEdit)ws).StopEditing(true);

            IPolycurve poly1 = CurveConstruction.StartPoly(0, 0, 5.03)
                               .LineTo(-10, -1, 4.99)
                               .LineTo(-10, 1, 5.02)
                               .ClosePolygon();
            IFeature row1 = featureClass.CreateFeature();

            row1.Shape = poly1;
            row1.Store();

            IPolycurve poly2 = CurveConstruction.StartPoly(10, -1, 4.94)
                               .LineTo(0, 0, 5.01)
                               .LineTo(10, 1, 4.97)
                               .ClosePolygon();
            IFeature row2 = featureClass.CreateFeature();

            row2.Shape = poly2;
            row2.Store();

            var test = new QaNotNear(featureClass, featureClass, 0.1, 0.1, is3D: true);

            test.IgnoreNeighborCondition = "G1.ObjectId = G2.ObjectId";

            var runners =
                new List <QaTestRunnerBase>
            {
                new QaTestRunner(test)
                {
                    KeepGeometry = true
                },
                new QaContainerTestRunner(1000, test)
                {
                    KeepGeometry = true
                }
            };

            foreach (QaTestRunnerBase runner in runners)
            {
                runner.Execute();
                Assert.True(runner.ErrorGeometries.Count > 0);
                foreach (IGeometry errorGeometry in runner.ErrorGeometries)
                {
                    Assert.True(errorGeometry.Envelope.ZMin > 4);
                }
            }
        }