FeatureClass的"import"(转换)功能
2014-11-08 00:46
232 查看
/// <summary> /// FeatureClass的"import"功能. /// </summary> /// <param name="srcWorkspaceFactory">源IWorkspaceFactory2对象</param> /// <param name="srcWorkspacePath">源工作空间的路径,如:"G:\doc\gis\1.400\data\pdb.mdb"</param> /// <param name="srcFeatureName">源要素名,如:"hyd1_4l_1"</param> /// <param name="desWorkspaceFactory">目标IWorkspaceFactory2对象</param> /// <param name="desWorkspacePath">目标工作空间的路径,如:"G:\doc\gis\1.400\data\desPdb.mdb"(必须已存在)</param> /// <param name="desFeatureName">目标要素名,如:"desF"</param> public static void ConvertFeatureClass(ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2 srcWorkspaceFactory, string srcWorkspacePath, string srcFeatureName, ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2 desWorkspaceFactory, string desWorkspacePath, string desFeatureName) { //工作空间. ESRI.ArcGIS.Geodatabase.IWorkspace srcWs = srcWorkspaceFactory.OpenFromFile(srcWorkspacePath, 0); ESRI.ArcGIS.Geodatabase.IWorkspace desWs = desWorkspaceFactory.OpenFromFile(desWorkspacePath, 0); //必须已存在,才能open. //源. ESRI.ArcGIS.Geodatabase.IFeatureWorkspace srcFws = (ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)srcWs; ESRI.ArcGIS.Geodatabase.IFeatureClass srcFc = srcFws.OpenFeatureClass(srcFeatureName); ESRI.ArcGIS.Geodatabase.IDataset srcDs = (ESRI.ArcGIS.Geodatabase.IDataset)srcFc; ESRI.ArcGIS.Geodatabase.IFeatureClassName srcFcName = (ESRI.ArcGIS.Geodatabase.IFeatureClassName)srcDs.FullName; //目标. ESRI.ArcGIS.Geodatabase.IDataset desDs = (ESRI.ArcGIS.Geodatabase.IDataset)desWs; ESRI.ArcGIS.esriSystem.IName desName = (ESRI.ArcGIS.esriSystem.IName)desDs.FullName; ESRI.ArcGIS.Geodatabase.IWorkspaceName2 desWsName = (ESRI.ArcGIS.Geodatabase.IWorkspaceName2)desName; ESRI.ArcGIS.Geodatabase.IFeatureClassName desFcName = new ESRI.ArcGIS.Geodatabase.FeatureClassNameClass(); ESRI.ArcGIS.Geodatabase.IDatasetName2 desDsName = (ESRI.ArcGIS.Geodatabase.IDatasetName2)desFcName; desDsName.Name = desFeatureName; desDsName.WorkspaceName = desWsName; //字段检查. ESRI.ArcGIS.Geodatabase.IFieldChecker fieldChecker = new ESRI.ArcGIS.Geodatabase.FieldCheckerClass(); ESRI.ArcGIS.Geodatabase.IFields srcFields = srcFc.Fields; ESRI.ArcGIS.Geodatabase.IFields desFields = null; ESRI.ArcGIS.Geodatabase.IEnumFieldError enumFieldErr = null; fieldChecker.InputWorkspace = srcWs; fieldChecker.ValidateWorkspace = desWs; fieldChecker.Validate(srcFields, out enumFieldErr, out desFields); if (enumFieldErr != null) System.Windows.Forms.MessageBox.Show("Errors were encountered during field validation"); string shpFieldName = srcFc.ShapeFieldName; int fieldIndex = srcFc.FindField(shpFieldName); ESRI.ArcGIS.Geodatabase.IField shpField = srcFields.get_Field(fieldIndex); ESRI.ArcGIS.Geodatabase.IGeometryDef DesGeoDef = shpField.GeometryDef; //转换. ESRI.ArcGIS.Geodatabase.IFeatureDataConverter fdConverter = new ESRI.ArcGIS.Geodatabase.FeatureDataConverterClass(); ESRI.ArcGIS.Geodatabase.IEnumInvalidObject enuInvalidObj = fdConverter.ConvertFeatureClass(srcFcName, null, null, desFcName, DesGeoDef, desFields, "", 1000, 0); enuInvalidObj.Reset(); ESRI.ArcGIS.Geodatabase.IInvalidObjectInfo inValidObjInfo = null; while ((inValidObjInfo = enuInvalidObj.Next()) != null) System.Windows.Forms.MessageBox.Show(string.Format("Errors occurred for the following feature: {0}", inValidObjInfo.InvalidObjectID)); }
在主函数中调用:
ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2 srcWsf = new ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactoryClass(); ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2 desWsf = new ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactoryClass(); string srcWsPath = @"G:\doc\gis\1.400\data\pdb.mdb"; string desWsPath = @"G:\doc\gis\1.400\data\desPdb.mdb"; string srcFcName = "hyd1_4l_1"; string desFcName = "desF"; Engine.App_Code.Feature_Assist.ConvertFeatureClass(srcWsf, srcWsPath, srcFcName, desWsf, desWsPath, desFcName);
相关文章推荐
- 无法将类型为"Microsoft.Office.Interop.Excel.ApplicationClass"的 COM 对象强制转换
- 无法将类型"int"隐式转换为"string"
- 无法转化为项目财富的技术或功能就是"垃圾" [转]
- 导出Excel表格时,如何把数据库表中的编号转换成配置文件中的"汉字"
- DW5 "验证当前文档"功能无法使用
- "Tue Oct 18 04:11:56 CST 2005 "的String转换成Date
- 腾讯QQ邮箱的"超大附件"功能, 很让人失望
- Visual Studio 2010 "工具">"选项"中的VC++目录编辑功能已被否决
- 在DLL编程中调用模版类时出现的类似"class“XXX”需要有 dll 接口由 class“XXX”的客户端使用"的warning的解决方案
- "A duplicate insert block exists for class......"的解决办法
- 由"Type mismatch: cannot convert from View to ProgressBar"联想到的类型转换错误的根源
- 【Debug】无法将类型“string”隐式转换为"double"
- MOSS 2007装好后不能使用"上载多个文档"功能及报"没有安装与windows sharepoint services 兼容的数据表组件"错误
- rdlc报表的日期格式"yyyy/mm/dd 00/00/00"转换为"yyyy-mm-dd"
- 在DLL编程中调用模版类时出现的类似"class“XXX”需要有 dll 接口由 class“XXX”的客户端使用"的warning的解决方案
- 无法从"const char [11]"转换为"LPCWSTR"等问题
- Office 2003英文版 如何增加"繁体简体转换"的功能?
- "ORA-01460: 转换请求无法实现或不合理"及C#操作Blob总结
- "this class is not key value coding-compliant for the key ..."问题的解决
- 类型"string"的值无法转换为"System.Drawing.Color"