Ejemplo n.º 1
0
        public void CanReportVertexExactlyNearDistanceAway()
        {
            const string testName = "CanReportVertexExactlyNearDistanceAway";

            IFeatureClass nodeClass = CreateFeatureClass(string.Format("{0}_node", testName),
                                                         esriGeometryType.esriGeometryPoint);
            IFeatureClass nearClass = CreateFeatureClass(string.Format("{0}_near", testName),
                                                         esriGeometryType.esriGeometryPolyline);

            var nearClasses = new List <IFeatureClass> {
                nearClass
            };

            IFeature nodeRow = nodeClass.CreateFeature();

            nodeRow.Shape = GeometryFactory.CreatePoint(0, 0);
            nodeRow.Store();

            IFeature nearRow = nearClass.CreateFeature();

            nearRow.Shape = CurveConstruction.StartLine(0, 2)
                            .LineTo(2, 2)
                            .Curve;
            nearRow.Store();

            IEnvelope verificationEnvelope = GeometryFactory.CreateEnvelope(0, 0, 500, 500);

            var test = new QaNodeLineCoincidence(nodeClass, nearClasses, 2);

            var runner = new QaContainerTestRunner(1000, test);

            runner.Execute(verificationEnvelope);

            AssertUtils.OneError(runner,
                                 "NodeLineCoincidence.NodeTooCloseToLine.BetweenFeatures");
        }
Ejemplo n.º 2
0
        public void CanGetAllMonotonicityTypes()
        {
            var polyline = (IPolyline)CurveConstruction.StartLine(CreatePoint(0, 0, 100))
                           .LineTo(CreatePoint(50, 0, 200))
                           .LineTo(CreatePoint(100, 0, 100))
                           .Curve;

            polyline.SpatialReference = CreateSpatialReference(_mTolerance, _xyTolerance);
            GeometryUtils.MakeMAware(polyline);

            Assert.IsTrue(MeasureUtils.ContainsAllMonotonicityTypes(
                              polyline,
                              esriMonotinicityEnum.esriValueIncreases));

            Assert.IsTrue(MeasureUtils.ContainsAllMonotonicityTypes(
                              polyline,
                              esriMonotinicityEnum.esriValueIncreases,
                              esriMonotinicityEnum.esriValueDecreases));

            Assert.IsFalse(MeasureUtils.ContainsAllMonotonicityTypes(
                               polyline,
                               esriMonotinicityEnum.esriValueIncreases,
                               esriMonotinicityEnum.esriValueLevel));
        }
Ejemplo n.º 3
0
        private static void TestNearVertex(IFeatureWorkspace ws)
        {
            ISpatialReference srM = SpatialReferenceUtils.CreateSpatialReference
                                        ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95, true);

            SpatialReferenceUtils.SetMDomain(srM, 0, 1000000, 0.001, 0.002);

            IFieldsEdit fieldsPoint = new FieldsClass();

            fieldsPoint.AddField(FieldUtils.CreateOIDField());
            fieldsPoint.AddField(FieldUtils.CreateShapeField(
                                     "Shape", esriGeometryType.esriGeometryPoint, srM, 1000, false,
                                     true));

            IFeatureClass fcPoints =
                DatasetUtils.CreateSimpleFeatureClass(ws, "NearVertexPoints", fieldsPoint);

            IFieldsEdit fieldsLine = new FieldsClass();

            fieldsLine.AddField(FieldUtils.CreateOIDField());
            fieldsLine.AddField(FieldUtils.CreateShapeField(
                                    "Shape", esriGeometryType.esriGeometryPolyline, srM, 1000,
                                    false, true));

            IFeatureClass fcLines =
                DatasetUtils.CreateSimpleFeatureClass(ws, "NearVertexLines", fieldsLine);

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

            IFeature point1 = fcPoints.CreateFeature();

            point1.Shape = CreatePoint(100.1, 100.1, 2);
            point1.Store();

            IFeature   fLine1 = fcLines.CreateFeature();
            IPolycurve l1     =
                CurveConstruction.StartLine(CreatePoint(100, 100, 2))
                .LineTo(CreatePoint(101, 100, 1000))
                .Curve;

            ((IMAware)l1).MAware = true;
            fLine1.Shape         = l1;
            fLine1.Store();

            var test = new QaMeasuresAtPoints(fcPoints, null, new[] { fcLines }, 1, 0.01,
                                              LineMSource.Nearest, false);
            var container = new QaContainerTestRunner(10000, test);

            container.Execute();
            Assert.AreEqual(1, container.Errors.Count);             // neareast --> error

            test = new QaMeasuresAtPoints(fcPoints, null, new[] { fcLines }, 1, 0.01,
                                          LineMSource.VertexPreferred, false);
            container = new QaContainerTestRunner(10000, test);
            container.Execute();
            Assert.AreEqual(0, container.Errors.Count);             // Vertex near point1 --> vertex --> OK

            test = new QaMeasuresAtPoints(fcPoints, null, new[] { fcLines }, 1, 0.01,
                                          LineMSource.VertexRequired, false);
            container = new QaContainerTestRunner(10000, test);
            container.Execute();
            Assert.AreEqual(0, container.Errors.Count);             // Vertex near point1 --> vertex --> OK

            test = new QaMeasuresAtPoints(fcPoints, null, new[] { fcLines }, 0.12, 0.01,
                                          LineMSource.VertexPreferred, false);
            container = new QaContainerTestRunner(10000, test);
            container.Execute();
            Assert.AreEqual(1, container.Errors.Count);
            // No Vertex near point1 --> neareast --> error

            test = new QaMeasuresAtPoints(fcPoints, null, new[] { fcLines }, 0.12, 0.01,
                                          LineMSource.VertexRequired, false);
            container = new QaContainerTestRunner(10000, test);
            container.Execute();
            Assert.AreEqual(1, container.Errors.Count);
            // No Vertex near point1 --> required --> error

            test = new QaMeasuresAtPoints(fcPoints, null, new[] { fcLines }, 0.05, 0.01,
                                          LineMSource.Nearest, true);
            container = new QaContainerTestRunner(10000, test);
            container.Execute();
            Assert.AreEqual(1, container.Errors.Count);
            // No Line near point1 --> line required --> error
        }
Ejemplo n.º 4
0
        public void TestRelatedFactoryMinParameters()
        {
            IFeatureWorkspace testWs = RelTestWs;

            const string  fkTable = "fkTable";
            IFeatureClass fc1     = CreateLineClass(
                testWs, "Fc1_" + Environment.TickCount,
                new List <IField> {
                FieldUtils.CreateIntegerField(fkTable)
            });
            IFeatureClass fc2 = CreateLineClass(testWs, "Fc2_" + Environment.TickCount);

            var ds1 = (IDataset)fc1;
            var ds2 = (IDataset)fc2;

            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            const string IdField = "IdRel";

            fields.AddField(FieldUtils.CreateIntegerField(IdField));

            string relTableName = "Rel_" + ds1.Name;
            ITable relTable     = TestWorkspaceUtils.CreateSimpleTable(testWs, relTableName,
                                                                       fields);

            var dsRel = (IDataset)relTable;

            string             relName = "relName" + Environment.TickCount;
            IRelationshipClass rel     = TestWorkspaceUtils.CreateSimple1NRelationship(
                testWs, relName, relTable, (ITable)fc1, relTable.OIDFieldName, fkTable);

            ((IWorkspaceEdit)testWs).StartEditing(false);

            IRow r1 = AddRow(relTable, new object[] { 12 });
            IRow r2 = AddRow(relTable, new object[] { 14 });

            IFeature f11 = AddFeature(
                fc1, CurveConstruction.StartLine(0, 0).LineTo(4, 0).Curve, new object[] { r1.OID });
            IFeature f12 = AddFeature(
                fc1, CurveConstruction.StartLine(0, 0).LineTo(4, 0).Curve, new object[] { r2.OID });
            IFeature f2 = AddFeature(fc2, CurveConstruction.StartLine(10, 1).LineTo(14, 1).Curve);

            ((IWorkspaceEdit)testWs).StopEditing(true);

            var     model  = new SimpleModel("model", fc1);
            Dataset mds1   = model.AddDataset(new ModelVectorDataset(ds1.Name));
            Dataset mdsRel = model.AddDataset(new ModelTableDataset(dsRel.Name));
            Dataset mds2   = model.AddDataset(new ModelVectorDataset(ds2.Name));

            var clsDesc   = new ClassDescriptor(typeof(QaRelMustBeNearOther));
            var tstDesc   = new TestDescriptor("testNear", clsDesc);
            var condition = new QualityCondition("cndNear", tstDesc);

            QualityConditionParameterUtils.AddParameterValue(condition, "relationTables", mds1);
            QualityConditionParameterUtils.AddParameterValue(condition, "relationTables", mdsRel,
                                                             $"{relTableName}.{IdField} = 12");             // --> only f11 get's checked
            QualityConditionParameterUtils.AddParameterValue(condition, "relation", relName);
            QualityConditionParameterUtils.AddParameterValue(condition, "join", JoinType.InnerJoin);
            QualityConditionParameterUtils.AddParameterValue(condition, "nearClasses", mds2);
            QualityConditionParameterUtils.AddParameterValue(condition, "maximumDistance", 5);
            QualityConditionParameterUtils.AddParameterValue(condition, "relevantRelationCondition",
                                                             string.Empty);

            var fact = new QaRelMustBeNearOther();

            fact.Condition = condition;

            IList <ITest> tests =
                fact.CreateTests(new SimpleDatasetOpener(model.MasterDatabaseWorkspaceContext));

            Assert.AreEqual(1, tests.Count);

            var runner = new QaContainerTestRunner(1000, tests[0]);

            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);
        }
