设置投影和XYDoMain的功能

  1. /// <summary>
  2.         /// //设置投影的XYDoMain的功能 通过this.DefaultWorkSpace属性 
  3.         /// 这需要先执行OpenSDEConnection()方法
  4.         /// </summary>
  5.         /// <param name="pMinX"></param>
  6.         /// <param name="pMinY"></param>
  7.         /// <param name="pMaxX"></param>
  8.         /// <param name="pMaxY"></param>
  9.         /// <returns></returns>
  10.         public bool SetSpatialReferenceXYDoMainToDB(double pMinX, double pMinY, double pMaxX, double pMaxY)
  11.         {
  12.             bool rbc = false;
  13.             if (this.DefaultWorkSpace == null)
  14.             {
  15.                 rbc = false;
  16.                 return rbc;
  17.             }
  18.             List<IDataset> AllGisDataSetList = new List<IDataset>();
  19.             //获取本空间连接通道中的所有要素类和要素集对象
  20.             IWorkspace ws = this.DefaultWorkSpace;
  21.             IEnumDataset topEnumDataset = this.getEnumDataset(ws);
  22.             if (topEnumDataset != null)
  23.             {
  24.                 topEnumDataset.Reset();
  25.                 IDataset ds = topEnumDataset.Next();
  26.                 while (ds != null)
  27.                 {
  28.                     switch (ds.Type)
  29.                     {
  30.                         case esriDatasetType.esriDTFeatureDataset:
  31.                             //--
  32.                             AllGisDataSetList.Add(ds);
  33.                             //--
  34.                             IEnumDataset subEnumDs = this.getEnumSubDataset(ds);
  35.                             IDataset subds = subEnumDs.Next();
  36.                             while (subds != null)
  37.                             {
  38.                                 switch (subds.Type)
  39.                                 {
  40.                                     case esriDatasetType.esriDTFeatureClass:
  41.                                         rbc=this.SetDataSetByXYDoMain(subds, pMinX, pMinY, pMaxX, pMaxY);
  42.                                         break;
  43.                                 }
  44.                                 subds = subEnumDs.Next();
  45.                             }
  46.                             rbc = this.SetDataSetByXYDoMain(ds, pMinX, pMinY, pMaxX, pMaxY);
  47.                             break;
  48.                         case esriDatasetType.esriDTFeatureClass:
  49.                             //--
  50.                             rbc = this.SetDataSetByXYDoMain(ds, pMinX, pMinY, pMaxX, pMaxY);
  51.                             //--
  52.                             break;
  53.                     }
  54.                     ds = topEnumDataset.Next();
  55.                 }
  56.             }
  57.             return rbc;
  58.         }
  59.         private bool SetDataSetByXYDoMain(IDataset ds, double pMinX, double pMinY, double pMaxX, double pMaxY)
  60.         {
  61.             bool rbc = false;
  62.             ISpatialReference sr = null;
  63.             IGeoDataset geods = null;
  64.             geods = ds as IGeoDataset;
  65.             sr = geods.SpatialReference;
  66.             //---
  67.             if (geods is IFeatureClassManage && geods is ISchemaLock)
  68.             {
  69.                 ISchemaLock schemaLock = (ISchemaLock)geods;
  70.                 try
  71.                 {
  72.                     schemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);
  73.                     IFeatureClassManage featureClassManage = (IFeatureClassManage)geods;
  74.                     featureClassManage.UpdateExtent();
  75.                     
  76.                     schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
  77.                     AppLogErrWrite.WriteErrLog("updateExtent_Update完成:" + (geods as IDataset).Name);
  78.                     
  79.                 }
  80.                 catch (Exception k)
  81.                 {   //error occured            
  82.                     schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
  83.                     AppLogErrWrite.WriteErrLog("updateExtent_" + k.Message + " " + (geods as IDataset).Name);
  84.                 }
  85.             }
  86.             //---modify xydomain
  87.             //设置范围值
  88.             if (sr is ISpatialReference2GEN)
  89.             {
  90.                 (sr as ISpatialReference2GEN).SetDomain(pMinX, pMaxX, pMinY, pMaxY);
  91.             }
  92.             else
  93.             {
  94.                 sr.SetDomain(pMinX, pMaxX, pMinY, pMaxY);
  95.             }
  96.             //---
  97.             if ((geods as IDataset).Type == esriDatasetType.esriDTFeatureDataset
  98.                         && geods is IGeoDatasetSchemaEdit
  99.                         && geods is ISchemaLock)
  100.             {
  101.                 //设置目标投影
  102.                 IGeoDatasetSchemaEdit schemaEdit = geods as IGeoDatasetSchemaEdit;
  103.                 if (schemaEdit.CanAlterSpatialReference == true)
  104.                 {
  105.                     ISchemaLock schemaLock = (ISchemaLock)geods;
  106.                     try
  107.                     {
  108.                         schemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);
  109.                         schemaEdit.AlterSpatialReference(sr);
  110.                         schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
  111.                         rbc = true;
  112.                         AppLogErrWrite.WriteErrLog("修改投影XYDoMain完成:" + (geods as IDataset).Name);
  113.                         
  114.                     }
  115.                     catch (Exception ex)
  116.                     {
  117.                         schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
  118.                         AppLogErrWrite.WriteErrLog("修改投影XYDoMain出错:" + (geods as IDataset).Name + "/r/b" + ex.ToString());
  119.                     }
  120.                 }
  121.                 else
  122.                 {
  123.                     AppLogErrWrite.WriteErrLog((geods as IDataset).Name + "图层没权限修改空间投影!");
  124.                 }
  125.             }
  126.             return rbc;
  127.         }
  128.         private IEnumDataset getEnumDataset(IWorkspace ws)
  129.         {
  130.             return ws.get_Datasets(esriDatasetType.esriDTAny);
  131.         }
  132.         private IEnumDataset getEnumSubDataset(IDataset ods)
  133.         {
  134.             IEnumDataset oEnumSubds = null;
  135.             if (ods.Type == esriDatasetType.esriDTFeatureDataset)
  136.             {
  137.                 oEnumSubds = ods.Subsets;
  138.             }
  139.             return oEnumSubds;
  140.         }
  141.         //-------------
  142.         public bool SetSpatialReferenceToDB(ISpatialReference sr)
  143.         {
  144.             bool rbc = false;
  145.             if (this.DefaultWorkSpace == null)
  146.             {
  147.                 rbc = false;
  148.                 return rbc;
  149.             }
  150.             List<IDataset> AllGisDataSetList = new List<IDataset>();
  151.             //获取本空间连接通道中的所有要素类和要素集对象
  152.             IWorkspace ws = this.DefaultWorkSpace;
  153.             IEnumDataset topEnumDataset = this.getEnumDataset(ws);
  154.             if (topEnumDataset != null)
  155.             {
  156.                 topEnumDataset.Reset();
  157.                 IDataset ds = topEnumDataset.Next();
  158.                 while (ds != null)
  159.                 {
  160.                     switch (ds.Type)
  161.                     {
  162.                         case esriDatasetType.esriDTFeatureDataset:
  163.                             //--
  164.                             AllGisDataSetList.Add(ds);
  165.                             //--
  166.                             IEnumDataset subEnumDs = this.getEnumSubDataset(ds);
  167.                             IDataset subds = subEnumDs.Next();
  168.                             while (subds != null)
  169.                             {
  170.                                 switch (subds.Type)
  171.                                 {
  172.                                     case esriDatasetType.esriDTFeatureClass:
  173.                                         rbc = this.SetSpatialReference(subds,sr);
  174.                                         break;
  175.                                 }
  176.                                 System.Runtime.InteropServices.Marshal.ReleaseComObject(subds);
  177.                                 subds = subEnumDs.Next();
  178.                             }
  179.                             rbc = this.SetSpatialReference(ds, sr);
  180.                             break;
  181.                         case esriDatasetType.esriDTFeatureClass:
  182.                             //--
  183.                             rbc = this.SetSpatialReference(ds, sr);
  184.                             //--
  185.                             break;
  186.                     }
  187.                     System.Runtime.InteropServices.Marshal.ReleaseComObject(ds);
  188.                     ds = topEnumDataset.Next();
  189.                 }
  190.                 System.Runtime.InteropServices.Marshal.ReleaseComObject(topEnumDataset);
  191.             }
  192.             return rbc;
  193.         }
  194.         private bool SetSpatialReference(IDataset ds, ISpatialReference sr)
  195.         {
  196.             bool rbc = false;
  197.             IGeoDataset geods = null;
  198.             geods = ds as IGeoDataset;
  199.             if ((geods as IDataset).Type == esriDatasetType.esriDTFeatureDataset
  200.                         && geods is IGeoDatasetSchemaEdit
  201.                         && geods is ISchemaLock)
  202.             {
  203.                 //设置目标投影
  204.                 IGeoDatasetSchemaEdit schemaEdit = geods as IGeoDatasetSchemaEdit;
  205.                 if (schemaEdit.CanAlterSpatialReference == true)
  206.                 {
  207.                     ISchemaLock schemaLock = (ISchemaLock)geods;
  208.                     try
  209.                     {
  210.                         schemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);
  211.                         schemaEdit.AlterSpatialReference(sr);
  212.                         schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
  213.                         rbc = true;
  214.                         AppLogErrWrite.WriteErrLog("修改投影完成:" + (geods as IDataset).Name);
  215.                     }
  216.                     catch (Exception ex)
  217.                     {
  218.                         schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
  219.                         AppLogErrWrite.WriteErrLog("修改投影出错:" + (geods as IDataset).Name + "/r/b" + ex.ToString());
  220.                     }
  221.                 }
  222.                 else
  223.                 {
  224.                     AppLogErrWrite.WriteErrLog((geods as IDataset).Name + "图层没权限修改空间投影!");
  225.                 }
  226.             }
  227.             return rbc;
  228.         }
posted @ 2008-07-01 16:53  sqlite例子  阅读(381)  评论(0)    收藏  举报