예제 #1
0
        private static async Task EnterpriseGeodabaseWorkFlow()
        {
            // Opening a Non-Versioned SQL Server instance.

            DatabaseConnectionProperties connectionProperties = new DatabaseConnectionProperties(EnterpriseDatabaseType.SQLServer)
            {
                AuthenticationMode = AuthenticationMode.DBMS,

                // Where testMachine is the machine where the instance is running and testInstance is the name of the SqlServer instance.
                Instance = @"testMachine\testInstance",

                // Provided that a database called LocalGovernment has been created on the testInstance and geodatabase has been enabled on the database.
                Database = "LocalGovernment",

                // Provided that a login called gdb has been created and corresponding schema has been created with the required permissions.
                User     = "******",
                Password = "******",
                Version  = "dbo.DEFAULT"
            };

            using (Geodatabase geodatabase = new Geodatabase(connectionProperties))
                using (FeatureClass enterpriseFeatureClass = geodatabase.OpenDataset <FeatureClass>("LocalGovernment.GDB.FacilitySite"))
                {
                    FeatureClassDefinition facilitySiteDefinition = enterpriseFeatureClass.GetDefinition();

                    int ownTypeIndex = facilitySiteDefinition.FindField("OWNTYPE");
                    int areaIndex    = facilitySiteDefinition.FindField(facilitySiteDefinition.GetAreaField());

                    EditOperation editOperation = new EditOperation();
                    editOperation.Callback(context =>
                    {
                        QueryFilter queryFilter = new QueryFilter {
                            WhereClause = "FCODE = 'Hazardous Materials Facility' AND OWNTYPE = 'Private'"
                        };

                        using (RowCursor rowCursor = enterpriseFeatureClass.Search(queryFilter, false))
                        {
                            while (rowCursor.MoveNext())
                            {
                                using (Feature feature = (Feature)rowCursor.Current)
                                {
                                    // In order to update the Map and/or the attribute table.
                                    // Has to be called before any changes are made to the row
                                    context.Invalidate(feature);

                                    // Transfer all Hazardous Material Facilities to the City.
                                    feature[ownTypeIndex] = "Municipal";

                                    if (Convert.ToDouble(feature[areaIndex]) > 50000)
                                    {
                                        // Set the Shape of the feature to whatever you need.

                                        List <Coordinate2D> newCoordinates = new List <Coordinate2D>
                                        {
                                            new Coordinate2D(1021570, 1880583),
                                            new Coordinate2D(1028730, 1880994),
                                            new Coordinate2D(1029718, 1875644),
                                            new Coordinate2D(1021405, 1875397)
                                        };

                                        feature.SetShape(new PolygonBuilder(newCoordinates).ToGeometry());
                                    }

                                    feature.Store();

                                    // Has to be called after the store too
                                    context.Invalidate(feature);
                                }
                            }
                        }
                    }, enterpriseFeatureClass);

                    bool editResult = editOperation.Execute();

                    // If the table is non-versioned this is a no-op. If it is versioned, we need the Save to be done for the edits to be persisted.
                    bool saveResult = await Project.Current.SaveEditsAsync();
                }
        }
        private async Task SetupDefinitionDetailsAsync()
        {
            DefinitionDetails.Clear();
            try
            {
                var lstDefs = await QueuedTask.Run <List <string> >(() =>
                {
                    Definition datasetDefinition = Dataset.DatasetDefinition;
                    List <string> lstDefDetails  = new List <string>();
                    if (datasetDefinition is TableDefinition)
                    {
                        TableDefinition tableDefinition = datasetDefinition as TableDefinition;
                        lstDefDetails.Add($"Object ID Field: {tableDefinition.GetObjectIDField()}");
                        StringBuilder stringBuilder = new StringBuilder();

                        if (!(_datastore is FileSystemDatastore))
                        {
                            lstDefDetails.Add($"Alias Name: {tableDefinition.GetAliasName()}");
                            lstDefDetails.Add($"CreatedAt Field: {tableDefinition.GetCreatedAtField()}");
                            lstDefDetails.Add($"Creator Field: {tableDefinition.GetCreatorField()}");
                            lstDefDetails.Add($"Subtype Field: {tableDefinition.GetSubtypeField()}");
                            lstDefDetails.Add($"Default Subtype Code: {tableDefinition.GetDefaultSubtypeCode()}");
                            lstDefDetails.Add($"EditedAt Field: {tableDefinition.GetEditedAtField()}");
                            lstDefDetails.Add($"Editor Field: {tableDefinition.GetEditorField()}");
                            lstDefDetails.Add($"Global ID Field: {tableDefinition.GetGlobalIDField()}");
                            lstDefDetails.Add($"Model Name: {tableDefinition.GetModelName()}");
                            foreach (var subtype in tableDefinition.GetSubtypes())
                            {
                                stringBuilder.Append(subtype.GetCode()).Append(": ").Append(subtype.GetName()).Append(Environment.NewLine);
                            }
                            lstDefDetails.Add($"Subtypes: {stringBuilder}");
                        }
                        stringBuilder = new StringBuilder();
                        foreach (Index index in tableDefinition.GetIndexes())
                        {
                            stringBuilder.Append(index.GetName()).Append(",");
                            string order = index.IsAscending() ? "Ascending" : "Descending";
                            stringBuilder.Append(order).Append(", ");
                            string unique = index.IsUnique() ? "Unique" : "Not Unique";
                            stringBuilder.Append(unique);
                        }
                        lstDefDetails.Add($"Indexes: {stringBuilder}");
                    }

                    if (datasetDefinition is FeatureClassDefinition)
                    {
                        FeatureClassDefinition featureClassDefinition = datasetDefinition as FeatureClassDefinition;
                        if (!(_datastore is FileSystemDatastore))
                        {
                            lstDefDetails.Add($"Area Field: {featureClassDefinition.GetAreaField()}");
                            lstDefDetails.Add($"Length Field: {featureClassDefinition.GetLengthField()}");
                        }
                        lstDefDetails.Add($"Shape Field: {featureClassDefinition.GetShapeField()}");
                        lstDefDetails.Add($"Shape Type: {featureClassDefinition.GetShapeType()}");
                        lstDefDetails.Add($"Spatial Reference Name: {featureClassDefinition.GetSpatialReference().Name}");
                        Envelope extent = featureClassDefinition.GetExtent();
                        lstDefDetails.Add($"Extent Details: XMin-{extent.XMin} XMax-{extent.XMax} YMin-{extent.YMin} YMax-{extent.YMax}");
                    }

                    if (datasetDefinition is FeatureDatasetDefinition)
                    {
                        FeatureDatasetDefinition featureDatasetDefinition = datasetDefinition as FeatureDatasetDefinition;
                        lstDefDetails.Add($"Spatial Reference Name: {featureDatasetDefinition.GetSpatialReference().Name}");
                        try
                        {
                            Envelope extent = featureDatasetDefinition.GetExtent();
                            lstDefDetails.Add($"Extent Details: XMin-{extent.XMin} XMax-{extent.XMax} YMin-{extent.YMin} YMax-{extent.YMax}");
                        }
                        catch (Exception)
                        {
                            lstDefDetails.Add("Could not get extent");
                        }
                    }

                    if (datasetDefinition is RelationshipClassDefinition)
                    {
                        RelationshipClassDefinition relationshipClassDefinition = datasetDefinition as RelationshipClassDefinition;
                        lstDefDetails.Add($"Alias Name: {relationshipClassDefinition.GetAliasName()}");
                        lstDefDetails.Add($"Cardinality: {relationshipClassDefinition.GetCardinality()}");
                        lstDefDetails.Add($"Origin Class: {relationshipClassDefinition.GetOriginClass()}");
                        lstDefDetails.Add($"Destination Class: {relationshipClassDefinition.GetDestinationClass()}");
                        lstDefDetails.Add($"Origin Primary Key: {relationshipClassDefinition.GetOriginKeyField()}");
                        lstDefDetails.Add($"Origin Foreign Key: {relationshipClassDefinition.GetOriginForeignKeyField()}");
                        lstDefDetails.Add($"Is Attachement?: {relationshipClassDefinition.IsAttachmentRelationship()}");
                        lstDefDetails.Add($"Is Composite Relationship?: {relationshipClassDefinition.IsComposite()}");
                    }

                    if (datasetDefinition is AttributedRelationshipClassDefinition)
                    {
                        AttributedRelationshipClassDefinition relationshipClassDefinition = datasetDefinition as AttributedRelationshipClassDefinition;
                        lstDefDetails.Add($"Destination Key: {relationshipClassDefinition.GetDestinationKeyField()}");
                        lstDefDetails.Add($"Destination Foreign Key: {relationshipClassDefinition.GetDestinationForeignKeyField()}");
                        lstDefDetails.Add($"Object ID Field: {relationshipClassDefinition.GetObjectIDField()}");
                    }
                    return(lstDefDetails);
                });

                DefinitionDetails.AddRange(lstDefs);
            }
            catch (Exception exObj)
            {
                MessageBox.Show(exObj.Message, "Error");
            }
        }