Ejemplo n.º 5
0
        private static void TestMultipartLines(IFeatureWorkspace ws)
        {
            IFieldsEdit fields = new FieldsClass();

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

            IFeatureClass fc =
                DatasetUtils.CreateSimpleFeatureClass(ws, "TestMultipartLines", fields,
                                                      null);

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

            // Crossing parts
            IFeature row1 = fc.CreateFeature();

            row1.Shape = CurveConstruction.StartLine(600000, 200000, 500)
                         .LineTo(600010, 200010, 505)
                         .MoveTo(600010, 200000, 600)
                         .LineTo(600000, 200010, 602)
                         .Curve;

            row1.Store();
            IFeature copy = fc.CreateFeature();

            copy.Shape = row1.ShapeCopy;
            ((ITopologicalOperator)copy.Shape).Simplify();
            copy.Store();

            // 2D identical parts
            IFeature row2 = fc.CreateFeature();

            row2.Shape = CurveConstruction.StartLine(600000, 200000, 500)
                         .LineTo(600010, 200010, 505)
                         .MoveTo(600010, 200010, 600)
                         .LineTo(600000, 200000, 602)
                         .Curve;

            row2.Store();
            copy       = fc.CreateFeature();
            copy.Shape = row1.ShapeCopy;
            ((ITopologicalOperator)copy.Shape).Simplify();
            copy.Store();

            // identical parts
            IFeature row = fc.CreateFeature();

            row.Shape = CurveConstruction.StartLine(600000, 200000, 500)
                        .LineTo(600010, 200010, 505)
                        .MoveTo(600000, 200000, 500)
                        .LineTo(600010, 200010, 505)
                        .Curve;
            row.Store();
            copy       = fc.CreateFeature();
            copy.Shape = row1.ShapeCopy;
            ((ITopologicalOperator)copy.Shape).Simplify();
            copy.Store();
        }
Ejemplo n.º 6
0
        public void CanGetMonotonicitySequencesDecreasingAndIncreasing()
        {
            var polyline = (IPolyline)CurveConstruction.StartLine(CreatePoint(0, 0, 0))
                           .LineTo(CreatePoint(1, 0, 1))
                           .LineTo(CreatePoint(2, 0, 8))
                           .LineTo(CreatePoint(3, 0, 2))
                           .LineTo(CreatePoint(4, 0, 12))
                           .LineTo(CreatePoint(5, 0, 0))
                           .LineTo(CreatePoint(6, 0, -1))
                           .Curve;

            polyline.SpatialReference = CreateSpatialReference(_mTolerance, _xyTolerance);
            GeometryUtils.MakeMAware(polyline);

            var monotonicityTypes = new[]
            {
                esriMonotinicityEnum.esriValueDecreases,
                esriMonotinicityEnum.esriValueIncreases
            };

            IEnumerable <MMonotonicitySequence> result =
                MeasureUtils.GetMonotonicitySequences((ISegmentCollection)polyline,
                                                      monotonicityTypes);

            Assert.IsTrue(4 == result.Count());

            MMonotonicitySequence[] sequences = result.ToArray();

            Assert.IsTrue(sequences[0].MonotonicityType ==
                          esriMonotinicityEnum.esriValueIncreases);

            Assert.IsTrue(sequences[0].Segments.Count == 2);

            Assert.IsTrue(sequences[0].Segments[0].FromPoint.M == 0);
            Assert.IsTrue(sequences[0].Segments[0].ToPoint.M == 1);
            Assert.IsTrue(sequences[0].Segments[1].FromPoint.M == 1);
            Assert.IsTrue(sequences[0].Segments[1].ToPoint.M == 8);

            Assert.IsTrue(sequences[1].MonotonicityType ==
                          esriMonotinicityEnum.esriValueDecreases);

            Assert.IsTrue(sequences[1].Segments.Count == 1);

            Assert.IsTrue(sequences[1].Segments[0].FromPoint.M == 8);
            Assert.IsTrue(sequences[1].Segments[0].ToPoint.M == 2);

            Assert.IsTrue(sequences[2].MonotonicityType ==
                          esriMonotinicityEnum.esriValueIncreases);

            Assert.IsTrue(sequences[2].Segments.Count == 1);

            Assert.IsTrue(sequences[2].Segments[0].FromPoint.M == 2);
            Assert.IsTrue(sequences[2].Segments[0].ToPoint.M == 12);

            Assert.IsTrue(sequences[3].MonotonicityType ==
                          esriMonotinicityEnum.esriValueDecreases);

            Assert.IsTrue(sequences[3].Segments.Count == 2);

            Assert.IsTrue(sequences[3].Segments[0].FromPoint.M == 12);
            Assert.IsTrue(sequences[3].Segments[0].ToPoint.M == 0);
            Assert.IsTrue(sequences[3].Segments[1].FromPoint.M == 0);
            Assert.IsTrue(sequences[3].Segments[1].ToPoint.M == -1);
        }
        public void TestReportSingleErrorPerDuplicateSet()
        {
            IFeatureClass featureClass = CreateLineFeatureClass(
                _testWs, "TestReportSingleErrorPerDuplicateSet");

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

            IPolycurve shape1 = CurveConstruction.StartLine(100, 0)
                                .LineTo(200, 0)
                                .Curve;

            IPolycurve shape2 = CurveConstruction.StartLine(200, 100)
                                .LineTo(300, 100)
                                .Curve;

            IPolycurve shape3 = CurveConstruction.StartLine(300, 200)
                                .LineTo(400, 200)
                                .Curve;

            IPolycurve shape4 = CurveConstruction.StartLine(300, 300)
                                .LineTo(400, 300)
                                .Curve;

            AddFeature(featureClass, shape1);
            AddFeature(featureClass, shape2);
            AddFeature(featureClass, shape3);

            AddFeature(featureClass, shape4);

            // 1. set of duplicates
            AddFeature(featureClass, shape1);
            AddFeature(featureClass, shape2);
            AddFeature(featureClass, shape3);

            // 2. set of duplicates
            AddFeature(featureClass, shape1);
            AddFeature(featureClass, shape2);
            AddFeature(featureClass, shape3);

            // add more duplicates, per geometry

            AddFeature(featureClass, shape1);
            AddFeature(featureClass, shape1);
            AddFeature(featureClass, shape1);

            AddFeature(featureClass, shape2);
            AddFeature(featureClass, shape2);
            AddFeature(featureClass, shape2);

            AddFeature(featureClass, shape3);
            AddFeature(featureClass, shape3);
            AddFeature(featureClass, shape3);

            var test = new QaDuplicateGeometrySelf(featureClass, null, true);

            var testRunner = new QaContainerTestRunner(50, test);

            testRunner.Execute();
            IList <QaError> errors = testRunner.Errors;

            Assert.AreEqual(3, errors.Count);
            Assert.AreEqual(6, errors[0].InvolvedRows.Count);
            Assert.AreEqual(6, errors[1].InvolvedRows.Count);
            Assert.AreEqual(6, errors[2].InvolvedRows.Count);
        }
        public void CanReportLineZError()
        {
            const string testName = "CanReportLineZError";

            IFeatureClass vertexClass = CreateFeatureClass(
                $"{testName}_line", esriGeometryType.esriGeometryPolyline, zAware: true);

            IFeature vertexRow = vertexClass.CreateFeature();

            vertexRow.Shape = CurveConstruction.StartLine(10, 10, 10)
                              .LineTo(100, 10, 10)
                              .Curve;
            vertexRow.Store();

            vertexRow       = vertexClass.CreateFeature();
            vertexRow.Shape = CurveConstruction.StartLine(100, 20, 10)
                              .LineTo(100, 10, 8)
                              .Curve;
            vertexRow.Store();

            vertexRow       = vertexClass.CreateFeature();
            vertexRow.Shape = CurveConstruction.StartLine(10, 50, 10)
                              .LineTo(50, 50, 10)
                              .LineTo(100, 50, 10)
                              .LineTo(50, 40, 10)
                              .LineTo(50, 50, 8)
                              .LineTo(50, 60, 10).Curve;
            vertexRow.Store();

            vertexRow       = vertexClass.CreateFeature();
            vertexRow.Shape = CurveConstruction.StartLine(30, 60, 10)
                              .LineTo(30, 50, 10)
                              .LineTo(30, 10, 8)
                              .LineTo(30, 5, 0).Curve;
            vertexRow.Store();

            vertexRow       = vertexClass.CreateFeature();
            vertexRow.Shape = CurveConstruction.StartLine(10, 80, 10)
                              .LineTo(100, 80, 10)
                              .LineTo(50, 70, 10)
                              .LineTo(50, 80, 8).Curve;
            vertexRow.Store();

            //vertexRow = vertexClass.CreateFeature();
            //vertexRow.Shape =
            //	GeometryFactory.CreatePoint(150, 150, 10);
            //vertexRow.Store();
            //vertexRow = vertexClass.CreateFeature();
            //vertexRow.Shape =
            //	GeometryFactory.CreatePoint(150, 150, 13); // dz > ZTolerance
            //vertexRow.Store();

            IEnvelope verificationEnvelope =
                GeometryFactory.CreateEnvelope(0, 0, 500, 500);

            var test = new QaVertexCoincidenceSelf(vertexClass)
            {
                PointTolerance            = 3,
                ZTolerance                = -1,
                ZCoincidenceTolerance     = -1,
                EdgeTolerance             = 0.001,
                RequireVertexOnNearbyEdge = false,
                VerifyWithinFeature       = true
            };

            var runner = new QaContainerTestRunner(500, test);

            runner.Execute(verificationEnvelope);

            Assert.AreEqual(4, runner.Errors.Count);
        }
