《转》C#+ArcEngine 不同格式数据打开,对象创建,导入导出
2015-07-28 14:30
501 查看
(2012-04-10 16:20:08)
转载▼
标签:杂谈 |
public class clsOpenClass
{
public static void OpenFeatureClass(AxMapControl
MapControl,
IFeatureClassName
pFcName, ListView listview1)
{
try
{
MapControl.Map.ClearLayers();
MapControl.SpatialReference
= null;
IName
pName = pFcName as IName;
IFeatureClass
pFc = pName.Open() as IFeatureClass;
listview1.Items.Clear();
listview1.Columns.Clear();
LoadListView(pFc,
listview1);
IFeatureCursor
pCursor = pFc.Search(null, false);
IFeature
pfea = pCursor.NextFeature();
int
j = 0;
while
(pfea != null)
{
ListViewItem
lv = new ListViewItem();
for
(int i = 0; i < pfea.Fields.FieldCount; i++)
{
string
sFieldName = pfea.Fields.get_Field(i).Name;
lv.SubItems.Add(FeatureHelper.GetFeatureValue(pfea,
sFieldName).ToString());
}
lv.Tag
= pfea;
if
(j % 2 == 0)
{
lv.BackColor
= System.Drawing.Color.GreenYellow;
}
listview1.Items.Add(lv);
pfea
= pCursor.NextFeature();
j++;
}
LSGISHelper.OtherHelper.ReleaseObject(pCursor);
//最后加载图形数据
if
(pFcName.FeatureType == esriFeatureType.esriFTRasterCatalogItem)
{
ESRI.ArcGIS.Carto.IGdbRasterCatalogLayer
pGdbRCLayer = new ESRI.ArcGIS.Carto.GdbRasterCatalogLayerClass();
pGdbRCLayer.Setup(pFc
as ITable);
MapControl.Map.AddLayer(pGdbRCLayer
as ILayer);
}
else
if( (pFcName.FeatureType == esriFeatureType.esriFTSimple)||
(pFcName.FeatureType
== esriFeatureType.esriFTComplexEdge)||
(pFcName.FeatureType
== esriFeatureType.esriFTComplexJunction)||
(pFcName.FeatureType
== esriFeatureType.esriFTSimpleEdge)||
(pFcName.FeatureType
== esriFeatureType.esriFTSimpleJunction))
{
IFeatureLayer
pLayer = new FeatureLayerClass();
pLayer.FeatureClass
= pFc;
pLayer.Name
= (pFc as IDataset).Name;
MapControl.Map.AddLayer(pLayer
as ILayer);
}
else
if (pFcName.FeatureType == esriFeatureType.esriFTAnnotation)
{
ILayer
pLayer = OpenAnnotationLayer(pFc);
pLayer.Name
= (pFc as IDataset).Name;
MapControl.Map.AddLayer(pLayer
as ILayer);
}
MapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,
null, null);
}
catch (Exception
ex)
{ }
}
public static void OpenRasterDataset(AxMapControl
MapControl,
IRasterDatasetName
pRdName, ListView listview1)
{
MapControl.ClearLayers();
MapControl.SpatialReference
= null;
listview1.Items.Clear();
listview1.Columns.Clear();
IDatasetName pDsName
= pRdName as IDatasetName;
string sName
= pDsName.Name;
IName pName
= pRdName as IName;
IRasterDataset pRds
= pName.Open() as IRasterDataset;
IRasterLayer pRL
= new RasterLayerClass();
pRL.CreateFromDataset(pRds);
pRL.Name = sName;
MapControl.AddLayer(pRL
as ILayer);
MapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,
null, null);
}
public static void OpenMosaicDataset(AxMapControl
MapControl,
IMosaicDatasetName pMdName,
ListView listview1)
{
MapControl.ClearLayers();
MapControl.SpatialReference
= null;
listview1.Items.Clear();
listview1.Columns.Clear();
IDatasetName pDsName
= pMdName as IDatasetName;
string sName
= pDsName.Name;
IName pName
= pMdName as IName;
IMosaicDataset pMds
= pName.Open() as IMosaicDataset;
IFeatureClass pFc
= pMds.Catalog;
listview1.Items.Clear();
listview1.Columns.Clear();
LoadListView(pFc,
listview1);
IFeatureCursor pCursor
= pFc.Search(null, false);
IFeature pfea
= pCursor.NextFeature();
int j =
0;
while (pfea
!= null)
{
ListViewItem
lv = new ListViewItem();
for
(int i = 0; i < pfea.Fields.FieldCount; i++)
{
string
sFieldName = pfea.Fields.get_Field(i).Name;
lv.SubItems.Add(FeatureHelper.GetFeatureValue(pfea,
sFieldName).ToString());
}
lv.Tag
= pfea;
if
(j % 2 == 0)
{
lv.BackColor
= System.Drawing.Color.GreenYellow;
}
listview1.Items.Add(lv);
pfea
= pCursor.NextFeature();
j++;
}
LSGISHelper.OtherHelper.ReleaseObject(pCursor);
IMosaicLayer pML
= new MosaicLayerClass();
pML.CreateFromMosaicDataset(pMds);
MapControl.AddLayer(pML
as ILayer);
MapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,
null, null);
}
public static void OpenTable(AxMapControl
MapControl,
ITableName pTName,
ListView listview1)
{
try
{
MapControl.Map.ClearLayers();
MapControl.SpatialReference
= null;
MapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewAll,
null, null);
IName
pName = pTName as IName;
ITable
pFc = pName.Open() as ITable;
listview1.Items.Clear();
listview1.Columns.Clear();
LoadListView(pFc,
listview1);
ICursor
pCursor = pFc.Search(null, false);
IRow
pfea = pCursor.NextRow();
int
j = 0;
while
(pfea != null)
{
ListViewItem
lv = new ListViewItem();
for
(int i = 0; i < pfea.Fields.FieldCount; i++)
{
string
sFieldName = pfea.Fields.get_Field(i).Name;
lv.SubItems.Add(FeatureHelper.GetRowValue(pfea,
sFieldName).ToString());
}
lv.Tag
= pfea;
if
(j % 2 == 0)
{
lv.BackColor
= System.Drawing.Color.GreenYellow;
}
listview1.Items.Add(lv);
pfea
= pCursor.NextRow();
j++;
}
LSGISHelper.OtherHelper.ReleaseObject(pCursor);
}
catch { }
}
public static void LoadListView(IFeatureClass
pFC, ListView listView1)
{
try
{
listView1.Columns.Clear();
//添加一个空
ColumnHeader
columnHeader = new ColumnHeader();
listView1.Columns.AddRange(new
System.Windows.Forms.ColumnHeader[] {
columnHeader
});
columnHeader.Text
= "";
for
(int i = 0; i < pFC.Fields.FieldCount; i++)
{
ColumnHeader
columnHeader1 = new ColumnHeader();
listView1.Columns.AddRange(new
System.Windows.Forms.ColumnHeader[] {
columnHeader1
});
IFields
pFields = pFC.Fields;
IField
pField = pFields.get_Field(i);
columnHeader1.Text
= pField.AliasName;
}
}
catch (Exception
ex)
{ }
}
public static void LoadListView(ITable
pFC, ListView listView1)
{
try
{
listView1.Columns.Clear();
//添加一个空
ColumnHeader
columnHeader = new ColumnHeader();
listView1.Columns.AddRange(new
System.Windows.Forms.ColumnHeader[] {
columnHeader
});
columnHeader.Text
= "";
for
(int i = 0; i < pFC.Fields.FieldCount; i++)
{
ColumnHeader
columnHeader1 = new ColumnHeader();
listView1.Columns.AddRange(new
System.Windows.Forms.ColumnHeader[] {
columnHeader1
});
IFields
pFields = pFC.Fields;
IField
pField = pFields.get_Field(i);
columnHeader1.Text
= pField.AliasName;
}
}
catch (Exception
ex)
{ }
}
public static ILayer OpenAnnotationLayer(IFeatureClass
pfc)
{
IFDOGraphicsLayerFactory
pfdof = new FDOGraphicsLayerFactoryClass();
IFeatureDataset pFDS=pfc.FeatureDataset;
IWorkspace pWS
= pFDS.Workspace;
IFeatureWorkspace
pFWS=pWS as IFeatureWorkspace;
ILayer pLayer
= pfdof.OpenGraphicsLayer(pFWS, pFDS, (pfc as IDataset).Name
);
return pLayer;
}
}
二:创建类
public class clsCreateClass
{
public IFeatureDataset CreateDataset(IWorkspace
pWorkspace)
{
try
{
if
(pWorkspace == null) return null;
IFeatureWorkspace
aFeaWorkspace = pWorkspace as IFeatureWorkspace;
if
(aFeaWorkspace == null) return null;
DatasetPropertiesForm
aForm = new DatasetPropertiesForm();
aForm.HignPrecision
= LSGISHelper.WorkspaceHelper.HighPrecision(pWorkspace);
if
(aForm.ShowDialog() == DialogResult.OK)
{
string
dsName = aForm.FeatureDatasetName;
ISpatialReference
aSR = aForm.SpatialReference;
IFeatureDataset
aDS = aFeaWorkspace.CreateFeatureDataset(dsName, aSR);
return
aDS;
}
}
catch (Exception
ex) { }
return null;
}
public IRasterDataset CreateRasterDataset(IWorkspace
pWorkspace,string sName
)
{
try
{
IRasterWorkspaceEx
pRWEx = pWorkspace as IRasterWorkspaceEx;
IGeometryDef
pGDef=new GeometryDefClass ();
IRasterDataset
pRD = pRWEx.CreateRasterDataset(
sName,
3, rstPixelType.PT_CHAR, null, null, null, null);
}
catch {
}
return null;
}
public IFeatureClass CreateFeatureClass(IWorkspace
pWorkspace)
{
if (pWorkspace
== null) return null;
IFeatureWorkspace
aFeaWorkspace = pWorkspace as IFeatureWorkspace;
if (aFeaWorkspace
== null) return null;
IFeatureClass
aClass = null;
FeatureClassWizard
aForm = new FeatureClassWizard();
aForm.Workspace
= pWorkspace;
if (aForm.ShowDialog()
== DialogResult.OK)
{
while
(true)
{
string
className = aForm.FeatureClassName;
string
aliasName = aForm.FeatureClassAliasName;
IFields
flds = aForm.Fields;
try
{
aClass
= aFeaWorkspace.CreateFeatureClass(className, flds
,
null, null, esriFeatureType.esriFTSimple, "SHAPE", null);
if
(!aliasName.Equals(""))
{
IClassSchemaEdit
aClassEdit = aClass as IClassSchemaEdit;
if
(aClassEdit != null) aClassEdit.AlterAliasName(aliasName);
}
break;
}
catch
(Exception ex)
{
//MessageBox.Show
("错误:\n"+ex.Message ,"新建特性类",
//
MessageBoxButtons.OK ,MessageBoxIcon.Error );
LSCommonHelper.MessageBoxHelper.ShowErrorMessageBox(ex,
"");
}
aForm
= new FeatureClassWizard();
aForm.Workspace
= pWorkspace;
aForm.FeatureClassName
= className;
aForm.FeatureClassAliasName
= aliasName;
aForm.Fields
= flds;
if
(aForm.ShowDialog() == DialogResult.Cancel) break;
}
}
return aClass;
}
public IFeatureClass CreateFeatureClass(IFeatureDataset
pDS)
{
if (pDS
== null) return null;
IFeatureClass
aClass = null;
FeatureClassWizard
aForm = new FeatureClassWizard();
aForm.Workspace
= (pDS as IDataset).Workspace;
IGeoDataset
pGDS = pDS as IGeoDataset;
if (pGDS
!= null)
{
aForm.SpatialReference
= pGDS.SpatialReference;
}
if (aForm.ShowDialog()
== DialogResult.OK)
{
while
(true)
{
string
className = aForm.FeatureClassName;
string
aliasName = aForm.FeatureClassAliasName;
IFields
flds = aForm.Fields;
try
{
aClass
= pDS.CreateFeatureClass(className, flds
,
null, null, esriFeatureType.esriFTSimple, "SHAPE", null);
if
(!aliasName.Equals(""))
{
IClassSchemaEdit
aClassEdit = aClass as IClassSchemaEdit;
if
(aClassEdit != null) aClassEdit.AlterAliasName(aliasName);
}
break;
}
catch
(Exception ex)
{
LSCommonHelper.MessageBoxHelper.ShowErrorMessageBox(ex,
"请选择高精度坐标系");
}
aForm
= new FeatureClassWizard();
aForm.Workspace
= (pDS as IDataset).Workspace;
aForm.FeatureClassName
= className;
aForm.FeatureClassAliasName
= aliasName;
aForm.Fields
= flds;
if
(aForm.ShowDialog() == DialogResult.Cancel) break;
}
}
return aClass;
}
public ITable CreateTable(IWorkspace
pWorkspace)
{
if (pWorkspace
== null) return null;
IFeatureWorkspace
aFeaWorkspace = pWorkspace as IFeatureWorkspace;
if (aFeaWorkspace
== null) return null;
ITable aTable
= null;
DataTableWizard
aWizard = new DataTableWizard();
aWizard.Workspace
= pWorkspace;
if (aWizard.ShowDialog()
== DialogResult.OK)
{
while
(true)
{
string
tableName = aWizard.TableName;
string
aliasName = aWizard.TableAliasName;
IFields
flds = aWizard.Fields;
try
{
aTable
= aFeaWorkspace.CreateTable(tableName, flds
,
null, null, null);
if
(!aliasName.Equals(""))
{
IClassSchemaEdit
aClassEdit = aTable as IClassSchemaEdit;
aClassEdit.RegisterAsObjectClass("OBJECTID",
null);
if
(aClassEdit != null) aClassEdit.AlterAliasName(aliasName);
}
break;
}
catch
(Exception ex)
{
//MessageBox.Show
("错误:\n"+ex.Message ,"新建表",
//
MessageBoxButtons.OK ,MessageBoxIcon.Error );
LSCommonHelper.MessageBoxHelper.ShowErrorMessageBox(ex,
"");
}
aWizard
= new DataTableWizard();
aWizard.Workspace
= pWorkspace;
aWizard.TableName
= tableName;
aWizard.TableAliasName
= aliasName;
aWizard.Fields
= flds;
if
(aWizard.ShowDialog() == DialogResult.Cancel) break;
}
}
return aTable;
}
}
三:导出类
public class clsExportClass
{
/// <summary>
/// 导出FeatureClass到Shapefile文件
/// </summary>
/// <param name="apFeatureClass"></param>
public static bool ExportFeatureClassToShp(string
sPath,IFeatureClass apFeatureClass)
{
try
{
string
ExportFileShortName = System.IO.Path.GetFileNameWithoutExtension(sPath);
if
(ExportFileShortName == "")
{
ExportFileShortName
=LSCommonHelper.OtherHelper.GetRightName( (apFeatureClass as
IDataset).Name,".");
}
string
ExportFilePath = System.IO.Path.GetDirectoryName(sPath);
if
(ExportFilePath == null)
{
ExportFilePath
= sPath;
}
//设置导出要素类的参数
IFeatureClassName
pOutFeatureClassName = new FeatureClassNameClass();
IDataset
pOutDataset = (IDataset)apFeatureClass;
pOutFeatureClassName
= (IFeatureClassName)pOutDataset.FullName;
//创建一个输出shp文件的工作空间
IWorkspaceFactory
pShpWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
IWorkspaceName
pInWorkspaceName = new WorkspaceNameClass();
pInWorkspaceName
= pShpWorkspaceFactory.Create(ExportFilePath, ExportFileShortName,
null, 0);
//创建一个要素集合
IFeatureDatasetName
pInFeatureDatasetName = null;
//创建一个要素类
IFeatureClassName
pInFeatureClassName = new FeatureClassNameClass();
IDatasetName
pInDatasetClassName;
pInDatasetClassName
= (IDatasetName)pInFeatureClassName;
pInDatasetClassName.Name
= ExportFileShortName;//作为输出参数
pInDatasetClassName.WorkspaceName
= pInWorkspaceName;
//通过FIELDCHECKER检查字段的合法性,为输出SHP获得字段集合
long
iCounter;
IFields
pOutFields, pInFields;
IField
pGeoField;
IEnumFieldError
pEnumFieldError = null;
pInFields
= apFeatureClass.Fields;
IFieldChecker
pFieldChecker = new FieldChecker();
pFieldChecker.Validate(pInFields,
out pEnumFieldError, out pOutFields);
//通过循环查找几何字段
pGeoField
= null;
for
(iCounter = 0; iCounter < pOutFields.FieldCount;
iCounter++)
{
if
(pOutFields.get_Field((int)iCounter).Type == esriFieldType.esriFieldTypeGeometry)
{
pGeoField
= pOutFields.get_Field((int)iCounter);
break;
}
}
//得到几何字段的几何定义
IGeometryDef
pOutGeometryDef;
IGeometryDefEdit
pOutGeometryDefEdit;
pOutGeometryDef
= pGeoField.GeometryDef;
//设置几何字段的空间参考和网格
pOutGeometryDefEdit
= (IGeometryDefEdit)pOutGeometryDef;
pOutGeometryDefEdit.GridCount_2
= 1;
pOutGeometryDefEdit.set_GridSize(0,
1500000);
//开始导入
IFeatureDataConverter
pShpToClsConverter = new FeatureDataConverterClass();
pShpToClsConverter.ConvertFeatureClass(pOutFeatureClassName,
null, pInFeatureDatasetName, pInFeatureClassName, pOutGeometryDef,
pOutFields, "", 1000, 0);
return
true;
}
catch (Exception
ex)
{
return
false;
}
}
public static void ExportFeatureClass2Shapefile(IFeatureClassName
pFcName)
{
IName pName
= pFcName as IName;
IFeatureClass
pFc = pName.Open() as IFeatureClass;
SaveFileDialog
ofd = new SaveFileDialog();
ofd.Filter =
"Shapefile文件(.shp)|*.shp";
if (ofd.ShowDialog()
== DialogResult.OK)
{
string
sPath = ofd.FileName;
if
(ExportFeatureClassToShp(sPath, pFc))
{
LSCommonHelper.MessageBoxHelper.ShowMessageBox("导出成功");
}
LSCommonHelper.MessageBoxHelper.ShowMessageBox("导出失败");
}
}
public static bool ConvertFeatureDataset(IWorkspace
sourceWorkspace, IWorkspace targetWorkspace,
string nameOfSourceFeatureDataset, string
nameOfTargetFeatureDataset)
{
try
{
//create
source workspace name
IDataset
sourceWorkspaceDataset = (IDataset)sourceWorkspace;
IWorkspaceName
sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName;
//create
source dataset name
IFeatureDatasetName
sourceFeatureDatasetName = new FeatureDatasetNameClass();
IDatasetName
sourceDatasetName = (IDatasetName)sourceFeatureDatasetName;
sourceDatasetName.WorkspaceName
= sourceWorkspaceName;
sourceDatasetName.Name
= nameOfSourceFeatureDataset;
//create
target workspace name
IDataset
targetWorkspaceDataset = (IDataset)targetWorkspace;
IWorkspaceName
targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName;
//create
target dataset name
IFeatureDatasetName
targetFeatureDatasetName = new FeatureDatasetNameClass();
IDatasetName
targetDatasetName = (IDatasetName)targetFeatureDatasetName;
targetDatasetName.WorkspaceName
= targetWorkspaceName;
targetDatasetName.Name
= nameOfTargetFeatureDataset;
//Convert
feature dataset
IFeatureDataConverter
featureDataConverter = new FeatureDataConverterClass();
featureDataConverter.ConvertFeatureDataset(sourceFeatureDatasetName,
targetFeatureDatasetName, null, "", 1000, 0);
return
true;
}
catch (Exception
ex)
{ return
false; }
}
public static void ExportFeatureDataset2GDB(IDatasetName
pDSName,int flag)
{
FolderBrowserDialog
fbd = new FolderBrowserDialog();
fbd.Description
= "选择保存路径";
if (fbd.ShowDialog()
== DialogResult.OK)
{
string
sPath = fbd.SelectedPath;
string
sTemplate = "";
if
(flag == 0)
{
sTemplate
= Application.StartupPath + @"\template\pgdb.mdb";
File.Copy(sTemplate,
sPath + "\\pgdb.mdb");
}
else
{
sTemplate
= Application.StartupPath + @"\template\fgdb.gdb";
FileHelper.CopyDir(sTemplate,
sPath+"\\fgdb.gdb");
}
IName
pName = pDSName as IName;
string
sSrcDSName = pDSName.Name;
sSrcDSName
= LSCommonHelper.OtherHelper.GetRightName(sSrcDSName, ".");
IDataset
pDS = pName.Open() as IDataset;
IWorkspace
pSrcWS = pDS.Workspace;
IWorkspace
pDesWS = null;
if
(flag == 0)
{
pDesWS
= LSGISHelper.WorkspaceHelper.GetAccessWorkspace(sPath + "\\pgdb.mdb");
}
else
{
pDesWS
= LSGISHelper.WorkspaceHelper.GetFGDBWorkspace(sPath + "\\fgdb.gdb");
}
if
(ConvertFeatureDataset(pSrcWS, pDesWS, sSrcDSName, sSrcDSName))
{
LSCommonHelper.MessageBoxHelper.ShowMessageBox("导出成功");
}
else
{
LSCommonHelper.MessageBoxHelper.ShowMessageBox("导出失败");
}
}
}
public static void ExportFeatureDataset2Shapefile(IDatasetName
pDSName,
TaskMonitor
mTaskMonitor)
{
FolderBrowserDialog
fbd = new FolderBrowserDialog();
fbd.Description
= "选择保存路径";
if
(fbd.ShowDialog() == DialogResult.OK)
{
string
sPath = fbd.SelectedPath;
IName
pName = pDSName as IName;
IDataset
pDS = pName.Open() as IDataset;
IFeatureDataset
pFDS = pDS as IFeatureDataset;
IFeatureClassContainer
pFCC = pFDS as IFeatureClassContainer;
IFeatureClass
pfc = null;
mTaskMonitor.EnterWaitState();
for
(int i = 0; i < pFCC.ClassCount; i++)
{
pfc
= pFCC.get_Class(i);
mTaskMonitor.TaskCaption
= "正在导出第"+(i+1)+"个"+pfc.AliasName+"图层,共"+pFCC.ClassCount+"个";
mTaskMonitor.TaskProgress
= LSCommonHelper.MathHelper.Precent(
0,
pFCC.ClassCount, i);
if
(ExportFeatureClassToShp(sPath, pfc))
{
}
}
mTaskMonitor.ExitWaitState();
LSCommonHelper.MessageBoxHelper.ShowMessageBox("导出完毕");
}
}
}
四:导入类
public class clsImportClass
{
public static void ImportGDB2SDE(IWorkspace
pDesWS, int flag)
{
IWorkspace pSrcWS
= null;
try
{
if
(flag == 0)
{
OpenFileDialog
ofd = new OpenFileDialog();
ofd.Filter
= "PGDB文件(.mdb)|*.mdb";
ofd.Multiselect
= false;
if
(ofd.ShowDialog() == DialogResult.OK)
{
string
sFileName = ofd.FileName;
pSrcWS
= LSGISHelper.WorkspaceHelper.GetAccessWorkspace(sFileName);
}
}
else
{
FolderBrowserDialog
fdb = new FolderBrowserDialog();
if
(fdb.ShowDialog() == DialogResult.OK)
{
string
sFileName = fdb.SelectedPath;
pSrcWS
= LSGISHelper.WorkspaceHelper.GetFGDBWorkspace(sFileName);
}
}
if
(pSrcWS != null)
{
IEnumDatasetName
pEnumDSName = pSrcWS.get_DatasetNames(esriDatasetType.esriDTFeatureDataset);
IDatasetName
pDName = pEnumDSName.Next();
while
(pDName != null)
{
clsExportClass.ConvertFeatureDataset(pSrcWS,
pDesWS, pDName.Name, pDName.Name);
pDName
= pEnumDSName.Next();
}
LSCommonHelper.MessageBoxHelper.ShowMessageBox("导入成功");
}
}
catch {
}
}
public static void ImportShapefile2SDE(IWorkspace
pDesWS, TaskMonitor mTaskMonitor,
IFeatureDatasetName
pFDN)
{
OpenFileDialog
ofd = new OpenFileDialog();
ofd.Title =
"打开SHP数据";
ofd.Filter =
"SHP数据(*.shp)|*.shp";
ofd.Multiselect
= true;
ofd.RestoreDirectory
= true;
if (ofd.ShowDialog()
== DialogResult.OK)
{
string[]
sFileNames = ofd.FileNames;
string
sFileName = "";
IFeatureClass
pFC = null;
mTaskMonitor.EnterWaitState();
string
sName = "";
IWorkspace
pSrcWS=null;
for
(int i = 0; i < sFileNames.Length; i++)
{
mTaskMonitor.TaskCaption
= "共" + sFileNames.Length + "个文件,先处理第" +
(i + 1) + "个文件";
mTaskMonitor.TaskProgress
= LSCommonHelper.MathHelper.Precent(0, sFileNames.Length, i);
sFileName
= sFileNames[i].ToString();
pSrcWS=LSGISHelper.WorkspaceHelper.GetShapefileWorkspace(sFileName);
sFileName
= System.IO.Path.GetFileNameWithoutExtension(sFileName);
IFeatureWorkspace
pFWS = pSrcWS as IFeatureWorkspace;
pFC
= pFWS.OpenFeatureClass(sFileName);
sName
= (pFC as IDataset).Name;
if
(ConvertFeatureClass2FeatureDataset(pSrcWS, pDesWS, sName,
sName, pFDN))
{
}
}
mTaskMonitor.ExitWaitState();
LSCommonHelper.MessageBoxHelper.ShowMessageBox("导入成功");
}
}
public static bool ConvertFeatureClass2FeatureDataset(IWorkspace
sourceWorkspace,
IWorkspace targetWorkspace, string
nameOfSourceFeatureClass,
string nameOfTargetFeatureClass,
IFeatureDatasetName pName)
{
try
{
//create
source workspace name
IDataset
sourceWorkspaceDataset = (IDataset)sourceWorkspace;
IWorkspaceName
sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName;
//create
source dataset name
IFeatureClassName
sourceFeatureClassName = new FeatureClassNameClass();
IDatasetName
sourceDatasetName = (IDatasetName)sourceFeatureClassName;
sourceDatasetName.WorkspaceName
= sourceWorkspaceName;
sourceDatasetName.Name
= nameOfSourceFeatureClass;
//create
target workspace name
IDataset
targetWorkspaceDataset = (IDataset)targetWorkspace;
IWorkspaceName
targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName;
//create
target dataset name
IFeatureClassName
targetFeatureClassName = new FeatureClassNameClass();
IDatasetName
targetDatasetName = (IDatasetName)targetFeatureClassName;
targetDatasetName.WorkspaceName
= targetWorkspaceName;
targetDatasetName.Name
= nameOfTargetFeatureClass;
//Open
input Featureclass to get field definitions.
ESRI.ArcGIS.esriSystem.IName
sourceName = (ESRI.ArcGIS.esriSystem.IName)sourceFeatureClassName;
IFeatureClass
sourceFeatureClass = (IFeatureClass)sourceName.Open();
//Validate
the field names because you are converting
between different workspace types.
IFieldChecker
fieldChecker = new FieldCheckerClass();
IFields
targetFeatureClassFields;
IFields
sourceFeatureClassFields = sourceFeatureClass.Fields;
IEnumFieldError
enumFieldError;
//
Most importantly set the input and validate
workspaces!
fieldChecker.InputWorkspace
= sourceWorkspace;
fieldChecker.ValidateWorkspace
= targetWorkspace;
fieldChecker.Validate(sourceFeatureClassFields,
out enumFieldError,
out
targetFeatureClassFields);
//
Loop through the output fields to find the
geomerty field
IField
geometryField;
for
(int i = 0; i < targetFeatureClassFields.FieldCount;
i++)
{
if
(targetFeatureClassFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
{
geometryField
= targetFeatureClassFields.get_Field(i);
//
Get the geometry field's geometry defenition
IGeometryDef
geometryDef = geometryField.GeometryDef;
//Give
the geometry definition a spatial index grid
count and grid size
IGeometryDefEdit
targetFCGeoDefEdit = (IGeometryDefEdit)geometryDef;
targetFCGeoDefEdit.GridCount_2
= 1;
targetFCGeoDefEdit.set_GridSize(0,
0);
//Allow
ArcGIS to determine a valid grid size for
the data loaded
targetFCGeoDefEdit.SpatialReference_2
= geometryField.GeometryDef.SpatialReference;
//
we want to convert all of the features
IQueryFilter
queryFilter = new QueryFilterClass();
queryFilter.WhereClause
= "";
//
Load the feature class
IFeatureDataConverter
fctofc = new FeatureDataConverterClass();
IEnumInvalidObject
enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName,
queryFilter,
pName, targetFeatureClassName,
geometryDef,
targetFeatureClassFields, "", 1000, 0);
break;
}
}
return
true;
}
catch (Exception
ex) { return false; }
}
}
相关文章推荐
- C# 抽象类其中创建一个静态方法
- Sending data to USB printer in C#?
- C#判断一个类实现了一个接口
- C#向excel的指令表单sheet指定行列中写入数据
- C#设计模式(6)——原型模式(Prototype Pattern)
- C#設計模型
- C#- 实用的Log4Net日志记录例子
- C# 自带的.net类库 实现得到本机IP以及网关地址
- C#文件和文件文件夹按时间、名称排序-顺序与倒序
- C# inline-asm / 嵌入x86汇编
- 2.1 编写第一个C#程序
- C#属性代码生成失败,程序集未标记为可序列化
- c# 当前不会命中断点 未加载该文档
- C#设计界面时,未将对象引用设置到对象实例问题解决方案
- C# 接口《通俗解释》
- 如何用WcfTestClient.exe测试C#写的WebService服务
- C#.net 简单任务调度平台 使用demo
- 项目里用到的一些基本的AE开发功能:
- [工具-007] C#手机短信发送
- C#面向对象的基础