/**/
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/
以下代码主要通过两种方法来进行数据加载
1:直接调用GP工具的Copy Feature
2:使用IFeatureDataConverter转换
说明:大家在使用ArcCatalog对数据导入导出应该使用过两种方法
1:Copy /Paste
该方法其实就是调用Copy ,这种方法可以直接将数据集里面包含高级对象(拓扑、几何网络、关系类等)都一块进行paste,而且该方法不会对ObjectID进行重排
Copy工具是对整个数据集拷贝
Copy Feature 工具是对要素类拷贝
2:Import/Export
该方法之对要素类进行导入导出,那么就意味着高级对象不会被导入导出,而且ObjectID会重排
所以在使用过程中可以选择不同的方法
第一种方法:
- using System;
- using System.IO;
- using ESRI.ArcGIS.DataManagementTools;
- using ESRI.ArcGIS.esriSystem;
- using ESRI.ArcGIS.Geodatabase;
- using ESRI.ArcGIS.Geoprocessor;
-
- namespace CopyFeaturesDemo
- {
- public class CopyFeaturesDemo
- {
- 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("LoadTarget.gdb"))
- {
- Directory.Delete("LoadTarget.gdb", true);
- }
-
-
- Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.FileGDBWorkspaceFactory");
- IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);
- workspaceFactory.Create(Environment.CurrentDirectory, "LoadTarget", null, 0);
- #endregion
-
-
- Geoprocessor geoprocessor = new Geoprocessor();
-
-
- geoprocessor.OverwriteOutput = true;
-
-
- CopyFeatures copyFeatures = new CopyFeatures
- {
- in_features = Path.Combine(Environment.CurrentDirectory, @"..\..\..\Data\Buildings.shp"),
- out_feature_class = Path.Combine(Environment.CurrentDirectory, @"LoadTarget.gdb\Buildings_GP")
- };
-
-
- try
- {
- geoprocessor.Execute(copyFeatures, null);
- Console.WriteLine("CopyFeatures completed.");
- }
- catch (Exception exc)
- {
- Console.WriteLine("CopyFeatures failed.");
- Console.WriteLine("Exception message: {0}", exc.Message);
- }
- finally
- {
-
- for (int i = 0; i < geoprocessor.MessageCount; i++)
- {
- Console.WriteLine(geoprocessor.GetMessage(i));
- }
- }
- }
- }
- }
第二种方法
- using System;
- using System.Runtime.InteropServices;
- using ESRI.ArcGIS.esriSystem;
- using ESRI.ArcGIS.Geodatabase;
- using ESRI.ArcGIS.DataSourcesFile;
- using ESRI.ArcGIS.DataSourcesGDB;
-
- namespace FDConverterDemo
- {
- public class FDConverterDemo
- {
- 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
-
- try
- {
-
- IWorkspaceName sourceWorkspaceName = new WorkspaceNameClass
- {
- PathName = @"..\..\..\Data",
- WorkspaceFactoryProgID = "esriDataSourcesFile.ShapefileWorkspaceFactory"
- };
-
-
- Type targetFactoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.FileGDBWorkspaceFactory");
- IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(targetFactoryType);
- IWorkspaceName targetWorkspaceName = workspaceFactory.Create(Environment.CurrentDirectory, "LoadTarget", null, 0);
-
-
- IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass();
- IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureClassName;
- sourceDatasetName.WorkspaceName = sourceWorkspaceName;
- sourceDatasetName.Name = "Buildings.shp";
-
-
- IFeatureClassName targetFeatureClassName = new FeatureClassNameClass();
- IDatasetName targetDatasetName = (IDatasetName)targetFeatureClassName;
- targetDatasetName.WorkspaceName = targetWorkspaceName;
- targetDatasetName.Name = "Buildings_FDC";
-
-
- IName sourceName = (IName)sourceDatasetName;
- IFeatureClass sourceFeatureClass = (IFeatureClass)sourceName.Open();
-
-
- IName sourceIName = (IName)sourceWorkspaceName;
- IName targetIName = (IName)targetWorkspaceName;
- IWorkspace sourceWorkspace = (IWorkspace)sourceIName.Open();
- IWorkspace targetWorkspace = (IWorkspace)targetIName.Open();
-
-
- IFieldChecker fieldChecker = new FieldCheckerClass();
- IFields sourceFields = sourceFeatureClass.Fields;
- fieldChecker.InputWorkspace = sourceWorkspace;
- fieldChecker.ValidateWorkspace = targetWorkspace;
- IEnumFieldError enumFieldError = null;
- IFields outputFields = null;
- fieldChecker.Validate(sourceFields, out enumFieldError, out outputFields);
-
-
-
-
-
- int shapeFieldIndex = sourceFeatureClass.FindField(sourceFeatureClass.ShapeFieldName);
- IField shapeField = sourceFields.get_Field(shapeFieldIndex);
- IGeometryDef geometryDef = shapeField.GeometryDef;
- IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;
- geometryDefEdit.GridCount_2 = 1;
- geometryDefEdit.set_GridSize(0, 20);
-
-
- IFeatureDataConverter featureDataConverter = new FeatureDataConverterClass();
- IEnumInvalidObject enumInvalidObject = featureDataConverter.ConvertFeatureClass(sourceFeatureClassName,
- null, null, targetFeatureClassName, geometryDef, outputFields, "", 1000, 0);
-
-
-
- }
- catch (COMException comExc)
- {
- Console.WriteLine("An error occurred ({0}): {1}", comExc.ErrorCode, comExc.Message);
- }
- catch (Exception exc)
- {
- Console.WriteLine("An error occurred: {0}", exc.Message);
- }
- finally
- {
- Console.WriteLine("Done.");
- }
- }
- }
- }