Ejemplo n.º 9
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.º 10
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);
                }
            }
        }
Ejemplo n.º 11
0
        private static void TestMultiTables(IFeatureWorkspace ws)
        {
            IFieldsEdit lineFields = new FieldsClass();

            lineFields.AddField(FieldUtils.CreateOIDField());
            lineFields.AddField(FieldUtils.CreateTextField("FromVal1", 50));
            lineFields.AddField(FieldUtils.CreateTextField("ToVal1", 50));
            lineFields.AddField(FieldUtils.CreateShapeField(
                                    "Shape", esriGeometryType.esriGeometryPolyline,
                                    SpatialReferenceUtils.CreateSpatialReference
                                        ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                        true), 1000));

            IFeatureClass lineFc1 = DatasetUtils.CreateSimpleFeatureClass(
                ws, "TestMultiTablesLineFc1", lineFields);

            lineFields = new FieldsClass();
            lineFields.AddField(FieldUtils.CreateOIDField());
            lineFields.AddField(FieldUtils.CreateTextField("FromVal2", 50));
            lineFields.AddField(FieldUtils.CreateTextField("ToVal2", 50));
            lineFields.AddField(FieldUtils.CreateShapeField(
                                    "Shape", esriGeometryType.esriGeometryPolyline,
                                    SpatialReferenceUtils.CreateSpatialReference
                                        ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                        true), 1000));

            IFeatureClass lineFc2 = DatasetUtils.CreateSimpleFeatureClass(
                ws, "TestMultiTablesLineFc2", lineFields);

            IFieldsEdit pointFields = new FieldsClass();

            pointFields.AddField(FieldUtils.CreateOIDField());
            pointFields.AddField(FieldUtils.CreateTextField("Name1", 50));
            pointFields.AddField(FieldUtils.CreateShapeField(
                                     "Shape", esriGeometryType.esriGeometryPoint,
                                     SpatialReferenceUtils.CreateSpatialReference
                                         ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                         true), 1000));

            IFeatureClass pointFc1 = DatasetUtils.CreateSimpleFeatureClass(
                ws, "TestMultiTablesPointFc1", pointFields);

            pointFields = new FieldsClass();
            pointFields.AddField(FieldUtils.CreateOIDField());
            pointFields.AddField(FieldUtils.CreateTextField("Name2", 50));
            pointFields.AddField(FieldUtils.CreateShapeField(
                                     "Shape", esriGeometryType.esriGeometryPoint,
                                     SpatialReferenceUtils.CreateSpatialReference
                                         ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                         true), 1000));

            IFeatureClass pointFc2 = DatasetUtils.CreateSimpleFeatureClass(
                ws, "TestMultiTablesPointFc2", pointFields);

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

            IPoint center = new PointClass();

            center.PutCoords(200, 200);

            IFeature row1 = lineFc1.CreateFeature();

            row1.set_Value(1, "Name");
            row1.set_Value(2, "AndererName");
            row1.Shape = CurveConstruction.StartLine(100, 100).LineTo(center).Curve;
            row1.Store();

            IFeature row2 = lineFc1.CreateFeature();

            row2.set_Value(1, "Name");
            row2.Shape = CurveConstruction.StartLine(200, 100).LineTo(center).Curve;
            row2.Store();

            IFeature row3 = lineFc2.CreateFeature();

            row3.set_Value(1, "Name");
            row3.Shape = CurveConstruction.StartLine(300, 100).LineTo(center).Curve;
            row3.Store();

            IFeature row4 = pointFc1.CreateFeature();

            row4.set_Value(1, "AndererName");
            row4.Shape = center;
            row4.Store();

            IFeature row5 = pointFc2.CreateFeature();

            row5.set_Value(1, "AndererName");
            row5.Shape = center;
            row5.Store();

            IFeature row6 = pointFc2.CreateFeature();

            row6.set_Value(1, "Ignore2");
            row6.Shape = center;
            row6.Store();

            string lineField = string.Format("IIF({0}, FromVal1, ToVal1)",
                                             QaConnections.StartsIn);
            var test = new QaLineConnectionFieldValues(
                new[] { lineFc1, lineFc2 }, new[] { lineField, "FromVal2" },
                LineFieldValuesConstraint.AllEqualOrValidPointExists,
                new[] { pointFc1, pointFc2 }, new[] { "Name1", "Name2" },
                PointFieldValuesConstraint.AllEqualAndMatchAnyLineValue,
                new[] { null, "Name2 = 'Ignore2'" });

            var runner = new QaTestRunner(test);

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

            var containerRunner = new QaContainerTestRunner(500, test);

            containerRunner.Execute();
            Assert.AreEqual(0, containerRunner.Errors.Count);
        }
