- /// <summary>
- /// //设置投影的XYDoMain的功能 通过this.DefaultWorkSpace属性
- /// 这需要先执行OpenSDEConnection()方法
- /// </summary>
- /// <param name="pMinX"></param>
- /// <param name="pMinY"></param>
- /// <param name="pMaxX"></param>
- /// <param name="pMaxY"></param>
- /// <returns></returns>
- public bool SetSpatialReferenceXYDoMainToDB(double pMinX, double pMinY, double pMaxX, double pMaxY)
- {
- bool rbc = false;
- if (this.DefaultWorkSpace == null)
- {
- rbc = false;
- return rbc;
- }
- List<IDataset> AllGisDataSetList = new List<IDataset>();
- //获取本空间连接通道中的所有要素类和要素集对象
- IWorkspace ws = this.DefaultWorkSpace;
- IEnumDataset topEnumDataset = this.getEnumDataset(ws);
- if (topEnumDataset != null)
- {
- topEnumDataset.Reset();
- IDataset ds = topEnumDataset.Next();
- while (ds != null)
- {
- switch (ds.Type)
- {
- case esriDatasetType.esriDTFeatureDataset:
- //--
- AllGisDataSetList.Add(ds);
- //--
- IEnumDataset subEnumDs = this.getEnumSubDataset(ds);
- IDataset subds = subEnumDs.Next();
- while (subds != null)
- {
- switch (subds.Type)
- {
- case esriDatasetType.esriDTFeatureClass:
- rbc=this.SetDataSetByXYDoMain(subds, pMinX, pMinY, pMaxX, pMaxY);
- break;
- }
- subds = subEnumDs.Next();
- }
- rbc = this.SetDataSetByXYDoMain(ds, pMinX, pMinY, pMaxX, pMaxY);
- break;
- case esriDatasetType.esriDTFeatureClass:
- //--
- rbc = this.SetDataSetByXYDoMain(ds, pMinX, pMinY, pMaxX, pMaxY);
- //--
- break;
- }
- ds = topEnumDataset.Next();
- }
- }
- return rbc;
- }
- private bool SetDataSetByXYDoMain(IDataset ds, double pMinX, double pMinY, double pMaxX, double pMaxY)
- {
- bool rbc = false;
- ISpatialReference sr = null;
- IGeoDataset geods = null;
- geods = ds as IGeoDataset;
- sr = geods.SpatialReference;
- //---
- if (geods is IFeatureClassManage && geods is ISchemaLock)
- {
- ISchemaLock schemaLock = (ISchemaLock)geods;
- try
- {
- schemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);
- IFeatureClassManage featureClassManage = (IFeatureClassManage)geods;
- featureClassManage.UpdateExtent();
- schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
- AppLogErrWrite.WriteErrLog("updateExtent_Update完成:" + (geods as IDataset).Name);
- }
- catch (Exception k)
- { //error occured
- schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
- AppLogErrWrite.WriteErrLog("updateExtent_" + k.Message + " " + (geods as IDataset).Name);
- }
- }
- //---modify xydomain
- //设置范围值
- if (sr is ISpatialReference2GEN)
- {
- (sr as ISpatialReference2GEN).SetDomain(pMinX, pMaxX, pMinY, pMaxY);
- }
- else
- {
- sr.SetDomain(pMinX, pMaxX, pMinY, pMaxY);
- }
- //---
- if ((geods as IDataset).Type == esriDatasetType.esriDTFeatureDataset
- && geods is IGeoDatasetSchemaEdit
- && geods is ISchemaLock)
- {
- //设置目标投影
- IGeoDatasetSchemaEdit schemaEdit = geods as IGeoDatasetSchemaEdit;
- if (schemaEdit.CanAlterSpatialReference == true)
- {
- ISchemaLock schemaLock = (ISchemaLock)geods;
- try
- {
- schemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);
- schemaEdit.AlterSpatialReference(sr);
- schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
- rbc = true;
- AppLogErrWrite.WriteErrLog("修改投影XYDoMain完成:" + (geods as IDataset).Name);
- }
- catch (Exception ex)
- {
- schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
- AppLogErrWrite.WriteErrLog("修改投影XYDoMain出错:" + (geods as IDataset).Name + "/r/b" + ex.ToString());
- }
- }
- else
- {
- AppLogErrWrite.WriteErrLog((geods as IDataset).Name + "图层没权限修改空间投影!");
- }
- }
- return rbc;
- }
- private IEnumDataset getEnumDataset(IWorkspace ws)
- {
- return ws.get_Datasets(esriDatasetType.esriDTAny);
- }
- private IEnumDataset getEnumSubDataset(IDataset ods)
- {
- IEnumDataset oEnumSubds = null;
- if (ods.Type == esriDatasetType.esriDTFeatureDataset)
- {
- oEnumSubds = ods.Subsets;
- }
- return oEnumSubds;
- }
- //-------------
- public bool SetSpatialReferenceToDB(ISpatialReference sr)
- {
- bool rbc = false;
- if (this.DefaultWorkSpace == null)
- {
- rbc = false;
- return rbc;
- }
- List<IDataset> AllGisDataSetList = new List<IDataset>();
- //获取本空间连接通道中的所有要素类和要素集对象
- IWorkspace ws = this.DefaultWorkSpace;
- IEnumDataset topEnumDataset = this.getEnumDataset(ws);
- if (topEnumDataset != null)
- {
- topEnumDataset.Reset();
- IDataset ds = topEnumDataset.Next();
- while (ds != null)
- {
- switch (ds.Type)
- {
- case esriDatasetType.esriDTFeatureDataset:
- //--
- AllGisDataSetList.Add(ds);
- //--
- IEnumDataset subEnumDs = this.getEnumSubDataset(ds);
- IDataset subds = subEnumDs.Next();
- while (subds != null)
- {
- switch (subds.Type)
- {
- case esriDatasetType.esriDTFeatureClass:
- rbc = this.SetSpatialReference(subds,sr);
- break;
- }
- System.Runtime.InteropServices.Marshal.ReleaseComObject(subds);
- subds = subEnumDs.Next();
- }
- rbc = this.SetSpatialReference(ds, sr);
- break;
- case esriDatasetType.esriDTFeatureClass:
- //--
- rbc = this.SetSpatialReference(ds, sr);
- //--
- break;
- }
- System.Runtime.InteropServices.Marshal.ReleaseComObject(ds);
- ds = topEnumDataset.Next();
- }
- System.Runtime.InteropServices.Marshal.ReleaseComObject(topEnumDataset);
- }
- return rbc;
- }
- private bool SetSpatialReference(IDataset ds, ISpatialReference sr)
- {
- bool rbc = false;
- IGeoDataset geods = null;
- geods = ds as IGeoDataset;
- if ((geods as IDataset).Type == esriDatasetType.esriDTFeatureDataset
- && geods is IGeoDatasetSchemaEdit
- && geods is ISchemaLock)
- {
- //设置目标投影
- IGeoDatasetSchemaEdit schemaEdit = geods as IGeoDatasetSchemaEdit;
- if (schemaEdit.CanAlterSpatialReference == true)
- {
- ISchemaLock schemaLock = (ISchemaLock)geods;
- try
- {
- schemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);
- schemaEdit.AlterSpatialReference(sr);
- schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
- rbc = true;
- AppLogErrWrite.WriteErrLog("修改投影完成:" + (geods as IDataset).Name);
- }
- catch (Exception ex)
- {
- schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
- AppLogErrWrite.WriteErrLog("修改投影出错:" + (geods as IDataset).Name + "/r/b" + ex.ToString());
- }
- }
- else
- {
- AppLogErrWrite.WriteErrLog((geods as IDataset).Name + "图层没权限修改空间投影!");
- }
- }
- return rbc;
- }
设置投影和XYDoMain的功能
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
投影和筛选
法:类名
webwork 语言 graph object 脚本