c#本地oracle数据库服务器时间格式,arcgis 工程文件mxd格式c#修改数据源适应sde oracle服务器ip地址变更...

1、arcgis工程文件mxd格式保存图层信息

2、当图层保存在oracle数据库时,遇到数据库ip地址变更时

3、原有工程文件无法打开图层

4、需要手动切换数据源

5、如果工程文件很多,手动切换数据源费时间,麻烦

6、用c#写程序实现1到5所存在的问题

private void SetDataSource(string sMxdPath, string sTargetPath)

{

获取MapDocment

IMapDocument pMapDocument = new MapDocumentClass();

pMapDocument.Open(sMxdPath, "");

创建一个MapControl

IMapControl2 pMapControl = new MapControlClass();

string sFileName = sMxdPath;

pMapControl.LoadMxFile(sFileName, null, null);

创建一个工作空间

IWorkspaceFactory pWorkFactory = new AccessWorkspaceFactoryClass();

IWorkspace pWorkspace = pWorkFactory.OpenFromFile(sTargetPath, 0);

获取工作空间中的全部Dataset

IEnumDataset pEnumDataSet = pWorkspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);

IDataset pDataSet = pEnumDataSet.Next();

ISpatialReference pRef = (pDataSet as IGeoDataset).SpatialReference;

string sDistrictCode = string.Empty;

string sScale = string.Empty;

if (pDataSet != null)

{

UID uid = new UIDClass();

uid.Value = "{" + typeof(IFeatureLayer).GUID.ToString() + "}";

IEnumLayer pEnumLayer = pMapControl.Map.get_Layers(uid, true);

IFeatureLayer pFeaLyr = pEnumLayer.Next() as IFeatureLayer;

IFeatureWorkspace pFeaClsWks = pWorkspace as IFeatureWorkspace;

while (pFeaLyr != null)

{

string sDsName = ((pFeaLyr as IDataLayer).DataSourceName as IDatasetName).Name;

if ((pWorkspace as IWorkspace2).get_NameExists(esriDatasetType.esriDTFeatureClass, sDsName))

{

pFeaLyr.FeatureClass = pFeaClsWks.OpenFeatureClass(sDsName);

pFeaLyr.Name = pFeaLyr.Name;

}

pFeaLyr = pEnumLayer.Next() as IFeatureLayer;

}

//释放资源,防止出现Ox80040228,出现资源锁定错误

ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(pWorkspace);

ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(pFeaClsWks);

pMapControl.Map.SpatialReference = pRef;

IMxdContents pMxdC;

pMxdC = pMapControl.Map as IMxdContents;

pMapDocument.Open((pMapControl as IMapControl3).DocumentFilename, "");

pMapDocument.ReplaceContents(pMxdC);

pMapDocument.Save(true, true);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值