Ejemplo n.º 12
0
        public void ValidateCustomParameters()
        {
            IFeatureClass fc = new FeatureClassMock(1, "LineFc",
                                                    esriGeometryType.esriGeometryPolyline);

            IFeature f = fc.CreateFeature();

            f.Shape = CurveConstruction.StartLine(0, 0)
                      .LineTo(10, 10)
                      .BezierTo(15, 15, 20, 20, 25, 20)
                      .CircleTo(30, 30)
                      .BezierTo(40, 40, 45, 45, 50, 45)
                      .BezierTo(60, 45, 70, 45, 80, 40)
                      .Curve;
            f.Store();

            var test   = new QaCurve(fc);
            var runner = new QaTestRunner(test);

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

            // Group by curve type
            test = new QaCurve(fc)
            {
                GroupIssuesBySegmentType = true
            };

            runner = new QaTestRunner(test);
            runner.Execute(f);
            Assert.AreEqual(3, runner.Errors.Count);

            // allow circular arcs
            test = new QaCurve(fc)
            {
                AllowedNonLinearSegmentTypes =
                    new[]
                {
                    NonLinearSegmentType.CircularArc
                }
            };

            runner = new QaTestRunner(test);
            runner.Execute(f);
            Assert.AreEqual(2, runner.Errors.Count);

            // allow circular arcs and beziers
            test = new QaCurve(fc)
            {
                AllowedNonLinearSegmentTypes =
                    new[]
                {
                    NonLinearSegmentType.CircularArc,
                    NonLinearSegmentType.Bezier
                }
            };

            runner = new QaTestRunner(test);
            runner.Execute(f);
            Assert.AreEqual(0, runner.Errors.Count);
        }
Ejemplo n.º 13
0
        public void TestMultipart()
        {
            IFeatureWorkspace ws         = TestWorkspaceUtils.CreateInMemoryWorkspace("TestMultipart");
            IFieldsEdit       lineFields = new FieldsClass();

            lineFields.AddField(FieldUtils.CreateOIDField());
            lineFields.AddField(FieldUtils.CreateTextField("FromVal", 50));
            lineFields.AddField(FieldUtils.CreateTextField("ToVal", 50));
            lineFields.AddField(FieldUtils.CreateShapeField(
                                    "Shape", esriGeometryType.esriGeometryPolyline,
                                    SpatialReferenceUtils.CreateSpatialReference
                                        ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                        true), 1000));

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

            IFieldsEdit pointFields = new FieldsClass();

            pointFields.AddField(FieldUtils.CreateOIDField());
            pointFields.AddField(FieldUtils.CreateTextField("Name", 50));
            pointFields.AddField(FieldUtils.CreateShapeField(
                                     "Shape", esriGeometryType.esriGeometryPoint,
                                     SpatialReferenceUtils.CreateSpatialReference
                                         ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                         true), 1000));

            IFeatureClass pointFc = DatasetUtils.CreateSimpleFeatureClass(
                ws, "TestFieldValuesExpression2", pointFields);

            IPoint center = new PointClass();

            center.PutCoords(200, 200);

            IFeature row1 = lineFc.CreateFeature();

            row1.set_Value(1, "Name");
            row1.set_Value(2, "AndererName");
            row1.Shape =
                CurveConstruction.StartLine(100, 100).LineTo(200, 160).MoveTo(100, 160)
                .LineTo(center).Curve;
            row1.Store();

            IFeature row2 = lineFc.CreateFeature();

            row2.set_Value(1, "Name");
            row2.Shape = CurveConstruction
                         .StartLine(200, 100).LineTo(300, 140).MoveTo(200, 160).LineTo(center)
                         .Curve;
            row2.Store();

            IFeature row3 = lineFc.CreateFeature();

            row3.set_Value(1, "Name");
            row3.Shape = CurveConstruction
                         .StartLine(300, 100).LineTo(300, 140).MoveTo(300, 160).LineTo(center)
                         .Curve;
            row3.Store();

            IFeature row4 = pointFc.CreateFeature();

            row4.set_Value(1, "AndererName");
            row4.Shape = center;
            row4.Store();

            string lineField = $"IIF({QaConnections.StartsIn}, FromVal, ToVal)";
            var    test      = new QaLineConnectionFieldValues(
                lineFc, lineField,
                LineFieldValuesConstraint.AllEqualOrValidPointExists,
                pointFc, "Name",
                PointFieldValuesConstraint.AllEqualAndMatchAnyLineValue);

            test.UseMultiParts = false;
            var runner = new QaContainerTestRunner(500, test);

            Assert.AreEqual(0, runner.Execute());

            test.UseMultiParts = true;
            runner             = new QaContainerTestRunner(500, test);
            Assert.AreEqual(1, runner.Execute());
        }
Ejemplo n.º 14
0
        private static void TestFieldValues(IFeatureWorkspace ws)
        {
            IFieldsEdit lineFields = new FieldsClass();

            lineFields.AddField(FieldUtils.CreateOIDField());
            lineFields.AddField(FieldUtils.CreateTextField("FromVal", 50));
            lineFields.AddField(FieldUtils.CreateTextField("ToVal", 50));
            lineFields.AddField(FieldUtils.CreateShapeField(
                                    "Shape", esriGeometryType.esriGeometryPolyline,
                                    SpatialReferenceUtils.CreateSpatialReference
                                        ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                        true), 1000));

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

            IFieldsEdit fields = new FieldsClass();

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

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

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

            IPoint center = new PointClass();

            center.PutCoords(200, 200);

            IFeature row1 = lineFc.CreateFeature();

            row1.set_Value(1, "Name");
            row1.Shape = CurveConstruction.StartLine(100, 100).LineTo(center).Curve;
            row1.Store();

            IFeature row2 = lineFc.CreateFeature();

            row2.set_Value(1, "Name");
            row2.Shape = CurveConstruction.StartLine(200, 100).LineTo(center).Curve;
            row2.Store();

            IFeature row3 = lineFc.CreateFeature();

            row3.set_Value(1, "Name");
            row3.Shape = CurveConstruction.StartLine(300, 100).LineTo(center).Curve;
            row3.Store();

            IFeature row4 = lineFc.CreateFeature();

            row4.set_Value(1, "Name");
            row4.Shape = CurveConstruction.StartLine(300, 100).LineTo(400, 100).Curve;
            row4.Store();

            IFeature row5 = pointFc.CreateFeature();

            row5.set_Value(1, "Name");
            row5.Shape = center;
            row5.Store();

            // configure and run the test
            var test = new QaLineConnectionFieldValues(
                lineFc, "FromVal",
                LineFieldValuesConstraint.AllEqualOrValidPointExists,
                pointFc, "Name",
                PointFieldValuesConstraint.AllEqualAndMatchAnyLineValue);

            var runner = new QaTestRunner(test);

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

            var containerRunner = new QaContainerTestRunner(500, test);

            containerRunner.Execute();
            Assert.AreEqual(0, containerRunner.Errors.Count);
        }