예제 #3
0
        public void MainMethodCode()
        {
            using (Geodatabase fileGeodatabase = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(@"C:\Data\LocalGovernment.gdb"))))
                using (FeatureClass featureClass = fileGeodatabase.OpenDataset <FeatureClass>("PollingPlace"))
                {
                    FeatureClassDefinition featureClassDefinition = featureClass.GetDefinition();

                    int areaFieldIndex = featureClassDefinition.FindField(featureClassDefinition.GetAreaField());

                    // ******************** WITHOUT USING RECYCLING ********************

                    QueryFilter queryFilter = new QueryFilter {
                        WhereClause = "CITY = 'Plainfield'"
                    };

                    List <Feature> features = new List <Feature>();

                    // Searching is similar to that of Table when using Queryfilter.
                    using (RowCursor cursor = featureClass.Search(queryFilter, false))
                    {
                        while (cursor.MoveNext())
                        {
                            // Each object returned by RowCursor.Current can be cast to a Feature object if the Search was performed on a FeatureClass.
                            features.Add(cursor.Current as Feature);
                        }
                    }

                    IEnumerable <Feature> featuresHavingShapePopulated = features.Where(feature => !feature.GetShape().IsEmpty);

                    // Since Feature encapsulates unmanaged resources, it is important to remember to call Dispose() on every entry in the list when
                    // the list is no longer in use.  Alternatively, do not add the features to the list.  Instead, process each of them inside the cursor.

                    Dispose(features);

                    // ******************** USING RECYCLING ********************

                    using (RowCursor recyclingCursor = featureClass.Search(queryFilter))
                    {
                        while (recyclingCursor.MoveNext())
                        {
                            // Similar to a RowCursor on a Table, when a MoveNext is executed, the same feature object is populated with the next feature's details
                            // So any processing should be done on the Current Feature before the MoveNext is called again.

                            Feature feature = (Feature)recyclingCursor.Current;

                            if (Convert.ToDouble(feature[areaFieldIndex]) > 500)
                            {
                                Console.WriteLine(feature.GetShape().ToXML());
                            }
                        }
                    }
                }

            // Opening a Non-Versioned SQL Server instance.

            DatabaseConnectionProperties connectionProperties = new DatabaseConnectionProperties(EnterpriseDatabaseType.SQLServer)
            {
                AuthenticationMode = AuthenticationMode.DBMS,

                // Where testMachine is the machine where the instance is running and testInstance is the name of the SqlServer instance.
                Instance = @"testMachine\testInstance",

                // Provided that a database called LocalGovernment has been created on the testInstance and geodatabase has been enabled on the database.
                Database = "LocalGovernment",

                // Provided that a login called gdb has been created and corresponding schema has been created with the required permissions.
                User     = "******",
                Password = "******",
                Version  = "dbo.DEFAULT"
            };

            using (Geodatabase geodatabase = new Geodatabase(connectionProperties))
                using (FeatureClass schoolBoundaryFeatureClass = geodatabase.OpenDataset <FeatureClass>("LocalGovernment.GDB.SchoolBoundary"))
                {
                    // Using a spatial query filter to find all features which have a certain district name and lying within a given Polygon.
                    SpatialQueryFilter spatialQueryFilter = new SpatialQueryFilter
                    {
                        WhereClause    = "DISTRCTNAME = 'Indian Prairie School District 204'",
                        FilterGeometry = new PolygonBuilder(new List <Coordinate2D>
                        {
                            new Coordinate2D(1021880, 1867396),
                            new Coordinate2D(1028223, 1870705),
                            new Coordinate2D(1031165, 1866844),
                            new Coordinate2D(1025373, 1860501),
                            new Coordinate2D(1021788, 1863810)
                        }).ToGeometry(),

                        SpatialRelationship = SpatialRelationship.Within
                    };

                    using (RowCursor indianPrairieCursor = schoolBoundaryFeatureClass.Search(spatialQueryFilter, false))
                    {
                        while (indianPrairieCursor.MoveNext())
                        {
                            using (Feature feature = (Feature)indianPrairieCursor.Current)
                            {
                                // Process the feature.
                                Console.WriteLine(feature.GetObjectID());
                            }
                        }
                    }
                }
        }