ArcGIS Engine 更改MXD地图数据路径

  • 格式:docx
  • 大小:14.00 KB
  • 文档页数:3

private void button8_Click(object sender, EventArgs e)
{
IWorkspace pWs = GetWorkspace(@"C:\csdn\ChinaGPS.gdb");

IMapDocument pDoc= new MapDocumentClass();
pDoc.Open(axMapControl1.DocumentFilename);
ChangePath(pDoc, pWs);
}
//替换路径
private void ChangePath(IMapDocument pMapDoc, IWorkspace pWs)
{
IWorkspaceName pWsName = GetWorkspaceName(pWs);
IMap pMap = pMapDoc.ActiveView.FocusMap;
ILayer pLayer = null;
IDataLayer pDataLayer = null;
IDatasetName pDataName = null;
for (int i = 0; i < pMap.LayerCount; i++)
{
pLayer = pMap.get_Layer(i);
if (pLayer.Valid == false)
{
if (pLayer is IDataLayer)
{
pDataLayer = pLayer as IDataLayer;
try
{
pDataName = pDataLayer.DataSourceName as IDatasetName;
//获取DatasetName,必须是要替换的工作空间下的
IDatasetName pDsName = GetDatasetName(pWs, pDataName.Name);
pDataName = pDataLayer.DataSourceName as IDatasetName;
pDataName.WorkspaceName = pWsName;

pDataLayer.Connect(pDsName as IName);
pDataName = pDataLayer.DataSourceName as IDatasetName;

}
catch { }
}
}

}
pMapDoc.Save(true, true);
}
private IDatasetName GetDatasetName(IWorkspace pWs, string pFtName)
{
try
{
IEnumDatasetName pDsName = pWs.get_DatasetNames(esriDatasetType.esriDTAny);

IDatasetName pDsSetName = pDsName.Next();
while (pDsSetName != null)
{
//遍历FeatureDataset
if (pDsSetName.Type == esriDatasetType.esriDTFeatureDataset)
{
IEnumDatasetName pDsFtName = pDsSetName.SubsetNames;

IDatasetName pDsSetName1 = pDsFtName.Next();
while (pDsSetName1 != null)
{
if (pDsSetName1.Name == pFtName)
return pDsSetName1;
pDsSetName1 = pDsFtName.Next();
}

}
else if (pDsSetName.Name == pFtName)
return pDsSetName;

pDsSetName = pDsName.Next();
}

return pDsSetName;
}
catch (Exception ex) { return null; }
}
private IWorkspaceName GetWorkspaceName(IWorkspace pWs)
{
try
{

IDataset pDs = pWs as IDataset;
return pWsName;
}
catch (Exception ex) { return null; }
}

public IWorkspace GetWorkspace( String _pDatabase)
{
ESRI.ArcGIS.Geodatabase.IWorkspaceFactory pWsFactory = null;

IWorkspace pWkspace = null;

if(System.IO.Path.GetExtension(_pDatabase).Equals(".mdb"))
{
pWsFactory = new AccessWorkspaceFactoryClass();
}
else if(System.IO.Path.GetExtension(_pDatabase).Equals(".gdb"))
{

pWsFactory =new ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactoryClass();

}
else
{

pWsFactory = new ShapefileWorkspaceFactory();
}
try
{

pWkspace = pWsFactory.OpenFromFile(_pDatabase, 0);
}
catch (Exception EX)
{
//MessageBox.Show(EX.ToString());

}
return pWkspace;
}