Ejemplo n.º 15
0
        private static void TestUniqueLineFieldValuesError(IFeatureWorkspace ws)
        {
            IFieldsEdit lineFields = new FieldsClass();

            lineFields.AddField(FieldUtils.CreateOIDField());
            lineFields.AddField(FieldUtils.CreateTextField("Name", 50));
            lineFields.AddField(FieldUtils.CreateShapeField(
                                    "Shape", esriGeometryType.esriGeometryPolyline,
                                    SpatialReferenceUtils.CreateSpatialReference
                                        ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                        true), 1000));

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

            IFieldsEdit pointFields = new FieldsClass();

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

            IFeatureClass pointFc = DatasetUtils.CreateSimpleFeatureClass(
                ws, "TestUniqueLineFieldValuesError2", pointFields);

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

            IPoint center = new PointClass();

            center.PutCoords(200, 200);

            IFeature line1 = lineFc.CreateFeature();

            line1.set_Value(1, "UniqueValue");
            line1.Shape = CurveConstruction.StartLine(100, 100).LineTo(center).Curve;
            line1.Store();

            IFeature line2 = lineFc.CreateFeature();

            line2.set_Value(1, "DuplicateValue");
            line2.Shape = CurveConstruction.StartLine(200, 100).LineTo(center).Curve;
            line2.Store();

            IFeature line3 = lineFc.CreateFeature();

            line3.set_Value(1, "DuplicateValue");
            line3.Shape = CurveConstruction.StartLine(300, 100).LineTo(center).Curve;
            line3.Store();

            // line connected to line4 (no point at junction) --> ERROR
            IFeature line4 = lineFc.CreateFeature();

            line4.set_Value(1, "DuplicateValue");
            line4.Shape = CurveConstruction.StartLine(300, 100).LineTo(400, 100).Curve;
            line4.Store();

            // line connected to row4 (no point at junction, but different field value)
            IFeature row5 = lineFc.CreateFeature();

            row5.set_Value(1, "OtherValue");
            row5.Shape = CurveConstruction.StartLine(400, 100).LineTo(500, 100).Curve;
            row5.Store();

            // point connected to line rows 1,2,3
            IFeature point = pointFc.CreateFeature();

            point.Shape = center;
            point.Store();

            // configure and run the test
            var test = new QaLineConnectionFieldValues(
                lineFc, "Name",
                LineFieldValuesConstraint.UniqueOrValidPointExists,
                pointFc, null,
                PointFieldValuesConstraint.NoConstraint);

            var runner = new QaTestRunner(test);

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

            var containerRunner = new QaContainerTestRunner(1000, test);

            containerRunner.Execute();
            Assert.AreEqual(1, containerRunner.Errors.Count);
        }
Ejemplo n.º 16
0
        public void CanTestPointNotNearPolyline()
        {
            IFeatureWorkspace testWs =
                TestWorkspaceUtils.CreateInMemoryWorkspace("QaPointNotNearTest");

            IFieldsEdit fields = new FieldsClass();

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

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

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

            IFeature polyFeature = polyFc.CreateFeature();

            polyFeature.Shape = CurveConstruction.StartLine(0, 0, 0)
                                .LineTo(100, 0, 10)
                                .LineTo(50, 100, 10)
                                .Curve;
            polyFeature.Store();

            IFeature p1 = pointFc.CreateFeature();

            p1.Shape = GeometryFactory.CreatePoint(90, 0, 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.GeometryComponents = new[] { GeometryComponent.Boundary };
            runner = new QaContainerTestRunner(1000, test2);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

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

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

            var test4 = new QaPointNotNear(pointFc, 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(pointFc, polyFc, 11.0);

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

            var test6 = new QaPointNotNear(pointFc, polyFc, 11.0);

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

            var test7 = new QaPointNotNear(pointFc, polyFc, 91.0);

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

            var test8 = new QaPointNotNear(pointFc, polyFc, 91.0);

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

            var test9 = new QaPointNotNear(pointFc, polyFc, 120.0);

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

            var test10 = new QaPointNotNear(pointFc, polyFc, 89.0);

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

            var test11 = new QaPointNotNear(pointFc, polyFc, 92.0);

            test11.GeometryComponents = new[] { GeometryComponent.LineEndPoints };
            runner = new QaContainerTestRunner(1000, test11);
            runner.Execute();
            Assert.AreEqual(1, runner.Errors.Count);
        }
Ejemplo n.º 17
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.º 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
        public void CanGetErrorSequences()
        {
            var polyline = (IPolyline)CurveConstruction.StartLine(CreatePoint(0, 0, 0))
                           .LineTo(CreatePoint(1, 0, 1))                                          // +
                           .LineTo(CreatePoint(1, 0, 2))                                          // +
                           .LineTo(CreatePoint(2, 0, 3))                                          // +
                           .LineTo(CreatePoint(3, 0, 3))                                          // =
                           .LineTo(CreatePoint(4, 0, 3))                                          // =
                           .LineTo(CreatePoint(5, 0, 1))                                          // -
                           .LineTo(CreatePoint(6, 0, 0))                                          // -
                           .LineTo(CreatePoint(7, 0, 9))                                          // +
                           .LineTo(CreatePoint(8, 0, 4))                                          // -
                           .Curve;

            polyline.SpatialReference = CreateSpatialReference(_mTolerance, _xyTolerance);
            GeometryUtils.MakeMAware(polyline);

            IEnumerable <MMonotonicitySequence> result;

            MMonotonicitySequence[] sequences;

            result = MeasureUtils.GetErrorSequences(polyline, MonotonicityDirection.Increasing,
                                                    () => false, true);
            sequences = result.ToArray();

            Assert.AreEqual(result.Count(), 2);
            Assert.AreEqual(sequences[0].Segments.Count, 2);
            Assert.AreEqual(sequences[1].Segments.Count, 1);

            result = MeasureUtils.GetErrorSequences(polyline, MonotonicityDirection.Increasing,
                                                    () => false, false);
            sequences = result.ToArray();

            Assert.AreEqual(result.Count(), 3);
            Assert.AreEqual(sequences[0].Segments.Count, 2);
            Assert.AreEqual(sequences[1].Segments.Count, 2);
            Assert.AreEqual(sequences[2].Segments.Count, 1);

            result = MeasureUtils.GetErrorSequences(polyline, MonotonicityDirection.Increasing,
                                                    () => true, true);
            sequences = result.ToArray();

            Assert.AreEqual(result.Count(), 2);
            Assert.AreEqual(sequences[0].Segments.Count, 3);
            Assert.AreEqual(sequences[1].Segments.Count, 1);

            result = MeasureUtils.GetErrorSequences(polyline, MonotonicityDirection.Any,
                                                    () => false, true);
            sequences = result.ToArray();

            Assert.AreEqual(result.Count(), 2);
            Assert.AreEqual(sequences[0].Segments.Count, 2);
            Assert.AreEqual(sequences[1].Segments.Count, 1);

            result = MeasureUtils.GetErrorSequences(polyline, MonotonicityDirection.Any,
                                                    () => false, false);
            sequences = result.ToArray();

            Assert.AreEqual(result.Count(), 3);
            Assert.AreEqual(sequences[0].Segments.Count, 2);
            Assert.AreEqual(sequences[1].Segments.Count, 2);
            Assert.AreEqual(sequences[2].Segments.Count, 1);
        }
Ejemplo n.º 20
0
        public void CanTestPointNotNearPolylineRightSide()
        {
            IFeatureWorkspace testWs =
                TestWorkspaceUtils.CreateInMemoryWorkspace(
                    "CanTestPointNotNearPolylineRightSide");

            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateDoubleField("minDistance"));
            fields.AddField(FieldUtils.CreateDoubleField("rightSideDistance"));
            fields.AddField(FieldUtils.CreateIntegerField("flip"));
            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", esriGeometryType.esriGeometryPolyline,
                                SpatialReferenceUtils.CreateSpatialReference
                                    ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                    true), 1000, true));

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

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

            IFeature polyFeature = polyFc.CreateFeature();

            polyFeature.set_Value(1, 5);
            polyFeature.set_Value(2, 10);
            polyFeature.set_Value(3, 1);
            polyFeature.Shape = CurveConstruction.StartLine(0, 0, 0)
                                .LineTo(100, 0, 10)
                                .LineTo(100, 100, 10)
                                .Curve;
            polyFeature.Store();

            IFeature p1 = pointFc.CreateFeature();

            p1.Shape = GeometryFactory.CreatePoint(10, 7, 0);
            p1.Store();

            IFeature p2 = pointFc.CreateFeature();

            p2.Shape = GeometryFactory.CreatePoint(-0.1, 7, 0);
            p2.Store();

            IFeature p3 = pointFc.CreateFeature();

            p3.Shape = GeometryFactory.CreatePoint(93, 100.1, 10);
            p3.Store();

            //QaPointNotNear.UseQueryPointAndDistance = true;

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

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

            var test2 = new QaPointNotNear(pointFc, new[] { polyFc }, 10.0, null,
                                           new[] { "minDistance" });

            runner = new QaContainerTestRunner(1000, test2);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test3 = new QaPointNotNear(pointFc, new[] { polyFc }, 10, null, new[] { "5" },
                                           new[] { "rightSideDistance" },
                                           null);

            runner = new QaContainerTestRunner(1000, test3);
            runner.Execute();
            Assert.AreEqual(0, runner.Errors.Count);

            var test4 = new QaPointNotNear(pointFc, new[] { polyFc }, 10, null,
                                           new[] { "5" },
                                           new[] { "rightSideDistance" },
                                           new[] { "true" });

            runner = new QaContainerTestRunner(1000, test4);
            runner.Execute();
            Assert.AreEqual(3, runner.Errors.Count);

            var test5 = new QaPointNotNear(pointFc, new[] { polyFc }, 10, null,
                                           new[] { "5" },
                                           new[] { "rightSideDistance" },
                                           new[] { "flip > 0" });

            runner = new QaContainerTestRunner(1000, test5);
            runner.Execute();
            Assert.AreEqual(3, runner.Errors.Count);
        }
