本文由本人在工作和学习中参阅ArcGIS帮助文档整理而来
1.通过ProgID获得工作空间工厂
下面代码是操作工作空间的基础,是ArcGIS帮助文档中推荐获得工作空间工厂的方式,下面所有关于工作空间操作都会用到它。
/// <summary>
/// 通过ProgID获得工作空间工厂
/// </summary>
/// <param name="strProgID"></param>
/// <returns></returns>
private static IWorkspaceFactory GetWorkspaceFactoryFromProgID(string strProgID)
{
Type factoryType = Type.GetTypeFromProgID(strProgID);
IWorkspaceFactory pWorkspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);
return pWorkspaceFactory;
}
2.工作空间操作
/// <summary>
/// 创建GDB工作空间
/// </summary>
/// <param name="path"></param>
/// <param name="strName"></param>
/// <returns></returns>
private static IWorkspace CreateGDBWorkspace(string path, string strName)
{
IWorkspaceFactory workspaceFactory = GetWorkspaceFactoryFromProgID("esriDataSourcesGDB.FileGDBWorkspaceFactory");
IWorkspaceName workspaceName = workspaceFactory.Create(path, strName + ".gdb", null, 0);
IName pName = (IName)workspaceName;
IWorkspace pWorkspace = (IWorkspace)pName.Open();
return pWorkspace;
}
/// <summary>
/// 打开GDB工作空间
/// </summary>
/// <param name="strGDBPath"></param>
/// <returns></returns>
public static IWorkspace OpenGDBWorkspace(string strGDBPath)
{
IWorkspaceFactory pWorkspaceFactory = GetWorkspaceFactoryFromProgID("esriDataSourcesGDB.FileGDBWorkspaceFactory");
IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(strGDBPath, 0);
return pWorkspace;
}
/// <summary>
/// 打开Oracle ArcSDE 工作空间
/// </summary>
/// <param name="instance">sde:oracle11g:127.0.0.1/orcl</param>
/// <param name="database">sde</param>
/// <param name="user">sde</param>
/// <param name="password">sde</param>
/// <param name="version">DEFAULT</param>
/// <returns></returns>
public static IWorkspace ConnectToOracleSDEWorkSpace(string instance, string database, string user, string password, string version = "DEFAULT")
{
IPropertySet propertyset = new PropertySet();
//propertyset.SetProperty("SERVER", server);
propertyset.SetProperty("INSTANCE", instance);
propertyset.SetProperty("DATABASE", database);
propertyset.SetProperty("USER", user);
propertyset.SetProperty("PASSWORD", password);
propertyset.SetProperty("VERSION", version);
propertyset.SetProperty("DBCLIENT", "Oracle");
propertyset.SetProperty("AUTHENTICATION_MODE", "DBMS");
// Create an SDE workspace factory and open the workspace.
IWorkspaceFactory workspaceFactory = GetWorkspaceFactoryFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
return workspaceFactory.Open(propertyset, 0);
}
/// <summary>
/// 通过*.sde文件打开ArcSDE工作空间
/// </summary>
/// <param name="filePath">文件路径</param>
/// <returns></returns>
public static IWorkspace OpenSDEWorkspaceFromFile(string filePath)
{
IWorkspaceFactory pWorkspaceFactory = GetWorkspaceFactoryFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(filePath,0);
return pWorkspace;
}
/// <summary>
/// 创建MDB工作空间
/// </summary>
/// <param name="strPath"></param>
/// <param name="strName"></param>
/// <returns></returns>
public static IWorkspace CreateAccessWorkspace(string strPath, string strName)
{
IWorkspaceFactory pWorkspaceFactory = GetWorkspaceFactoryFromProgID("esriDataSourcesGDB.AccessWorkspaceFactory");
IWorkspaceName workspaceName = pWorkspaceFactory.Create(strPath, strName + ".mdb", null, 0);
IName name = (IName)workspaceName;
IWorkspace workspace = (IWorkspace)name.Open(); return workspace;
}
/// <summary>
/// 打开MDB工作空间
/// </summary>
/// <param name="strMDBPath"></param>
/// <returns></returns>
public static IWorkspace OpenMDBWorkspace(string strMDBPath)
{
IWorkspaceFactory pWorkspaceFactory = GetWorkspaceFactoryFromProgID("esriDataSourcesGDB.AccessWorkspaceFactory");
IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(strMDBPath, 0);
return pWorkspace;
}
/// <summary>
/// 打开Shp工作空间
/// </summary>
/// <param name="strShpPath"></param>
/// <returns></returns>
public static IWorkspace OpenShpWorkpace(string strShpPath)
{
IWorkspaceFactory pWorkspacefactory = GetWorkspaceFactoryFromProgID("esriDataSourcesFile.ShapefileWorkspaceFactory");
IWorkspace pWorkspace = pWorkspacefactory.OpenFromFile(strShpPath, 0);
return pWorkspace;
}
/// <summary>
/// 打开CAD工作空间
/// </summary>
/// <param name="strCADPath"></param>
/// <returns></returns>
public static IWorkspace OpenCADWorkspace(string strCADPath)
{
string strDir = System.IO.Path.GetDirectoryName(strCADPath);
IWorkspaceFactory pWorkspaceFactory = GetWorkspaceFactoryFromProgID("esriDataSourcesFile.CadWorkspaceFactory");
IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(strDir, 0);
return pWorkspace;
}
/// <summary>
/// 打开CAD绘制集工作空间
/// </summary>
/// <param name="strCADPath"></param>
/// <returns></returns>
public static ICadDrawingWorkspace OpenCadDrawingWorkspace(string strCADPath)
{
string strDir = System.IO.Path.GetDirectoryName(strCADPath);
IWorkspaceFactory pWorkspaceFactory = GetWorkspaceFactoryFromProgID("esriDataSourcesFile.CadWorkspaceFactory");
IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(strDir, 0);
ICadDrawingWorkspace pCadDrawingWorkspace = pWorkspace as ICadDrawingWorkspace;
return pCadDrawingWorkspace;
}
/// <summary>
/// 获得草稿工作空间
/// </summary>
/// <returns></returns>
public static IWorkspace CreateScratchWorkspace()
{
Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.ScratchWorkspaceFactory");
IScratchWorkspaceFactory pScratchWorkspaceFactoryWorkspace = (IScratchWorkspaceFactory)Activator.CreateInstance(factoryType);
IWorkspace pScratchworkspace = pScratchWorkspaceFactoryWorkspace.DefaultScratchWorkspace;
return pScratchworkspace;
}