FeatureLayer到本地shapefile文件
将程序中的FeatureLayer转到本地shapefile文件,方便数据输出使用。
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
//sFileName:shapefile保存的路径及名称
//pFC:要输出FeatureLayer的FeatureClass属性
public static void OperateConvertToShape(string sFileName, IFeatureClass pFC)
{
try
{
string str = sFileName;
string str2 = str.Substring(str.LastIndexOf(@"\") + 1);
string str3 = str.Substring(0, (str.Length - str2.Length) - 1);
IPropertySet set = new PropertySetClass();
set.SetProperty("DATABASE", str3);
IWorkspaceName pWorkSpaceName = new WorkspaceNameClass();
pWorkSpaceName.ConnectionProperties = set;
pWorkSpaceName.WorkspaceFactoryProgID = "esriDataSourcesFile.shapefileWorkspaceFactory.1";
IFeatureClassName pFeatureClassName = new FeatureClassNameClass();
IDatasetName pDatasetName = pFeatureClassName as IDatasetName;
pDatasetName.Name = str2;
pDatasetName.WorkspaceName = pWorkSpaceName;
IDataset dataset = pFC as IDataset;
IWorkspaceName sWorkSpaceName = new WorkspaceNameClass();
sWorkSpaceName.ConnectionProperties = dataset.Workspace.ConnectionProperties;
IWorkspaceFactory pFWorkFactory =dataset.Workspace.WorkspaceFactory;
if (pFWorkFactory .GetType().Name.ToUpper().IndexOf("ACCESS")>-1)
{
sWorkSpaceName.WorkspaceFactoryProgID = "esriDataSourcesGDB.AccessWorkspaceFactory.1";
}
else if (pFWorkFactory.GetType().Name.ToUpper().IndexOf("FILEGDB") > -1)
{
sWorkSpaceName.WorkspaceFactoryProgID = "esriDataSourcesGDB.FileGDBWorkspaceFactory.1";
}
else if (pFWorkFactory.GetType().Name.ToUpper().IndexOf("SDE") > -1)
{
sWorkSpaceName.WorkspaceFactoryProgID = "esriDataSourcesGDB.SdeWorkspaceFactory.1";
}
IFeatureClassName sFeatureClassName = new FeatureClassNameClass();
IDatasetName sDatasetName = sFeatureClassName as IDatasetName;
sDatasetName.Name = dataset.Name;
sDatasetName.WorkspaceName = sWorkSpaceName;
new FeatureDataConverterClass().ConvertFeatureClass(sFeatureClassName, null, null, pFeatureClassName, null, null, "", 0x3e8, 0);
MessageBox.Show("shape文件输出完毕!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception exception)
{
MessageBox.Show(exception.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}