导入shape文件到SDE数据库
/**
?????? *?pDataSet:要導出的數據庫的數據集,如果直接導入到數據庫而不是數據集,則使用強制轉換IWorkspace-->IDataset
?????? *?strFeatFileDir:要導入的shape文件所在目錄
?????? *?strFeatFileName:要導入的shape文件名
?????? *?isWorkspace:標識是導入數據庫還是數據集
?????? *strOutName:存儲于數據庫的文件名??
?????? *failInfo:導入失敗文件名??
?????? *errorDetail:錯誤信息??
?????? *skipInfo:發現重名情況跳過文件名
???? **/
?
????????public void FeatureClassToFeatureClass(IDataset pDataSet, string strFeatFileDir, string strFeatFileName, string strOutName, bool isWorkspace, ref string failInfo, ref string errorDetail, ref string skipInfo)
????????{
????????????try
????????????{
????????????????IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();
????????????????IFeatureWorkspace pFeatureWK = (IFeatureWorkspace)pWSF.OpenFromFile(strFeatFileDir, 0);
????????????????IFeatureClass pInFeatureClass = pFeatureWK.OpenFeatureClass(strFeatFileName);
?
????????????????if (pInFeatureClass == null || pDataSet == null)
????????????????{
????????????????????if (failInfo == "")
????????????????????{
????????????????????????failInfo = strFeatFileDir + "\\" + strFeatFileName;
????????????????????????errorDetail = "錯誤信息:" + strFeatFileDir + "是空的矢量工作空間。";
????????????????????}
????????????????????else
????????????????????{
????????????????????????failInfo += ";" + strFeatFileDir + "\\" + strFeatFileName;
????????????????????????errorDetail += ";" + "錯誤信息:" + strFeatFileDir + "是空的矢量工作空間。";
????????????????????}
????????????????????return;
????????????????}
?
????????????????IFeatureClassName pInFeatureclassName;
????????????????IDataset pIndataset = (IDataset)pInFeatureClass;
????????????????pInFeatureclassName = (IFeatureClassName)pIndataset.FullName;
?
????????????????//如果名稱已存在
????????????????IWorkspace2 pWS2 = null;
????????????????if (isWorkspace)
????????????????????pWS2 = pDataSet as IWorkspace2;
????????????????else
????????????????????pWS2 = pDataSet.Workspace as IWorkspace2;
?
????????????????if (pWS2.get_NameExists(esriDatasetType.esriDTFeatureClass, strOutName))
????????????????{
????????????????????DialogResult result;
????????????????????result = System.Windows.Forms.MessageBox.Show(null, "矢量文件名??" + strOutName + "??在數據庫中已存在!" + "\r是否覆蓋?", "相同文件名", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
????????????????????//覆蓋原矢量要素
????????????????????if (result == DialogResult.Yes)
????????????????????{
????????????????????????IFeatureWorkspace pFWS = (IFeatureWorkspace)pWS2;
????????????????????????IDataset pDataset = pFWS.OpenFeatureClass(strOutName) as IDataset;
????????????????????????pDataset.Delete();
????????????????????????pDataset = null;
????????????????????}
????????????????????else if (result == DialogResult.No)
????????????????????{
????????????????????????//不覆蓋,則退出for循環,忽略這個要素,轉入下一個要素的導入
????????????????????????if (skipInfo == "")
????????????????????????????skipInfo = strFeatFileDir + "\\" + strFeatFileName;
????????????????????????else
????????????????????????????skipInfo += ";" + strFeatFileDir + "\\" + strFeatFileName;
????????????????????????return;
????????????????????}
????????????????}
?
????????????????IFields pInFields, pOutFields;
?
????????????????IFieldChecker pFieldChecker = new FieldCheckerClass();
????????????????IEnumFieldError pError;
????????????????pInFields = pInFeatureClass.Fields;
????????????????pFieldChecker.Validate(pInFields, out pError, out pOutFields);
?
????????????????IField geoField = null;
????????????????for (int i = 0; i < pOutFields.FieldCount; i++)
????????????????{
????????????????????IField pField = pOutFields.get_Field(i);
????????????????????if (pField.Type == esriFieldType.esriFieldTypeOID)
????????????????????{
????????????????????????IFieldEdit pFieldEdit = (IFieldEdit)pField;
????????????????????????pFieldEdit.Name_2 = pField.AliasName;
????????????????????}
????????????????????if (pField.Type == esriFieldType.esriFieldTypeGeometry)
????????????????????{
????????????????????????geoField = pField;
????????????????????????break;
????????????????????}
????????????????}
?
????????????????IGeometryDef geometryDef = geoField.GeometryDef;
?
????????????????IFeatureDataConverter one2another = new FeatureDataConverterClass();
?
????????????????IFeatureClassName pOutFeatureClassName = new FeatureClassNameClass();
????????????????IDatasetName pOutDatasetName = (IDatasetName)pOutFeatureClassName;
????????????????if (isWorkspace)
????????????????????pOutDatasetName.WorkspaceName = (IWorkspaceName)pDataSet.FullName;
????????????????else
????????????????????pOutDatasetName.WorkspaceName = (IWorkspaceName)((IDataset)pDataSet.Workspace).FullName;
????????????????pOutDatasetName.Name = strOutName;
?
????????????????if (isWorkspace)
????????????????{
????????????????????one2another.ConvertFeatureClass(pInFeatureclassName, null, null, pOutFeatureClassName, geometryDef,
????????????????????pOutFields, "", 1000, 0);
????????????????}
????????????????else
????????????????{
????????????????????IFeatureDataset pFeatDS = (IFeatureDataset)pDataSet;
????????????????????IFeatureDatasetName pOutFeatDSName = pFeatDS.FullName as IFeatureDatasetName;
?
????????????????????one2another.ConvertFeatureClass(pInFeatureclassName, null, pOutFeatDSName, pOutFeatureClassName, geometryDef,
????????????????????pOutFields, "", 1000, 0);
????????????????????pOutFeatDSName = null;
????????????????????pFeatDS = null;
????????????????}
????????????}
????????????catch (Exception ex)
????????????{
????????????????if (failInfo == "")
????????????????{
????????????????????failInfo = strFeatFileDir + "\\" + strFeatFileName;
????????????????????errorDetail = "錯誤信息:" + ex.Message;
????????????????}
????????????????else
????????????????{
????????????????????failInfo += ";" + strFeatFileDir + "\\" + strFeatFileName;
????????????????????errorDetail += ";" + "錯誤信息:" + ex.Message;
????????????????}
????????????????Console.WriteLine(ex.Message);
????????????????return;
????????????}
????????}
轉載于:https://www.cnblogs.com/bluemaplestudio/archive/2010/04/13/1710747.html
總結
以上是生活随笔為你收集整理的导入shape文件到SDE数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android笔记】如何创建列表视图3
- 下一篇: 【SQL基础】T-SQL函数类型——元数