码迷,mamicode.com
首页 > 其他好文 > 详细

FeatureClass的"import"(转换)功能

时间:2014-11-08 02:02:30      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   io   color   ar   sp   for   div   

 1 /// <summary>
 2         /// FeatureClass的"import"功能.
 3         /// </summary>
 4         /// <param name="srcWorkspaceFactory">源IWorkspaceFactory2对象</param>
 5         /// <param name="srcWorkspacePath">源工作空间的路径,如:"G:\doc\gis\1.400\data\pdb.mdb"</param>
 6         /// <param name="srcFeatureName">源要素名,如:"hyd1_4l_1"</param>
 7         /// <param name="desWorkspaceFactory">目标IWorkspaceFactory2对象</param>
 8         /// <param name="desWorkspacePath">目标工作空间的路径,如:"G:\doc\gis\1.400\data\desPdb.mdb"(必须已存在)</param>
 9         /// <param name="desFeatureName">目标要素名,如:"desF"</param>
10         public static void ConvertFeatureClass(ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2 srcWorkspaceFactory, string srcWorkspacePath, string srcFeatureName, ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2 desWorkspaceFactory, string desWorkspacePath, string desFeatureName) {
11             //工作空间.
12             ESRI.ArcGIS.Geodatabase.IWorkspace srcWs = srcWorkspaceFactory.OpenFromFile(srcWorkspacePath, 0);
13             ESRI.ArcGIS.Geodatabase.IWorkspace desWs = desWorkspaceFactory.OpenFromFile(desWorkspacePath, 0);   //必须已存在,才能open.
14 
15             //源.
16             ESRI.ArcGIS.Geodatabase.IFeatureWorkspace srcFws = (ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)srcWs;
17             ESRI.ArcGIS.Geodatabase.IFeatureClass srcFc = srcFws.OpenFeatureClass(srcFeatureName);
18             ESRI.ArcGIS.Geodatabase.IDataset srcDs = (ESRI.ArcGIS.Geodatabase.IDataset)srcFc;
19             ESRI.ArcGIS.Geodatabase.IFeatureClassName srcFcName = (ESRI.ArcGIS.Geodatabase.IFeatureClassName)srcDs.FullName;
20 
21             //目标.
22             ESRI.ArcGIS.Geodatabase.IDataset desDs = (ESRI.ArcGIS.Geodatabase.IDataset)desWs;
23             ESRI.ArcGIS.esriSystem.IName desName = (ESRI.ArcGIS.esriSystem.IName)desDs.FullName;
24             ESRI.ArcGIS.Geodatabase.IWorkspaceName2 desWsName = (ESRI.ArcGIS.Geodatabase.IWorkspaceName2)desName;
25             ESRI.ArcGIS.Geodatabase.IFeatureClassName desFcName = new ESRI.ArcGIS.Geodatabase.FeatureClassNameClass();
26             ESRI.ArcGIS.Geodatabase.IDatasetName2 desDsName = (ESRI.ArcGIS.Geodatabase.IDatasetName2)desFcName;
27             desDsName.Name = desFeatureName;
28             desDsName.WorkspaceName = desWsName;
29 
30             //字段检查.
31             ESRI.ArcGIS.Geodatabase.IFieldChecker fieldChecker = new ESRI.ArcGIS.Geodatabase.FieldCheckerClass();
32             ESRI.ArcGIS.Geodatabase.IFields srcFields = srcFc.Fields;
33             ESRI.ArcGIS.Geodatabase.IFields desFields = null;
34             ESRI.ArcGIS.Geodatabase.IEnumFieldError enumFieldErr = null;
35             fieldChecker.InputWorkspace = srcWs;
36             fieldChecker.ValidateWorkspace = desWs;
37             fieldChecker.Validate(srcFields, out enumFieldErr, out desFields);
38             if (enumFieldErr != null)
39                 System.Windows.Forms.MessageBox.Show("Errors were encountered during field validation");
40 
41             string shpFieldName = srcFc.ShapeFieldName;
42             int fieldIndex = srcFc.FindField(shpFieldName);
43             ESRI.ArcGIS.Geodatabase.IField shpField = srcFields.get_Field(fieldIndex);
44             ESRI.ArcGIS.Geodatabase.IGeometryDef DesGeoDef = shpField.GeometryDef;
45 
46             //转换.
47             ESRI.ArcGIS.Geodatabase.IFeatureDataConverter fdConverter = new ESRI.ArcGIS.Geodatabase.FeatureDataConverterClass();
48             ESRI.ArcGIS.Geodatabase.IEnumInvalidObject enuInvalidObj = fdConverter.ConvertFeatureClass(srcFcName, null, null, desFcName, DesGeoDef, desFields, "", 1000, 0);
49             enuInvalidObj.Reset();
50             ESRI.ArcGIS.Geodatabase.IInvalidObjectInfo inValidObjInfo = null;
51             while ((inValidObjInfo = enuInvalidObj.Next()) != null)
52                 System.Windows.Forms.MessageBox.Show(string.Format("Errors occurred for the following feature: {0}", inValidObjInfo.InvalidObjectID));
53         }

在主函数中调用:

1 ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2 srcWsf = new ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactoryClass();
2 ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2 desWsf = new ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactoryClass();
3 
4 string srcWsPath = @"G:\doc\gis\1.400\data\pdb.mdb";
5 string desWsPath = @"G:\doc\gis\1.400\data\desPdb.mdb";
6 
7 string srcFcName = "hyd1_4l_1";
8 string desFcName = "desF";
9 Engine.App_Code.Feature_Assist.ConvertFeatureClass(srcWsf, srcWsPath, srcFcName, desWsf, desWsPath, desFcName);

 

FeatureClass的"import"(转换)功能

标签:des   style   blog   io   color   ar   sp   for   div   

原文地址:http://www.cnblogs.com/listened/p/4082620.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!