您的位置:首页 > Web前端

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