Ejemplo n.º 21
0
        private void TestWithTolerance(IFeatureWorkspace ws)
        {
            IFieldsEdit fields = new FieldsClass();

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

            IFeatureClass fc =
                DatasetUtils.CreateSimpleFeatureClass(ws, "TestWithTolerance", fields,
                                                      null);
            IList <ITable> tbls = new[] { (ITable)fc };

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

            {
                IFeature row = fc.CreateFeature();
                row.set_Value(1, 1);
                row.Shape =
                    CurveConstruction.StartLine(100, 99.93).LineTo(200, 200).Curve;
                row.Store();
            }
            {
                IFeature row = fc.CreateFeature();
                row.set_Value(1, 2);
                row.Shape =
                    CurveConstruction.StartLine(100, 99.95).LineTo(100, 200).Curve;
                row.Store();
            }

            IList <QaConnectionRule> rules = new[]
            {
                new QaConnectionRule(tbls, new[] { "LineTyp = 1" }),
                new QaConnectionRule(tbls, new[] { "LineTyp = 2" })
            };
            var test = new QaConnections(new[] { fc }, rules, 0.2);

            test.QaError += Test_QaError;
            _errorCount   = 0;
            test.Execute();
            Assert.AreEqual(1, _errorCount);
            test.QaError -= Test_QaError;

            var container = new TestContainer();

            container.AddTest(test);
            container.TileSize = 100;
            IEnvelope box = new EnvelopeClass();

            container.QaError += Test_QaError;

            _errorCount = 0;
            container.Execute();
            Assert.AreEqual(1, _errorCount);

            _errorCount = 0;
            box.PutCoords(0, 0, 300, 300);
            container.Execute(box);
            Assert.AreEqual(1, _errorCount);

            _errorCount = 0;
            box.PutCoords(1, 0, 300, 300);
            container.Execute(box);
            Assert.AreEqual(1, _errorCount);
        }
Ejemplo n.º 22
0
        public void CanTestFactory()
        {
            Type type = typeof(QaMinSegAngleFactory);

            var testDescriptor = new TestDescriptor
            {
                TestFactoryDescriptor = new ClassDescriptor(type)
            };

            const string  fcName = "CanTestFactory";
            IFeatureClass fc     = CreateLineClass(_testWs, fcName);

            IFeature row1 = fc.CreateFeature();

            row1.Shape =
                CurveConstruction.StartLine(0, 0, 0)
                .LineTo(0, 1, 0)
                .LineTo(0.1, 0, 0)
                .LineTo(0.1, 1, 100)
                .LineTo(0.1, 2, 100)
                .CircleTo(GeometryFactory.CreatePoint(0.2, 0, 100))
                .Curve;
            row1.Store();

            double limit = FormatUtils.Radians2AngleInUnits(0.1, AngleUnit.Degree);

            var model = new SimpleModel("model", fc);

            esriGeometryType esriGeometryType = fc.ShapeType;

            var suiteGeometryType = (ProSuiteGeometryType)esriGeometryType;

            ModelVectorDataset ds = model.AddDataset(
                new ModelVectorDataset(fcName)
            {
                GeometryType = new GeometryTypeShape(suiteGeometryType.ToString(),
                                                     suiteGeometryType)
            });

            var condition = new QualityCondition("testtest", testDescriptor);

            QualityConditionParameterUtils.AddParameterValue(condition, "featureClass", ds);
            QualityConditionParameterUtils.AddParameterValue(condition, "limit", limit);
            QualityConditionParameterUtils.AddParameterValue(condition, "is3D", true);

            TestFactory factory = TestFactoryUtils.CreateTestFactory(condition);

            Assert.IsNotNull(factory);

            IList <ITest> tests =
                factory.CreateTests(new SimpleDatasetOpener(model.MasterDatabaseWorkspaceContext));

            Assert.AreEqual(1, tests.Count);
            ITest test = tests[0];

            var runner = new QaContainerTestRunner(1000, test);

            runner.Execute();

            Assert.AreEqual(2, runner.Errors.Count);
        }
        public void TestClosedLines()
        {
            var           ws = TestWorkspaceUtils.CreateInMemoryWorkspace("ClosedLines");
            IFeatureClass polylineFeatureClass;
            IFeatureClass pointFeatureClass;

            CreateTestFeatureClasses("polygons5", "points5",
                                     out polylineFeatureClass,
                                     out pointFeatureClass, ws, polygonAsClosedLines: true);

            IFeature emptyFeature = polylineFeatureClass.CreateFeature();

            emptyFeature.Shape =
                CurveConstruction.StartLine(100, 300)
                .LineTo(200, 300)
                .LineTo(200, 400)
                .LineTo(100, 400)
                .LineTo(100, 300)
                .Curve;
            emptyFeature.Store();

            IFeature counterClockwiseFeature = polylineFeatureClass.CreateFeature();

            counterClockwiseFeature.Shape =
                CurveConstruction.StartLine(100, 100)
                .LineTo(200, 100)
                .LineTo(200, 200)
                .LineTo(100, 200)
                .LineTo(100, 100)
                .Curve;
            counterClockwiseFeature.Store();

            IFeature clockwiseFeature = polylineFeatureClass.CreateFeature();

            clockwiseFeature.Shape =
                CurveConstruction.StartLine(100, 100)
                .LineTo(100, 200)
                .LineTo(200, 200)
                .LineTo(200, 100)
                .LineTo(100, 100)
                .Curve;
            clockwiseFeature.Store();

            IFeature notClosedFeature = polylineFeatureClass.CreateFeature();

            notClosedFeature.Shape =
                CurveConstruction.StartLine(300, 100)
                .LineTo(400, 100)
                .LineTo(400, 200)
                .Curve;
            notClosedFeature.Store();

            IFeature pointFeature1 = pointFeatureClass.CreateFeature();

            pointFeature1.Shape = GeometryFactory.CreatePoint(150, 150);
            pointFeature1.Store();

            IFeature pointFeature2 = pointFeatureClass.CreateFeature();

            pointFeature2.Shape = GeometryFactory.CreatePoint(350, 100);
            pointFeature2.Store();

            var test = new QaContainedPointsCount(polylineFeatureClass, pointFeatureClass, 1,
                                                  string.Empty)
            {
                PolylineUsage = PolylineUsage.AsIs
            };
            var containerRunner = new QaContainerTestRunner(1000, test);

            containerRunner.Execute();
            Assert.AreEqual(3, containerRunner.Errors.Count);

            test = new QaContainedPointsCount(polylineFeatureClass, pointFeatureClass, 1,
                                              string.Empty)
            {
                PolylineUsage = PolylineUsage.AsPolygonIfClosedElseReportIssue
            };
            containerRunner = new QaContainerTestRunner(1000, test);
            containerRunner.Execute();
            Assert.AreEqual(2, containerRunner.Errors.Count);

            test = new QaContainedPointsCount(polylineFeatureClass, pointFeatureClass, 1,
                                              string.Empty)
            {
                PolylineUsage = PolylineUsage.AsPolygonIfClosedElseIgnore
            };
            containerRunner = new QaContainerTestRunner(1000, test);
            containerRunner.Execute();
            Assert.AreEqual(1, containerRunner.Errors.Count);

            test = new QaContainedPointsCount(polylineFeatureClass, pointFeatureClass, 1,
                                              string.Empty)
            {
                PolylineUsage = PolylineUsage.AsPolygonIfClosedElseAsPolyline
            };
            containerRunner = new QaContainerTestRunner(1000, test);
            containerRunner.Execute();
            Assert.AreEqual(1, containerRunner.Errors.Count);
        }
