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"); }
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)); }
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 }
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); }
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(); }
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); }
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); }
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); } } }
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); }
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); }
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()); }
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); }
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); }
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); }
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! } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }