private static IFeatureClass EnsureFeatureClass(IFeatureWorkspace ws,
                                                        esriGeometryType geometryType,
                                                        string name,
                                                        ISpatialReference sr)
        {
            try
            {
                IFeatureClass existing = DatasetUtils.OpenFeatureClass(ws, name);
                DatasetUtils.DeleteFeatureClass(existing);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());

            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", geometryType,
                                sr, 1000, true));

            IFeatureClass fc = DatasetUtils.CreateSimpleFeatureClass(ws, name, fields);

            if (fc is IVersionedTable)
            {
                DatasetUtils.RegisterAsVersioned(fc);
            }

            return(fc);
        }
Example #2
0
        public void MultipartTest()
        {
            IFeatureWorkspace workspace =
                TestWorkspaceUtils.CreateInMemoryWorkspace("MultipartTest");

            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", esriGeometryType.esriGeometryPolyline, CreateLV95(),
                                1000));

            IFeatureClass linesFc = DatasetUtils.CreateSimpleFeatureClass(workspace, "Flow",
                                                                          fields);

            AddFeature(
                linesFc,
                CurveConstruction.StartLine(0, 0).LineTo(4, 0).MoveTo(6, 0).LineTo(6, 10).Curve);
            AddFeature(linesFc, CurveConstruction.StartLine(4, 0).LineTo(6, 0).Curve);

            AddFeature(linesFc, CurveConstruction.StartLine(0, 20).LineTo(4, 20).Curve);

            AddFeature(
                linesFc,
                CurveConstruction.StartLine(0, 30).LineTo(4, 30).MoveTo(0, 32).LineTo(4, 30)
                .MoveTo(4, 30).LineTo(8, 30).Curve);

            // expect counter-clockwise: 0 errors
            var runner = new QaContainerTestRunner(
                1000, new QaFlowLogic(linesFc));

            Assert.AreEqual(3, runner.Execute());
        }
Example #3
0
        private static void VerifyErrorHasZ(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 featureClass =
                DatasetUtils.CreateSimpleFeatureClass(ws, "VerifyErrorHasZ", fields,
                                                      null);

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

            IPolycurve line1 = CurveConstruction.StartLine(0, 0, 5)
                               .LineTo(2, 0, 5)
                               .Curve;
            IFeature row1 = featureClass.CreateFeature();

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

            IPolycurve line2 = CurveConstruction.StartLine(-1, 0.02, 5)
                               .LineTo(1, 0.02, 5)
                               .Curve;
            IFeature row2 = featureClass.CreateFeature();

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

            var test = new QaNotNear(featureClass, 0.1, 0.5);

            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.AreEqual(5, errorGeometry.Envelope.ZMin);
                }
            }
        }
        private static IFeatureWorkspace CreateTestWorkspace(
            [NotNull] string fgdbName,
            [NotNull] string fcName, [NotNull] string tableName, [NotNull] string relClassName,
            [NotNull] out IFeatureClass fc,
            [NotNull] out ITable table,
            [NotNull] out IRelationshipClass rc)
        {
            IFeatureWorkspace ws = TestWorkspaceUtils.CreateTestFgdbWorkspace(fgdbName);

            ISpatialReference sref = SpatialReferenceUtils.CreateSpatialReference(
                (int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95, true);

            fc = DatasetUtils.CreateSimpleFeatureClass(
                ws, fcName, null,
                FieldUtils.CreateOIDField(),
                FieldUtils.CreateIntegerField("FKEY"),
                FieldUtils.CreateShapeField(
                    "SHAPE", esriGeometryType.esriGeometryPoint,
                    sref, 1000));

            table = DatasetUtils.CreateTable(ws, tableName,
                                             FieldUtils.CreateOIDField(),
                                             FieldUtils.CreateTextField("TEXT", 100));

            rc = TestWorkspaceUtils.CreateSimple1NRelationship(
                ws, relClassName,
                table, (ITable)fc,
                table.OIDFieldName, "FKEY");

            return(ws);
        }
Example #5
0
        public void MultipartTest()
        {
            IFeatureWorkspace workspace =
                TestWorkspaceUtils.CreateInMemoryWorkspace("MultipartTest");

            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", esriGeometryType.esriGeometryPolyline, CreateLV95(),
                                1000));

            IFeatureClass featureClass = DatasetUtils.CreateSimpleFeatureClass(
                workspace, "Border", fields);

            AddFeature(featureClass,
                       CurveConstruction.StartLine(0, 0).LineTo(4, 0).MoveTo(6, 0).LineTo(6, 10)
                       .Curve);
            AddFeature(featureClass, CurveConstruction.StartLine(6, 10).LineTo(4, 10).Curve);
            AddFeature(featureClass,
                       CurveConstruction.StartLine(4, 0).LineTo(6, 0).MoveTo(4, 10).LineTo(0, 0)
                       .Curve);

            // expect counter-clockwise: 0 errors
            var runnerCounterClockwise = new QaContainerTestRunner(
                1000, new QaBorderSense(featureClass, false));

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

            // expect clockwise: 1 error
            var runnerClockwise = new QaContainerTestRunner(
                1000, new QaBorderSense(featureClass, true));

            Assert.AreEqual(1, runnerClockwise.Execute());
        }
Example #6
0
        private void TestConnections(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, "TestConnections", 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, 100).LineTo(200, 200).Curve;
                row.Store();
            }
            {
                IFeature row = fc.CreateFeature();
                row.set_Value(1, 2);
                row.Shape =
                    CurveConstruction.StartLine(100, 100.1).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);

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

            var container = new TestContainer();

            container.AddTest(test);
            container.QaError += Test_QaError;
            _errorCount        = 0;
            container.Execute();
            Assert.AreEqual(0, _errorCount);
        }
Example #7
0
        public void CanCreateGdbFeatureClass()
        {
            // An in-memory backing dataset is created automatically, if no factory method is provided
            GdbFeatureClass gdbFeatureClass =
                new GdbFeatureClass(41, "TESTABLE", esriGeometryType.esriGeometryPoint,
                                    "Test table");

            IFeatureClass featureClass = gdbFeatureClass;

            Assert.AreEqual(41, featureClass.ObjectClassID);
            Assert.AreEqual("TESTABLE", DatasetUtils.GetName(featureClass));
            Assert.AreEqual("Test table",
                            DatasetUtils.GetAliasName(featureClass));
            Assert.AreEqual(esriGeometryType.esriGeometryPoint,
                            featureClass.ShapeType);

            Assert.False(featureClass.HasOID);
            Assert.Null(featureClass.OIDFieldName);

            Assert.AreEqual(0, GdbQueryUtils.Count(featureClass, ""));

            // Add OID field
            gdbFeatureClass.AddField(FieldUtils.CreateOIDField());

            // Add Shape field
            gdbFeatureClass.AddField(
                FieldUtils.CreateShapeField(
                    esriGeometryType.esriGeometryPoint,
                    SpatialReferenceUtils.CreateSpatialReference(WellKnownHorizontalCS.LV95)));

            Assert.True(featureClass.HasOID);
            Assert.AreEqual("OBJECTID", featureClass.OIDFieldName);
            Assert.AreEqual("SHAPE", featureClass.ShapeFieldName);

            IQueryFilter queryFilter = GdbQueryUtils.CreateQueryFilter("OBJECTID");

            queryFilter.WhereClause = "OBJECTID < 0";

            Assert.AreEqual(0,
                            GdbQueryUtils.Count(featureClass, queryFilter));

            var backingDataset = gdbFeatureClass.BackingDataset as InMemoryDataset;

            Assert.NotNull(backingDataset);

            backingDataset.AllRows.Add(new GdbRow(1, gdbFeatureClass));

            Assert.AreEqual(0,
                            GdbQueryUtils.Count(featureClass, queryFilter));

            queryFilter.WhereClause = "OBJECTID > 0";

            Assert.AreEqual(1,
                            GdbQueryUtils.Count(featureClass, queryFilter));
        }
        private static void TestConditionCoincidence(IFeatureWorkspace ws)
        {
            IFieldsEdit fields = new FieldsClass();

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

            IFeatureClass fc1 =
                DatasetUtils.CreateSimpleFeatureClass(ws, "TestConditionCoincidence1",
                                                      fields,
                                                      null);
            IFeatureClass fc2 =
                DatasetUtils.CreateSimpleFeatureClass(ws, "TestConditionCoincidence2",
                                                      fields,
                                                      null);

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

            {
                IFeature row = fc1.CreateFeature();
                row.set_Value(1, 1);
                row.Shape = CurveConstruction.StartLine(100, 100).LineTo(200, 200).Curve;
                row.Store();
            }
            {
                IFeature row = fc2.CreateFeature();
                row.set_Value(1, 1);
                row.Shape = CurveConstruction
                            .StartLine(100.5, 100).LineTo(200.5, 200).Curve;
                row.Store();
            }

            // test without ignore conditions --> line is near, but not coincident
            var test       = new QaPartCoincidenceOther(fc1, fc2, 1, 10);
            var testRunner = new QaTestRunner(test);

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

            // Same test with ignore conditions --> nothing near
            test = new QaPartCoincidenceOther(fc1, fc2, 1, 10);
            test.IgnoreNeighborCondition = "G1.LandID = G2.LandID";

            testRunner = new QaTestRunner(test);
            testRunner.Execute();
            Assert.AreEqual(0, testRunner.Errors.Count);
        }
Example #9
0
        private static LinearNetworkGdbFeatureFinder CreateTestGdbSchema(
            string fgdbName,
            out IFeatureClass edgeClass, out IFeatureClass junctionClass)
        {
            const string unitTestDir = @"C:\Temp\UnitTestData";

            try
            {
                FileSystemUtils.DeleteDirectory(Path.Combine(unitTestDir, fgdbName), true,
                                                true);
            }
            catch (Exception)
            {
                // ignored
            }

            IWorkspaceName workspaceName =
                WorkspaceUtils.CreateFileGdbWorkspace(unitTestDir,
                                                      fgdbName);

            IWorkspace workspace = WorkspaceUtils.OpenWorkspace(workspaceName);

            ISpatialReference lv95 =
                SpatialReferenceUtils.CreateSpatialReference(WellKnownHorizontalCS.LV95);

            IFieldsEdit fieldsReference = new FieldsClass();

            fieldsReference.AddField(FieldUtils.CreateOIDField());
            fieldsReference.AddField(
                FieldUtils.CreateShapeField(esriGeometryType.esriGeometryPolyline, lv95));

            edgeClass = DatasetUtils.CreateSimpleFeatureClass(
                (IFeatureWorkspace)workspace, "Edges", string.Empty,
                FieldUtils.CreateOIDField(),
                FieldUtils.CreateShapeField(esriGeometryType.esriGeometryPolyline, lv95));

            junctionClass = DatasetUtils.CreateSimpleFeatureClass(
                (IFeatureWorkspace)workspace, "Junctions", string.Empty,
                FieldUtils.CreateOIDField(),
                FieldUtils.CreateShapeField(esriGeometryType.esriGeometryPoint, lv95));

            List <LinearNetworkClassDef> networkClassDefinitions =
                new List <LinearNetworkClassDef>
            {
                new LinearNetworkClassDef(edgeClass),
                new LinearNetworkClassDef(junctionClass)
            };

            LinearNetworkGdbFeatureFinder featureFinder =
                new LinearNetworkGdbFeatureFinder(networkClassDefinitions);

            return(featureFinder);
        }
        private static IFeatureClass CreateLineFeatureClass(
            [NotNull] IFeatureWorkspace workspace, [NotNull] string name)
        {
            ISpatialReference spatialReference = CreateSpatialReference();

            return(DatasetUtils.CreateSimpleFeatureClass(
                       workspace, name,
                       FieldUtils.CreateFields(
                           FieldUtils.CreateOIDField(),
                           FieldUtils.CreateShapeField(
                               "SHAPE", esriGeometryType.esriGeometryPolyline,
                               spatialReference, 1000, false, false)),
                       null));
        }
Example #11
0
        public void TestMultipart()
        {
            IFeatureWorkspace ws = TestWorkspaceUtils.CreateInMemoryWorkspace("Testmultipart");

            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, "TestConnections", fields,
                                                      null);
            IList <ITable> tbls = new[] { (ITable)fc };

            {
                IFeature row = fc.CreateFeature();
                row.set_Value(1, 1);
                row.Shape =
                    CurveConstruction.StartLine(1, 1).LineTo(2, 2).MoveTo(3, 2).LineTo(4, 2).Curve;
                row.Store();
            }
            {
                IFeature row = fc.CreateFeature();
                row.set_Value(1, 2);
                row.Shape =
                    CurveConstruction.StartLine(1, 5).LineTo(2, 2).Curve;
                row.Store();
            }

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

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

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

            test.UseMultiParts = true;
            runner             = new QaContainerTestRunner(1000, test);
            Assert.AreEqual(1, runner.Execute());
        }
Example #12
0
        private static IFeatureClass CreateLineClass([NotNull] IFeatureWorkspace ws,
                                                     [NotNull] string name)
        {
            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));

            return(DatasetUtils.CreateSimpleFeatureClass(ws, name, fields));
        }
        private IFeatureClass CreateFeatureClass([NotNull] string name,
                                                 esriGeometryType geometryType)
        {
            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", geometryType, _spatialReference, 1000));

            fields.AddField(FieldUtils.CreateTextField(_textFieldName, 200));

            return(DatasetUtils.CreateSimpleFeatureClass(
                       _testWs, name, fields));
        }
Example #14
0
        public void TestUniqueGuid()
        {
            ISpatialReference sref = SpatialReferenceUtils.CreateSpatialReference
                                         ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                         true);

            SpatialReferenceUtils.SetXYDomain(sref, -10000, -10000, 10000, 10000, 0.0001, 0.001);

            IFields fields = FieldUtils.CreateFields(
                FieldUtils.CreateOIDField(),
                FieldUtils.CreateField("UniqueValue", esriFieldType.esriFieldTypeGUID),
                FieldUtils.CreateShapeField(
                    "Shape", esriGeometryType.esriGeometryPoint,
                    sref, 1000));

            IFeatureClass featureClass1 = DatasetUtils.CreateSimpleFeatureClass(_fgdbWorkspace,
                                                                                "TestUniqueGuid",
                                                                                fields);

            for (var i = 0; i < 10; i++)
            {
                IFeature feature = featureClass1.CreateFeature();
                feature.set_Value(1, Guid.NewGuid().ToString("B"));
                feature.Shape = GeometryFactory.CreatePoint(100, 100, sref);
                feature.Store();
            }

            for (var i = 0; i < 2; i++)
            {
                IFeature emptyFeature = featureClass1.CreateFeature();
                emptyFeature.set_Value(1, null);
                emptyFeature.Shape = GeometryFactory.CreatePoint(100, 100, sref);
                emptyFeature.Store();
            }

            foreach (bool forceInMemoryTableSort in new[] { true, false })
            {
                var test = new QaUnique((ITable)featureClass1, "UniqueValue")
                {
                    ForceInMemoryTableSorting = forceInMemoryTableSort
                };

                var runner = new QaTestRunner(test);
                runner.Execute();
                Assert.AreEqual(2, runner.Errors.Count);
            }
        }
Example #15
0
        private IFeatureClass CreateFeatureClass(string name, esriGeometryType geometryType)
        {
            IFieldsEdit fields = new FieldsClass();

            fields.AddField(FieldUtils.CreateOIDField());
            fields.AddField(FieldUtils.CreateShapeField(
                                "Shape", geometryType, _spatialReference, 1000));

            fields.AddField(FieldUtils.CreateTextField(_stateIdFieldName, 100));

            fields.AddField(FieldUtils.CreateTextField(_textFieldName, 200));
            fields.AddField(FieldUtils.CreateDoubleField(_doubleFieldName));
            fields.AddField(FieldUtils.CreateDateField(_dateFieldName));

            return(DatasetUtils.CreateSimpleFeatureClass(
                       _featureWorkspace, name, fields));
        }
Example #16
0
        private IFeatureClass CreateFeatureClass([NotNull] string name,
                                                 esriGeometryType type,
                                                 bool zAware = false)
        {
            ISpatialReference sref = SpatialReferenceUtils.CreateSpatialReference
                                         ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                         setDefaultXyDomain: true);

            SpatialReferenceUtils.SetXYDomain(sref, -10000, -10000, 10000, 10000,
                                              0.0001, 0.001);

            IFields fields = FieldUtils.CreateFields(
                FieldUtils.CreateOIDField(),
                FieldUtils.CreateShapeField("Shape", type, sref, 1000, zAware));

            return(DatasetUtils.CreateSimpleFeatureClass(_testWs, name, fields));
        }
Example #17
0
        public static IFeatureClass CreateSimpleFeatureClass(
            [NotNull] IFeatureWorkspace workspace,
            [NotNull] string name,
            [CanBeNull] IFieldsEdit fieldsWithoutShapeField,
            esriGeometryType geometryType,
            esriSRProjCS2Type projType,
            double xyTolerance = 0,
            bool hasZ          = false)
        {
            if (fieldsWithoutShapeField == null)
            {
                fieldsWithoutShapeField = new FieldsClass();
                fieldsWithoutShapeField.AddField(FieldUtils.CreateOIDField());
            }

            ISpatialReference spatialReference = SpatialReferenceUtils
                                                 .CreateSpatialReference
                                                     ((int)projType, true);

            if (xyTolerance > 0)
            {
                ((ISpatialReferenceTolerance)spatialReference).XYTolerance =
                    xyTolerance;
            }

            if (hasZ)
            {
                SpatialReferenceUtils.SetZDomain(spatialReference, -10000, 10000,
                                                 0.0001, 0.001);
            }

            fieldsWithoutShapeField.AddField(
                FieldUtils.CreateShapeField("Shape", geometryType, spatialReference, 1000, hasZ));

            IFeatureClass featureClass =
                DatasetUtils.CreateSimpleFeatureClass(
                    workspace, name, fieldsWithoutShapeField);

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

            return(featureClass);
        }
        private void CreateTestFeatureClasses(
            string polygonsName,
            string pointsName,
            [NotNull] out IFeatureClass polygonFeatureClass,
            [NotNull] out IFeatureClass pointFeatureClass,
            IFeatureWorkspace ws = null, bool polygonAsClosedLines = false)
        {
            ws = ws ?? _testWs;

            ISpatialReference sref = SpatialReferenceUtils.CreateSpatialReference
                                         ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                         true);

            var geomType = polygonAsClosedLines
                                               ? esriGeometryType.esriGeometryPolyline
                                               : esriGeometryType.esriGeometryPolygon;
            IFieldsEdit polygonFields = new FieldsClass();

            polygonFields.AddField(FieldUtils.CreateOIDField());
            polygonFields.AddField(FieldUtils.CreateShapeField(
                                       "Shape", geomType,
                                       sref, 1000, false, false));

            polygonFeatureClass = DatasetUtils.CreateSimpleFeatureClass(ws, polygonsName,
                                                                        polygonFields,
                                                                        null);

            IFieldsEdit pointFields = new FieldsClass();

            pointFields.AddField(FieldUtils.CreateOIDField());
            pointFields.AddField(FieldUtils.CreateShapeField(
                                     "Shape", esriGeometryType.esriGeometryPoint,
                                     sref, 1000, false, false));

            pointFeatureClass = DatasetUtils.CreateSimpleFeatureClass(ws, pointsName,
                                                                      pointFields,
                                                                      null);

            // make sure the table is known by the workspace
            ((IWorkspaceEdit)ws).StartEditing(false);
            ((IWorkspaceEdit)ws).StopEditing(true);
        }
Example #19
0
        public void TestUniqueStrings()
        {
            ISpatialReference sref = SpatialReferenceUtils.CreateSpatialReference
                                         ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                         true);

            SpatialReferenceUtils.SetXYDomain(sref, -10000, -10000, 10000, 10000, 0.0001, 0.001);

            IFields fields = FieldUtils.CreateFields(
                FieldUtils.CreateOIDField(),
                FieldUtils.CreateTextField("Unique", 100),
                FieldUtils.CreateShapeField(
                    "Shape", esriGeometryType.esriGeometryPoint,
                    sref, 1000));

            IFeatureClass featureClass = DatasetUtils.CreateSimpleFeatureClass(_pgdbWorkspace,
                                                                               "TestUniqueStrings",
                                                                               fields);

            for (var i = 0; i < 10; i++)
            {
                IFeature feature = featureClass.CreateFeature();
                feature.set_Value(1, string.Format("A'{0}{1}", i, "\""));
                feature.Shape = GeometryFactory.CreatePoint(100, 100, sref);
                feature.Store();
            }

            IEnvelope testEnvelope = GeometryFactory.CreateEnvelope(0, 0, 200, 200, sref);

            foreach (bool forceInMemoryTableSort in new[] { false, true })
            {
                var test = new QaUnique((ITable)featureClass, "Unique")
                {
                    ForceInMemoryTableSorting = forceInMemoryTableSort
                };
                var runner = new QaTestRunner(test);
                runner.Execute(testEnvelope);
                AssertUtils.NoError(runner);
            }
        }
        private static IFeatureClass CreateFeatureClass(
            IFeatureWorkspace ws, string fcName)
        {
            IFieldsEdit fields = new FieldsClass();

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

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

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

            ((IWorkspaceEdit)ws).StartEditing(false);
            return(fc);
        }
Example #21
0
        private IFeatureClass CreateFeatureClass([NotNull] string name,
                                                 esriGeometryType geometryType,
                                                 params IField[] attributeFields)
        {
            ISpatialReference sref = SpatialReferenceUtils.CreateSpatialReference
                                         ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                         true);

            SpatialReferenceUtils.SetXYDomain(sref, -10000, -10000, 10000, 10000, 0.0001,
                                              0.001);

            var fields = new List <IField>
            {
                FieldUtils.CreateOIDField(),
                FieldUtils.CreateShapeField("Shape", geometryType, sref, 1000)
            };

            fields.AddRange(attributeFields);

            return(DatasetUtils.CreateSimpleFeatureClass(_testWs, name,
                                                         FieldUtils.CreateFields(fields)));
        }
Example #22
0
        private static IFeatureClass CreateLineClass([NotNull] IFeatureWorkspace ws)
        {
            IFieldsEdit fields = new FieldsClass();

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

            Thread.Sleep(10);
            IFeatureClass featureClass =
                DatasetUtils.CreateSimpleFeatureClass(
                    ws, "line_" + Environment.TickCount, fields, null);

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

            return(featureClass);
        }
Example #23
0
		private IFeatureClass CreateFeatureClass([NotNull] string name,
		                                         esriGeometryType type,
		                                         [NotNull] string urlFieldName)
		{
			ISpatialReference sref = SpatialReferenceUtils.CreateSpatialReference
			((int) esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
			 true);

			SpatialReferenceUtils.SetXYDomain(sref, -10000, -10000, 10000, 10000, 0.0001,
			                                  0.001);

			const bool mAware = false;
			const bool hasZ = false;
			IFields fields = FieldUtils.CreateFields(
				FieldUtils.CreateOIDField(),
				FieldUtils.CreateShapeField("Shape",
				                            type,
				                            sref, 1000,
				                            hasZ, mAware),
				FieldUtils.CreateTextField(urlFieldName, 500));

			return DatasetUtils.CreateSimpleFeatureClass(_testWs, name, fields);
		}
Example #24
0
        private static IFeatureClass CreateFeatureClass(
            [NotNull] string name,
            [NotNull] IFeatureWorkspace workspace,
            [NotNull] IIssueTableFieldManagement fields,
            esriGeometryType geometryType,
            [NotNull] ISpatialReference spatialReference,
            double gridSize1, double gridSize2, double gridSize3)
        {
            const bool zAware = true;

            var list = new List <IField>
            {
                FieldUtils.CreateShapeField(
                    geometryType, spatialReference,
                    gridSize1, gridSize2, gridSize3,
                    zAware)
            };

            list.AddRange(CreateAttributeFields(fields));

            return(DatasetUtils.CreateSimpleFeatureClass(workspace, name,
                                                         FieldUtils.CreateFields(list)));
        }