Ejemplo n.º 24
0
        private static void TestTileBorder(IFeatureWorkspace ws)
        {
            ISpatialReference sr = SpatialReferenceUtils.CreateSpatialReference
                                       ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95, true);

            IFieldsEdit fieldsPoint = new FieldsClass();

            fieldsPoint.AddField(FieldUtils.CreateOIDField());
            fieldsPoint.AddField(FieldUtils.CreateShapeField(
                                     "Shape", esriGeometryType.esriGeometryPoint, sr, 1000));

            IFeatureClass fcPoints =
                DatasetUtils.CreateSimpleFeatureClass(ws, "TileBorderPoints", fieldsPoint);

            IFieldsEdit fieldsLine = new FieldsClass();

            fieldsLine.AddField(FieldUtils.CreateOIDField());
            fieldsLine.AddField(FieldUtils.CreateShapeField(
                                    "Shape", esriGeometryType.esriGeometryPolyline, sr, 1000));

            IFeatureClass fcLines =
                DatasetUtils.CreateSimpleFeatureClass(ws, "TileBorderLines", fieldsLine);

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

            IFeature point1 = fcPoints.CreateFeature();

            point1.Shape = GeometryFactory.CreatePoint(999.5, 100);
            // near fLine1, but error from tile 2 ?
            point1.Store();

            IFeature point2 = fcPoints.CreateFeature();

            point2.Shape = GeometryFactory.CreatePoint(999.5, 400);
            // near fLine2, but error from tile 1 ?
            point2.Store();

            IFeature   fLine1 = fcLines.CreateFeature();
            IPolycurve l1     = CurveConstruction.StartLine(0, 10)
                                .LineTo(998.7, 10)
                                .LineTo(998.7, 200)
                                .Curve;

            fLine1.Shape = l1;
            fLine1.Store();

            IFeature   fLine2 = fcLines.CreateFeature();
            IPolycurve l2     = CurveConstruction.StartLine(2000, 500)
                                .LineTo(1000.3, 500)
                                .LineTo(1000.3, 300)
                                .Curve;

            fLine2.Shape = l2;
            fLine2.Store();

            var test = new QaPointOnLine(fcPoints, new[] { fcLines }, 1);

            using (var r = new QaTestRunner(test))             // no tiling no problem
            {
                r.Execute();
                Assert.AreEqual(0, r.Errors.Count);
            }

            var container = new QaContainerTestRunner(1000, test);

            container.Execute(GeometryFactory.CreateEnvelope(0, 0, 2000, 500));
            Assert.AreEqual(0, container.Errors.Count);
        }
Ejemplo n.º 25
0
        public void TestRelatedFactory()
        {
            IFeatureWorkspace initTestWs = _testWs;

            try
            {
                _testWs = RelTestWs;

                IFeatureClass fc1 = CreateFeatureClass("TestRelatedFactory",
                                                       esriGeometryType.esriGeometryPolyline);

                var ds1 = (IDataset)fc1;

                IFieldsEdit fields = new FieldsClass();
                fields.AddField(FieldUtils.CreateOIDField());
                fields.AddField(FieldUtils.CreateIntegerField(_fkFieldName));
                fields.AddField(FieldUtils.CreateTextField(_textFieldName, 200));

                string tableName = ds1.Name + "_table";
                ITable table     = TestWorkspaceUtils.CreateSimpleTable(_testWs, tableName, fields);

                var tableDataset = (IDataset)table;

                string             relClassName = "relClass" + Math.Abs(Environment.TickCount);
                IRelationshipClass rel          = TestWorkspaceUtils.CreateSimpleMNRelationship(
                    _testWs, relClassName, table, (ITable)fc1, "fkGrp", "fkFc");

                ((IWorkspaceEdit)_testWs).StartEditing(false);

                IFeature f = AddFeature(fc1,
                                        CurveConstruction.StartLine(0, 0)
                                        .LineTo(4, 0)
                                        .Curve);
                IRow r = AddRow(table, textFieldValue: "A");
                rel.CreateRelationship((IObject)r, f);
                r = AddRow(table, textFieldValue: "B");
                rel.CreateRelationship((IObject)r, f);

                f = AddFeature(fc1,
                               CurveConstruction.StartLine(4, 0)
                               .LineTo(4, 8)
                               .Curve);
                r = AddRow(table, textFieldValue: "A");
                rel.CreateRelationship((IObject)r, f);

                ((IWorkspaceEdit)_testWs).StopEditing(true);

                var     model  = new SimpleModel("model", fc1);
                Dataset mds1   = model.AddDataset(new ModelVectorDataset(ds1.Name));
                Dataset mdsRel = model.AddDataset(new ModelTableDataset(tableDataset.Name));

                var clsDesc   = new ClassDescriptor(typeof(QaRelRegularExpression));
                var tstDesc   = new TestDescriptor("GroupEnds", clsDesc);
                var condition = new QualityCondition("cndGroupEnds", tstDesc);
                QualityConditionParameterUtils.AddParameterValue(condition, "relationTables", mds1);
                QualityConditionParameterUtils.AddParameterValue(condition, "relationTables", mdsRel);
                QualityConditionParameterUtils.AddParameterValue(condition, "relation", relClassName);
                QualityConditionParameterUtils.AddParameterValue(condition, "join", JoinType.InnerJoin);
                QualityConditionParameterUtils.AddParameterValue(condition, "pattern", "A");
                QualityConditionParameterUtils.AddParameterValue(condition, "fieldNames",
                                                                 $"{tableName}.{_textFieldName}");
                QualityConditionParameterUtils.AddParameterValue(condition, "MatchIsError", false);
                //condition.AddParameterValue("PatternDescription", "Hallo");

                var factory = new QaRelRegularExpression {
                    Condition = condition
                };

                IList <ITest> tests =
                    factory.CreateTests(new SimpleDatasetOpener(model.MasterDatabaseWorkspaceContext));
                Assert.AreEqual(1, tests.Count);

                IList <QaError> errors = Run(tests[0], 1000);
                AssertErrors(1, errors);

                IList <InvolvedRow> involvedRows = errors[0].InvolvedRows;
                Assert.AreEqual(2, involvedRows.Count);
                Assert.AreEqual($"{tableName}.{_textFieldName}", errors[0].AffectedComponent);
                Assert.AreEqual("RegularExpression.FieldValueDoesNotMatchRegularExpression",
                                errors[0].IssueCode?.ID);

                // TOP-4945: expected involved dataset name: base table name, not joined table name
                Assert.IsTrue(tableName == involvedRows[0].TableName ||
                              tableName == involvedRows[1].TableName);
            }
            finally
            {
                _testWs = initTestWs;
            }
        }
        public void CanDetectConnectedAndNotConnected()
        {
            IFeatureClass fcArea1;
            IFeatureClass fcArea2;
            IFeatureClass fcBorder1;
            IFeatureClass fcBorder2;

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

            // border lines are coincident
            AddLineFeature(fcBorder1, 0, 0, 100, 0, stateId: "A");
            AddLineFeature(fcBorder2, 40, 0, 0, 0, stateId: "B");
            AddFeature(fcBorder2,
                       CurveConstruction.StartLine(100, 0.2)
                       .LineTo(50, 0.2)
                       .LineTo(50, 0)
                       .LineTo(40, 0)
                       .Curve,
                       stateId: "B");

            // connected to border:
            AddAreaFeature(fcArea1, 10, 0, 90, 5, stateId: "A");

            AddAreaFeature(fcArea2, 15, -5, 30, 0, stateId: "B");             // connected
            AddAreaFeature(fcArea2, 30, -5, 50, 0, stateId: "B");             // connected
            AddAreaFeature(fcArea2, 50, -5, 80, 0.2, stateId: "B");           // not connected

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

            // 10-15: missing
            // 50-80: not coincident
            // 80-90: missing
            // TODO currently fails, revise subtraction of buffer from remainder:
            // When search distance is large compared to offset between borders, error
            // geometry of "NoCandidate" is significantly reduced, to the point that
            // it can become empty.
            // (expected values may have to be adapted, maybe not achievable as defined below)
            var expectedErrors =
                new Predicate <QaError>[]
            {
                e => HasCode(e, "NoMatch.NoCandidate") &&
                HasLength(e, 5) &&
                HasEnvelope(e, xmin: 10, xmax: 15),
                e =>
                HasCode(
                    e, "NoMatch.CandidateExists.BordersNotCoincident.ConstraintsFulfilled") &&
                HasLength(e, 30 + 30.2 + 0.5) &&
                HasEnvelope(e, xmin: 49.5, xmax: 80, ymax: 0.2),
                e => HasCode(e, "NoMatch.NoCandidate") &&
                HasLength(e, 10) &&
                HasEnvelope(e, xmin: 80, xmax: 90)
            };

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

            AssertUtils.ExpectedErrors(3, Run(test, 10), expectedErrors);
        }
