ArcGIS Engine开发Geodatabase代码(五)——Relationship Class
时间:2013-4-25
作者:悬浮的青春
分类: 无
/**/
ESRI Developer Summit 2009
Developer's Guide to the Geodatabase
Code Samples
6 April 2009
/**/
开发环境:
- ArcGIS Engine9.3/9.3.1
- VS2008
关于版本的接口差别参考:
http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Type_changes_between_9_3_and_10/000100000408000000/
以下示例主要是使用代码创建关系类
- using System;
- using System.IO;
- using System.Runtime.InteropServices;
- using ESRI.ArcGIS.DataSourcesGDB;
- using ESRI.ArcGIS.esriSystem;
- using ESRI.ArcGIS.Geodatabase;
-
- namespace EditingDemo
- {
- public class EditingDemo
- {
- public static void Main(string[] args)
- {
- #region Licensing
-
-
- IAoInitialize aoInitialize = new AoInitializeClass();
- esriLicenseStatus licenseStatus = aoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcInfo);
- if (licenseStatus != esriLicenseStatus.esriLicenseCheckedOut)
- {
- Console.WriteLine("Unable to check-out an ArcInfo license, error code is {0}", licenseStatus);
- return;
- }
- #endregion
-
- #region Data Setup
-
- if (Directory.Exists("Riverside.gdb"))
- {
- Directory.Delete("Riverside.gdb", true);
- }
-
-
- Type tempFactoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.FileGDBWorkspaceFactory");
- IWorkspaceFactory tempWorkspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(tempFactoryType);
- IWorkspaceName sourceWorkspace = new WorkspaceNameClass
- {
- PathName = @"..\..\..\Data\Riverside.gdb",
- WorkspaceFactoryProgID = "esriDataSourcesGDB.FileGDBWorkspaceFactory"
- };
- IWorkspaceName copiedWorkspace = null;
- tempWorkspaceFactory.Copy(sourceWorkspace, Environment.CurrentDirectory, out copiedWorkspace);
- #endregion
-
- try
- {
-
- Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.FileGDBWorkspaceFactory");
- IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);
- IWorkspace workspace = workspaceFactory.OpenFromFile("Riverside.gdb", 0);
- IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;
-
-
- IFeatureClass polesFeatureClass = featureWorkspace.OpenFeatureClass("Utility_Poles");
- IFeatureClass transformersFeatureClass = featureWorkspace.OpenFeatureClass("Transformers");
-
-
- IFeatureDataset featureDataset = featureWorkspace.OpenFeatureDataset("Electric");
- IRelationshipClassContainer relClassContainer = (IRelationshipClassContainer)featureDataset;
-
-
- IRelationshipClass relationshipClass = relClassContainer.CreateRelationshipClass("PolesToTransformers",
- polesFeatureClass, transformersFeatureClass, "supports", "is located on",
- esriRelCardinality.esriRelCardinalityOneToMany, esriRelNotification.esriRelNotificationForward,
- true, false, null, "Pole_ID", "", "Pole_ID", "");
-
-
-
-
- IRelationshipRule relationshipRule = new RelationshipRuleClass
- {
- OriginClassID = polesFeatureClass.ObjectClassID,
- OriginSubtypeCode = 1,
- OriginMaximumCardinality = 1,
- OriginMinimumCardinality = 1,
- DestinationClassID = transformersFeatureClass.ObjectClassID,
- DestinationSubtypeCode = 0,
- DestinationMaximumCardinality = 3,
- DestinationMinimumCardinality = 0
- };
-
-
- relationshipClass.AddRelationshipRule(relationshipRule);
-
-
-
-
- IRelationshipRule relationshipRule2 = new RelationshipRuleClass
- {
- OriginClassID = polesFeatureClass.ObjectClassID,
- OriginSubtypeCode = 2,
- OriginMaximumCardinality = 1,
- OriginMinimumCardinality = 1,
- DestinationClassID = transformersFeatureClass.ObjectClassID,
- DestinationSubtypeCode = 0,
- DestinationMaximumCardinality = 5,
- DestinationMinimumCardinality = 0
- };
-
- relationshipClass.AddRelationshipRule(relationshipRule2);
-
-
- IValidation validation = (IValidation)polesFeatureClass;
- ISelectionSet selectionSet = validation.Validate(null, null);
- Console.WriteLine("There are {0} features that are violating the relationship rules.", selectionSet.Count);
-
-
- IEnumIDs enumIDs = selectionSet.IDs;
- enumIDs.Reset();
- int oid = -1;
- while ((oid = enumIDs.Next()) != -1)
- {
- Console.WriteLine("Invalid Pole OID = {0}", oid);
- }
- }
- catch (COMException ComEx)
- {
- Console.WriteLine("An error occurred: {0}, Error Code: {1}", ComEx.Message, ComEx.ErrorCode);
- }
- catch (Exception exc)
- {
- Console.WriteLine("An error occurred: {0}", exc.Message);
- }
- finally
- {
- Console.WriteLine("Done.");
- }
-
- aoInitialize.Shutdown();
- }
- }
- }
标签: arcgis二次开发 arcgis Geodatabase
WRITTEN BY
熟悉openlayers,cesium,vue,typescript,JavaScript等。