Example #25
0
        private IEnumerable <IField> GetFields([NotNull] ISpatialReference spatialReference,
                                               bool hasZ = false,
                                               bool hasM = false)
        {
            yield return(FieldUtils.CreateShapeField(esriGeometryType.esriGeometryPolygon,
                                                     spatialReference,
                                                     hasZ: hasZ,
                                                     hasM: hasM));

            yield return
                (FieldUtils.CreateTextField(_fieldNames[AttributeRole.Description], 2000));

            yield return
                (FieldUtils.CreateTextField(_fieldNames[AttributeRole.FeatureSource], 500));

            yield return
                (FieldUtils.CreateTextField(_fieldNames[AttributeRole.WhereClause], 2000));

            yield return
                (FieldUtils.CreateDoubleField(_fieldNames[AttributeRole.BufferDistance]));

            yield return
                (FieldUtils.CreateDoubleField(_fieldNames[AttributeRole.GeneralizationTolerance]));
        }
        private static void TestGeomGroupConstraints(IFeatureWorkspace ws)
        {
            IFieldsEdit fields = new FieldsClass();

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

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

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

            IFeature row1 = fc.CreateFeature();

            row1.set_Value(1, "123456-10");
            row1.Shape = GeometryFactory.CreatePoint(200, 100);
            row1.Store();

            IFeature row2 = fc.CreateFeature();

            row2.set_Value(1, "123456-11");
            row2.Shape = GeometryFactory.CreatePoint(200, 200);
            row2.Store();

            IFeature row3 = fc.CreateFeature();

            row3.set_Value(1, "123456-11");
            row3.Shape = GeometryFactory.CreatePoint(200, 300);
            row3.Store();

            IFeature row4 = fc.CreateFeature();

            row4.set_Value(1, "023456-10");
            row4.Shape = GeometryFactory.CreatePoint(200, 150);
            row4.Store();

            const bool limitToTestedRows = false;
            var        test = new QaGroupConstraints((ITable)fc,
                                                     "IIF(LEN(Kostenstelle) >=6, SUBSTRING(Kostenstelle, 1, 6), '')",
                                                     "SUBSTRING(Kostenstelle, 8, 9)", 1,
                                                     limitToTestedRows);

            {
                IEnvelope box = GeometryFactory.CreateEnvelope(150, 120, 250, 170);
                using (var runner = new QaTestRunner(test))
                {
                    runner.Execute(box);
                    Assert.AreEqual(0, runner.Errors.Count);
                }

                var containerRunner = new QaContainerTestRunner(100, test);
                containerRunner.Execute(box);
                Assert.AreEqual(0, containerRunner.Errors.Count);
            }
            {
                IEnvelope box = GeometryFactory.CreateEnvelope(150, 80, 250, 170);
                using (var runner = new QaTestRunner(test))
                {
                    runner.Execute(box);
                    Assert.AreEqual(1, runner.Errors.Count);
                }

                var containerRunner = new QaContainerTestRunner(100, test);
                containerRunner.Execute(box);
                Assert.AreEqual(1, containerRunner.Errors.Count);
            }
            {
                IEnvelope box = GeometryFactory.CreateEnvelope(150, 80, 250, 220);
                using (var runner = new QaTestRunner(test))
                {
                    runner.Execute(box);
                    Assert.AreEqual(1, runner.Errors.Count);
                }

                var containerRunner = new QaContainerTestRunner(100, test);
                containerRunner.Execute(box);
                Assert.AreEqual(1, containerRunner.Errors.Count);
            }

            {
                IRow row = fc.GetFeature(1);
                using (var runner = new QaTestRunner(test))
                {
                    runner.Execute(row);
                    Assert.AreEqual(1, runner.Errors.Count);
                }

                //var containerRunner = new QaContainerTestRunner(100, test);
                //containerRunner.Execute(row);
                //Assert.AreEqual(1, containerRunner.Errors.Count);
            }
            {
                IRow row = fc.GetFeature(4);
                using (var runner = new QaTestRunner(test))
                {
                    runner.Execute(row);
                    Assert.AreEqual(0, runner.Errors.Count);
                }

                //var containerRunner = new QaContainerTestRunner(100, test);
                //containerRunner.Execute(row);
                //Assert.AreEqual(1, containerRunner.Errors.Count);
            }

            {
                IQueryFilter filter = new QueryFilterClass {
                    WhereClause = "ObjectId < 3"
                };
                ISelectionSet set = fc.Select(
                    filter, esriSelectionType.esriSelectionTypeIDSet,
                    esriSelectionOption.esriSelectionOptionNormal, null);
                using (var runner = new QaTestRunner(test))
                {
                    runner.Execute(new EnumCursor(set, null, false));
                    Assert.AreEqual(1, runner.Errors.Count);
                }

                var containerRunner = new QaContainerTestRunner(100, test);
                containerRunner.Execute(new[] { set });
                Assert.AreEqual(1, containerRunner.Errors.Count);
            }

            {
                IQueryFilter filter = new QueryFilterClass {
                    WhereClause = "ObjectId > 3"
                };
                ISelectionSet set = fc.Select(
                    filter, esriSelectionType.esriSelectionTypeIDSet,
                    esriSelectionOption.esriSelectionOptionNormal, null);
                using (var runner = new QaTestRunner(test))
                {
                    runner.Execute(new EnumCursor(set, null, false));
                    Assert.AreEqual(0, runner.Errors.Count);
                }

                var containerRunner = new QaContainerTestRunner(100, test);
                containerRunner.Execute(new[] { set });
                Assert.AreEqual(0, containerRunner.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);
        }
Example #28
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();
        }
Example #29
0
 private IField CreateShapeField()
 {
     return(FieldUtils.CreateShapeField("SHAPE", ShapeType,
                                        _spatialReference,
                                        _gridSize, _hasZ, _hasM));
 }
Example #30
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);
        }