public void CanTestNaNZs() { var multiPatchClass = new FeatureClassMock( 1, "multipatch", esriGeometryType.esriGeometryMultiPatch); var polygonClass = new FeatureClassMock( 1, "polygon", esriGeometryType.esriGeometryPolygon); var multiPatch = new MultiPatchConstruction(); multiPatch.StartOuterRing(0, 0, 0) .Add(5, 0, 0) .Add(5, 1, 5) .Add(0, 1, 5); IFeature multiPatchRow = multiPatchClass.CreateFeature(multiPatch.MultiPatch); CurveConstruction polygon = CurveConstruction.StartPoly(0, 0) .LineTo(10, 0) .LineTo(0, 10); IFeature polygonRow = polygonClass.CreateFeature(polygon.ClosePolygon()); var test = new QaZDifferenceSelfWrapper( new[] { (IFeatureClass)multiPatchClass, polygonClass }, 20, 0, ZComparisonMethod.BoundingBox, null); var runner = new QaTestRunner(test); int errorCount = test.TestDirect(multiPatchRow, 0, polygonRow, 1); Assert.AreEqual(1, errorCount); Assert.AreEqual(1, runner.Errors.Count); }
public void CanDetectConnectedAndNotConnectedAtReentrantAngle() { IFeatureClass fcArea1; IFeatureClass fcArea2; IFeatureClass fcBorder1; IFeatureClass fcBorder2; CreateFeatureClasses(out fcArea1, out fcArea2, out fcBorder1, out fcBorder2); // border lines are coincident AddFeature(fcBorder1, CurveConstruction.StartLine(10, 100) .LineTo(0, 0) .LineTo(0, -2) .LineTo(100, -2) .Curve, stateId: "A"); AddFeature(fcBorder2, CurveConstruction.StartLine(100, -2) .LineTo(0, -2) .LineTo(0, 0) .LineTo(10, 100) .Curve, stateId: "B"); // connected to border: AddFeature(fcArea1, CurveConstruction.StartPoly(10, 100) .LineTo(0, 0) .LineTo(-10, 0) .LineTo(-10, 100) .ClosePolygon(), stateId: "A"); AddFeature(fcArea1, CurveConstruction.StartPoly(0, 0) .LineTo(0, -2) .LineTo(100, -2) .LineTo(100, -10) .LineTo(-10, -10) .LineTo(-10, 0) .ClosePolygon(), stateId: "A"); AddAreaFeature(fcArea2, 0, -2, 100, 0, stateId: "B"); // connected AddFeature(fcArea2, CurveConstruction.StartPoly(0.5, 5) .LineTo(50, 50) .Line(50, 100) .LineTo(10, 100) .ClosePolygon(), stateId: "B"); // connected var test = new QaEdgeMatchCrossingAreas(fcArea1, fcBorder1, fcArea2, fcBorder2, searchDistance: 10, boundingClasses1: null, boundingClasses2: null) { AreaClass1BorderMatchCondition = "AREA.STATE = BORDER.STATE", AreaClass2BorderMatchCondition = "AREA.STATE = BORDER.STATE", CrossingAreaMatchCondition = "AREA1.STATE <> AREA2.STATE" }; AssertUtils.ExpectedErrors(1, Run(test, 1000)); }
public void CanTestPolygon() { var fc = new FeatureClassMock(1, "Fc", esriGeometryType.esriGeometryPolygon); CurveConstruction construction = CurveConstruction.StartPoly(5, 4, 1) .LineTo(5, 8, 1) .LineTo(8, 8, 1) .LineTo(8, 4, 1); IFeature f = fc.CreateFeature(construction.ClosePolygon()); GeometryUtils.EnsureSpatialReference(f.Shape, fc); var test = new QaCoplanarRings(fc, 0, false); var runner = new QaTestRunner(test); runner.Execute(f); Assert.AreEqual(0, runner.Errors.Count); construction = CurveConstruction.StartPoly(5, 4, 1) .LineTo(5, 8, 1) .LineTo(8, 8, 1) .LineTo(8, 4, 1.01); f = fc.CreateFeature(construction.ClosePolygon()); GeometryUtils.EnsureSpatialReference(f.Shape, fc); test = new QaCoplanarRings(fc, 0, false); runner = new QaTestRunner(test); runner.Execute(f); Assert.AreEqual(1, runner.Errors.Count); }
public void CanTestConstraint() { ISpatialReference sref = SpatialReferenceUtils.CreateSpatialReference( WellKnownHorizontalCS.LV95); var multiPatchClass = new FeatureClassMock( 1, "multipatch", esriGeometryType.esriGeometryMultiPatch, esriFeatureType.esriFTSimple, sref); multiPatchClass.AddField("Level", esriFieldType.esriFieldTypeInteger); int levelIndex = multiPatchClass.FindField("Level"); var polygonClass = new FeatureClassMock( 1, "polygon", esriGeometryType.esriGeometryPolygon, esriFeatureType.esriFTSimple, sref); polygonClass.AddField("Level", esriFieldType.esriFieldTypeInteger); var multiPatchConstruction = new MultiPatchConstruction(); multiPatchConstruction.StartOuterRing(0, 0, 0) .Add(5, 0, 0) .Add(5, 1, 5) .Add(0, 1, 5); IFeature multiPatchRow = multiPatchClass.CreateFeature(multiPatchConstruction.MultiPatch); multiPatchRow.set_Value(levelIndex, 2); CurveConstruction curveConstruction = CurveConstruction.StartPoly(0, 0, 50) .LineTo(10, 0, 50) .LineTo(0, 10, 50); IFeature polygonRow = polygonClass.CreateFeature(curveConstruction.ClosePolygon()); polygonRow.set_Value(levelIndex, 1); var test = new QaZDifferenceSelfWrapper( new[] { (IFeatureClass)multiPatchClass, polygonClass }, 20, 0, ZComparisonMethod.BoundingBox, "U.Level > L.Level"); var runner = new QaTestRunner(test); int errorCount = test.TestDirect(multiPatchRow, 0, polygonRow, 1); Assert.AreEqual(1, errorCount); Assert.AreEqual(1, runner.Errors.Count); }
public void CanIntersectPolygonWithTouchingPolygon() { var g1 = CurveConstruction.StartPoly(0, 0, 0) .LineTo(10, 0, 0) .LineTo(10, 10, 5) .LineTo(0, 10, 5) .ClosePolygon(); var g2 = CurveConstruction.StartPoly(10, 5, 10) .LineTo(20, 5, 10) .LineTo(20, 15, 10) .LineTo(10, 15, 10) .ClosePolygon(); Check(g1, g2, 0); }
public void CheckAreErrorsIndependentOnFeatureOrder() { IFeatureClass fcArea1; IFeatureClass fcArea2; IFeatureClass fcBorder1; IFeatureClass fcBorder2; CreateFeatureClasses(out fcArea1, out fcArea2, out fcBorder1, out fcBorder2); var border11 = (IPolyline)CurveConstruction.StartLine(40, 60).LineTo(0, 50).Curve; var border12 = (IPolyline)CurveConstruction.StartLine(0, 50).LineTo(200, 0).Curve; var border21 = (IPolyline)CurveConstruction.StartLine(40, 60.01).LineTo(0, 50.01).Curve; var border22 = (IPolyline)CurveConstruction.StartLine(0, 50.01).LineTo(200, 0.01).Curve; // connected to border: IPolygon area11 = CurveConstruction.StartPoly(40, 60).LineTo(0, 50).LineTo(200, 0) .ClosePolygon(); IPolygon area21 = CurveConstruction.StartPoly(40, 60.01).LineTo(0, 50.01).LineTo(-100, 50) .ClosePolygon(); IPolygon area22 = CurveConstruction.StartPoly(0, 50.01).LineTo(200, 0.01).LineTo(100, -50) .ClosePolygon(); QaEdgeMatchCrossingAreas test = CreateTest(new[] { area22, area21 }, new[] { border21, border22 }, new[] { area11 }, new[] { border11, border12 }); var errors1 = new List <QaError>(Run(test, 1000)); test = CreateTest(new[] { area11 }, new[] { border11, border12 }, new[] { area21, area22 }, new[] { border21, border22 }); var errors2 = new List <QaError>(Run(test, 1000)); Assert.AreEqual(errors1.Count, errors2.Count); // TODO : Compare Errors }
public void CanDetectBorderGapBackslashed() { IFeatureClass fcArea1; IFeatureClass fcArea2; IFeatureClass fcBorder1; IFeatureClass fcBorder2; CreateFeatureClasses(out fcArea1, out fcArea2, out fcBorder1, out fcBorder2); // border lines are not coincident AddLineFeature(fcBorder1, -2, 2, 1, -2, stateId: "A"); AddLineFeature(fcBorder2, 1.01, -2, -1.99, 2, stateId: "B"); AddFeature(fcArea1, CurveConstruction.StartPoly(-2, 2) .LineTo(1, -2) .LineTo(-5, -10) .ClosePolygon(), stateId: "A"); // connected AddFeature(fcArea2, CurveConstruction.StartPoly(1.01, -2) .LineTo(-1.99, 2) .LineTo(5, 10) .ClosePolygon(), stateId: "B"); // connected var test = new QaEdgeMatchCrossingAreas(fcArea1, fcBorder1, fcArea2, fcBorder2, searchDistance: 0.2, boundingClasses1: null, boundingClasses2: null) { AreaClass1BorderMatchCondition = "AREA.STATE = BORDER.STATE", AreaClass2BorderMatchCondition = "AREA.STATE = BORDER.STATE", CrossingAreaMatchCondition = "AREA1.STATE <> AREA2.STATE" }; AssertUtils.ExpectedErrors(3, Run(test, 1000)); AssertUtils.ExpectedErrors(3, Run(test, 1)); var runner = new QaContainerTestRunner(1, test) { KeepGeometry = true }; runner.Execute(GeometryFactory.CreateEnvelope(-9, -4, 9, 8)); AssertUtils.ExpectedErrors(3, runner.Errors); }
public void CanIgnoreConnectedFeaturesAtOppositeSplitBorderInEdge() { IFeatureClass fcArea1; IFeatureClass fcArea2; IFeatureClass fcBorder1; IFeatureClass fcBorder2; CreateFeatureClasses(out fcArea1, out fcArea2, out fcBorder1, out fcBorder2); // border lines are coincident BUT with a split at opposite side of area split!! AddLineFeature(fcBorder1, 0, 0, 5, 0, stateId: "A"); // split point at x=5 AddLineFeature(fcBorder1, 5, 0, 0, -5, stateId: "A"); AddFeature(fcBorder2, CurveConstruction.StartLine(0, -5).LineTo(5, 0).LineTo(0, 0).Curve, stateId: "B"); // connected to split border, one polygon AddFeature(fcArea1, CurveConstruction.StartPoly(2, 0) .LineTo(5, 0) .LineTo(2, -3) .ClosePolygon(), stateId: "A"); // two polygons connected to non-split border AddAreaFeature(fcArea2, 2, 0, 5, 100, stateId: "B"); // split point at x=5 AddFeature(fcArea2, CurveConstruction.StartPoly(2, -3) .LineTo(5, 0) .LineTo(5, -3) .ClosePolygon(), stateId: "B"); var test = new QaEdgeMatchCrossingAreas(fcArea1, fcBorder1, fcArea2, fcBorder2, searchDistance: 1, boundingClasses1: null, boundingClasses2: null) { AreaClass1BorderMatchCondition = "AREA.STATE = BORDER.STATE", AreaClass2BorderMatchCondition = "AREA.STATE = BORDER.STATE", CrossingAreaMatchCondition = "AREA1.STATE <> AREA2.STATE" }; AssertNoErrors(Run(test, 1000)); AssertNoErrors(Run(test, 5)); }
public void CanIntersectMultiPatchWithPolygon() { const double z1 = 10; const double z2 = 20; var g1 = CurveConstruction.StartPoly(5, 5, z1) .LineTo(15, 5, z1) .LineTo(15, 15, z1) .LineTo(5, 15, z1) .ClosePolygon(); var g2 = new MultiPatchConstruction().StartOuterRing(0, 0, z2) .Add(10, 0, z2) .Add(10, 10, z2) .Add(0, 10, z2) .MultiPatch; Check(g2, g1, 2, (p, i) => At(i == 1, Equals(5, 10, z2, p.Point)) && At(i == 0, Equals(10, 5, z2, p.Point))); }
private static void CreateTestPolygons([NotNull] IFeatureClass polygonFeatureClass) { IFeature feature1 = polygonFeatureClass.CreateFeature(); feature1.Shape = CurveConstruction.StartPoly(100, 100) .LineTo(100, 200) .LineTo(200, 200) .LineTo(200, 100) .ClosePolygon(); feature1.Store(); IFeature feature2 = polygonFeatureClass.CreateFeature(); feature2.Shape = CurveConstruction.StartPoly(200, 100) .LineTo(200, 200) .LineTo(300, 200) .LineTo(300, 100) .ClosePolygon(); feature2.Store(); }
public void CantGetDistanceToNonPlanarPolygon() { const double z1 = 10; var g1 = GeometryFactory.CreatePoint(100, 0, z1); var polygon = CurveConstruction.StartPoly(0, 0, 10) .LineTo(10, 0, 10) .LineTo(10, 10, 11) .LineTo(0, 10, 10) .ClosePolygon(); var polygonClass = new FeatureClassMock( 1, "polygon", esriGeometryType.esriGeometryPolygon, esriFeatureType.esriFTSimple, SpatialReferenceUtils.CreateSpatialReference(WellKnownHorizontalCS.LV95)); var feature = polygonClass.CreateFeature(polygon); var intersectionPoints = ZDifferenceStrategyIntersectionPoints.GetDistanceToPlane( g1, feature, 0.01); foreach (var either in intersectionPoints) { either.Match(e => { Console.WriteLine( $@"expected nonplanar error: {e.Message} ({e.MaximumOffset})"); Assert.AreEqual(0.3324801391253977, e.MaximumOffset); return(0); }, pts => { Assert.Fail("Unexpected intersection point"); return(-1); }); } }
public void CanIntersectPolygonWithPolygon() { var g1 = CurveConstruction.StartPoly(0, 0, 0) .LineTo(10, 0, 0) .LineTo(10, 10, 5) .LineTo(0, 10, 5) .ClosePolygon(); var g2 = CurveConstruction.StartPoly(5, 5, 10) .LineTo(15, 5, 10) .LineTo(15, 15, 10) .LineTo(5, 15, 10) .ClosePolygon(); Check(g1, g2, 2, (ip, index) => At(index == 0, Equals(5, 10, 5, 10, ip)) && At(index == 1, Equals(10, 5, 2.5, 10, ip))); Check(g2, g1, 2, (ip, index) => At(index == 0, Equals(10, 5, 10, 2.5, ip)) && At(index == 1, Equals(5, 10, 10, 5, ip))); }
public void CanIgnoreConnectedFeaturesWithAreaBorders() { IFeatureClass fcLine1; IFeatureClass fcLine2; IFeatureClass fcBorder1; IFeatureClass fcBorder2; CreateFeatureClasses(out fcLine1, out fcLine2, out fcBorder1, out fcBorder2, true); // border lines are coincident AddFeature(fcBorder1, CurveConstruction.StartPoly(0, 0).LineTo(10, 0).LineTo(5, 5) .ClosePolygon(), stateId: "A"); AddFeature(fcBorder2, CurveConstruction.StartPoly(10, 0).LineTo(0, 0).LineTo(5, -5) .ClosePolygon(), stateId: "B"); // connected to border: AddLineFeature(fcLine1, 5, 0, 7, 0, stateId: "A"); // connected to border, exact match: AddLineFeature(fcLine2, 7, 0, 5, 0, stateId: "B"); var test = new QaEdgeMatchBorderingLines(fcLine1, fcBorder1, fcLine2, fcBorder2, 0) { LineClass1BorderMatchCondition = "LINE.STATE = BORDER.STATE", LineClass2BorderMatchCondition = "LINE.STATE = BORDER.STATE", BorderingLineMatchCondition = "LINE1.STATE <> LINE2.STATE" }; AssertNoErrors(Run(test, 1000)); AssertNoErrors(Run(test, 5)); }
public void CanTestPolygons() { var featureClassMock = new FeatureClassMock(1, "mock", esriGeometryType.esriGeometryPolygon); CurveConstruction construction = CurveConstruction .StartPoly(5, 4, 10).LineTo(-5, 4, 10.1) .LineTo(-5, -3, 10.05) .LineTo(5, -7, 10); IFeature row1 = featureClassMock.CreateFeature(construction.ClosePolygon()); GeometryUtils.EnsureSpatialReference(row1.Shape, featureClassMock); var test = new QaHorizontalSegments(featureClassMock, 5, 0); var runner = new QaTestRunner(test); runner.KeepGeometry = true; runner.Execute(row1); Assert.AreEqual(1, runner.Errors.Count); Assert.IsTrue(runner.ErrorGeometries[0].Envelope.ZMin > 5); }
private static void TestMultiPartErrorCore(IFeatureWorkspace ws) { IFieldsEdit fields = new FieldsClass(); fields.AddField(FieldUtils.CreateOIDField()); fields.AddField(FieldUtils.CreateShapeField( "Shape", esriGeometryType.esriGeometryPolygon, SpatialReferenceUtils.CreateSpatialReference ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95, true), 1000, false, false)); IFeatureClass featureClass = DatasetUtils.CreateSimpleFeatureClass(ws, "TestMultiPartErrorCore1", fields, null); IFieldsEdit refFields = new FieldsClass(); refFields.AddField(FieldUtils.CreateOIDField()); refFields.AddField(FieldUtils.CreateShapeField( "Shape", esriGeometryType.esriGeometryPolygon, SpatialReferenceUtils.CreateSpatialReference ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95, true), 1000, false, false)); IFeatureClass reference = DatasetUtils.CreateSimpleFeatureClass(ws, "TestMultiPartErrorCoreRef", refFields, null); IPolygon poly1 = CurveConstruction.StartPoly(0, 0.01) .LineTo(1, 0.01) .LineTo(1, 1) .LineTo(0, 1) .LineTo(0, 0.01) .MoveTo(1.001, 0.01) .LineTo(4, 0.01) .LineTo(4, 1) .LineTo(1.001, 1) .LineTo(1.001, 0.01) .ClosePolygon(); ((ITopologicalOperator)poly1).Simplify(); IFeature row1 = featureClass.CreateFeature(); row1.Shape = poly1; row1.Store(); IPolygon referencePoly = CurveConstruction.StartPoly(-1, 0) .LineTo(0.5, 0) .LineTo(0.5, -10) .LineTo(-1, -10) .LineTo(-1, 0) .MoveTo(0.81, 0) .LineTo(10, 0) .LineTo(10, -10) .LineTo(0.81, 0) .ClosePolygon(); ((ITopologicalOperator)referencePoly).Simplify(); IFeature rowRef = reference.CreateFeature(); rowRef.Shape = referencePoly; rowRef.Store(); var test = new QaPartCoincidenceOther(featureClass, reference, 0.02, 0.05, 0.1, false, 5000, 0); var runner = new QaTestRunner(test); runner.Execute(row1); Assert.AreEqual(3, runner.Errors.Count); }
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 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); }
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); }
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); } } }