在ArcGIS二次开发中,不可避免的需要创建或打开工作空间用于存放要素类、栅格数据集和表。例如文件系统工作空间有Shapefile工作空间、文件地理数据库(gdb)、个人地理数据库(mdb);
附上代码,打开工作空间,若不存在则创建:
/// <summary>
/// 打开临时地理数据库若不存在则创建
/// </summary>
/// <param name="filePath">文件路径例如:shp:"F:\\GIS测试数据\\hhh\\111.shp" mdb:"F:\\GIS测试数据\\111.mdb" gdb:"F:\\GIS测试数据\\111.gdb"</param>
/// <returns></returns>
public static IWorkspace GetWorkspace2(string filePath)
{
string sPathFloder = System.IO.Path.GetDirectoryName(filePath);
string sPathName = System.IO.Path.GetFileName(filePath);
string sFileExtension = System.IO.Path.GetExtension(filePath).ToUpper();
if (!Directory.Exists(sPathFloder))
Directory.CreateDirectory(sPathFloder);
// Instantiate a workspace factory if not exists then create a workspace.
IWorkspaceName pWorkspaceName = null;
string sWorkspaceId = "esriDataSourcesGDB.FileGDBWorkspaceFactory";
switch (sFileExtension)
{
case ".GDB":
sWorkspaceId = "esriDataSourcesGDB.FileGDBWorkspaceFactory";
if (!Directory.Exists(filePath))
pWorkspaceName = ((IWorkspaceFactory)Activator.CreateInstance(Type.GetTypeFromProgID(sWorkspaceId))).Create(sPathFloder, sPathName, null, 0);
else
pWorkspaceName = new WorkspaceNameClass()
{
WorkspaceFactoryProgID = sWorkspaceId,
PathName = filePath
};
break;
case ".MDB":
sWorkspaceId = "esriDataSourcesGDB.AccessWorkspaceFactory";
if(!File.Exists(filePath))
pWorkspaceName = ((IWorkspaceFactory)Activator.CreateInstance(Type.GetTypeFromProgID(sWorkspaceId))).Create(sPathFloder, sPathName, null, 0);
else
pWorkspaceName = new WorkspaceNameClass()
{
WorkspaceFactoryProgID = sWorkspaceId,
PathName = filePath
};
break;
case ".SHP":
sWorkspaceId = "esriDataSourcesFile.ShapefileWorkspaceFactory";
pWorkspaceName = new WorkspaceNameClass()
{
WorkspaceFactoryProgID = sWorkspaceId,
PathName = sPathFloder
};
break;
}
// Cast the workspace name object to the IName interface and open the workspace.
IName name = (IName)pWorkspaceName;
IWorkspace workspace = (IWorkspace)name.Open();
return workspace;
}