Ejemplo n.º 27
0
        private static void TestValidWithPointM(IFeatureWorkspace ws)
        {
            ISpatialReference sr = SpatialReferenceUtils.CreateSpatialReference
                                       ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95, true);

            SpatialReferenceUtils.SetMDomain(sr, 0, 1000000, 0.001, 0.002);

            IFieldsEdit fieldsPoint = new FieldsClass();

            fieldsPoint.AddField(FieldUtils.CreateOIDField());
            fieldsPoint.AddField(FieldUtils.CreateShapeField(
                                     "Shape", esriGeometryType.esriGeometryPoint, sr, 1000, false,
                                     true));

            IFeatureClass fcPoints =
                DatasetUtils.CreateSimpleFeatureClass(ws, "ValidWithPointMPoints", fieldsPoint);

            IFieldsEdit fieldsLine = new FieldsClass();

            fieldsLine.AddField(FieldUtils.CreateOIDField());
            fieldsLine.AddField(FieldUtils.CreateShapeField(
                                    "Shape", esriGeometryType.esriGeometryPolyline, sr, 1000,
                                    false, true));

            IFeatureClass fcLines =
                DatasetUtils.CreateSimpleFeatureClass(ws, "ValidWithPointMLines", fieldsLine);

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

            IFeature point1 = fcPoints.CreateFeature();

            point1.Shape = CreatePoint(100, 100, 20);
            point1.Store();

            IFeature   fLine1 = fcLines.CreateFeature();
            IPolycurve l1     =
                CurveConstruction.StartLine(CreatePoint(100, 100, 20))
                .LineTo(CreatePoint(200, 200, 50))
                .Curve;

            ((IMAware)l1).MAware = true;
            fLine1.Shape         = l1;
            fLine1.Store();

            IFeature   fLine2 = fcLines.CreateFeature();
            IPolycurve l2     =
                CurveConstruction.StartLine(CreatePoint(50, 50, 10))
                .LineTo(CreatePoint(150, 150, 30))
                .Curve;

            ((IMAware)l2).MAware = true;
            fLine2.Shape         = l2;
            fLine2.Store();

            var test = new QaMeasuresAtPoints(fcPoints, null, new[] { fcLines }, 0.01, 0.01,
                                              LineMSource.Nearest, false);

            using (var r = new QaTestRunner(test))
            {
                r.Execute();
                Assert.AreEqual(0, r.Errors.Count);
            }

            var container = new QaContainerTestRunner(10000, test);

            container.Execute();
            Assert.AreEqual(0, container.Errors.Count);
        }
        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.º 29
0
        private static void TestWithErrors(IFeatureWorkspace ws)
        {
            ISpatialReference srM = SpatialReferenceUtils.CreateSpatialReference
                                        ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95, true);

            SpatialReferenceUtils.SetMDomain(srM, 0, 1000000, 0.001, 0.002);

            IFieldsEdit fieldsPoint = new FieldsClass();

            fieldsPoint.AddField(FieldUtils.CreateOIDField());
            fieldsPoint.AddField(FieldUtils.CreateDoubleField("DoubleField"));
            fieldsPoint.AddField(FieldUtils.CreateIntegerField("IntField"));
            fieldsPoint.AddField(FieldUtils.CreateTextField("StringField", 50));
            fieldsPoint.AddField(FieldUtils.CreateDoubleField("EmptyField"));
            fieldsPoint.AddField(FieldUtils.CreateShapeField(
                                     "Shape", esriGeometryType.esriGeometryPoint, srM, 1000, false,
                                     true));

            IFeatureClass fcPoints =
                DatasetUtils.CreateSimpleFeatureClass(ws, "WithErrorsPoints", fieldsPoint);

            IFieldsEdit fieldsLine = new FieldsClass();

            fieldsLine.AddField(FieldUtils.CreateOIDField());
            fieldsLine.AddField(FieldUtils.CreateShapeField(
                                    "Shape", esriGeometryType.esriGeometryPolyline, srM, 1000,
                                    false, true));

            IFeatureClass fcLines =
                DatasetUtils.CreateSimpleFeatureClass(ws, "WithErrorsLines", fieldsLine);

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

            IFeature point1 = fcPoints.CreateFeature();

            point1.set_Value(1, 2);             // DoubleField
            point1.set_Value(2, 2);             // IntField
            point1.set_Value(3, "A");           // StringField
            point1.Shape = CreatePoint(100, 100, 2);
            point1.Store();

            IFeature   fLine1 = fcLines.CreateFeature();
            IPolycurve l1     =
                CurveConstruction.StartLine(CreatePoint(100, 100, 1))
                .LineTo(CreatePoint(200, 200, 1))
                .Curve;

            ((IMAware)l1).MAware = true;
            fLine1.Shape         = l1;
            fLine1.Store();

            var test = new QaMeasuresAtPoints(fcPoints, null, new[] { fcLines }, 0.01, 0.01,
                                              LineMSource.Nearest, false);
            var container = new QaContainerTestRunner(10000, test);

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

            test = new QaMeasuresAtPoints(fcPoints, "DoubleField", new[] { fcLines }, 0.01,
                                          0.01, LineMSource.Nearest, false);
            container = new QaContainerTestRunner(10000, test);
            container.Execute();
            Assert.AreEqual(1, container.Errors.Count);

            test = new QaMeasuresAtPoints(fcPoints, "IntField", new[] { fcLines }, 0.01, 0.01,
                                          LineMSource.Nearest, false);
            container = new QaContainerTestRunner(10000, test);
            container.Execute();
            Assert.AreEqual(1, container.Errors.Count);

            test = new QaMeasuresAtPoints(fcPoints, "EmptyField", new[] { fcLines }, 0.01, 0.01,
                                          LineMSource.Nearest, false);
            container = new QaContainerTestRunner(10000, test);
            container.Execute();
            Assert.AreEqual(1, container.Errors.Count);

            test = new QaMeasuresAtPoints(fcPoints, "0.5 * EmptyField", new[] { fcLines }, 0.01,
                                          0.01, LineMSource.Nearest, false);
            container = new QaContainerTestRunner(10000, test);
            container.Execute();
            Assert.AreEqual(1, container.Errors.Count);
        }