Ejemplo n.º 1
0
        /// <summary>
        /// 实现对要素类的坐标的仿射变换
        /// </summary>
        /// <param name="inFC">要素类</param>
        /// <param name="inTransformation">转换类</param>
        private void coordTransfermation(IFeatureClass inFC, ITransformation inTransformation)
        {
            IFeatureCursor pFCursor = inFC.Update(null, false);
            IFeature       pFeature = pFCursor.NextFeature();

            while (pFeature != null)
            {
                IGeometry    shpTransformed = pFeature.ShapeCopy;
                ITransform2D pTransform2D   = shpTransformed as ITransform2D;
                pTransform2D.Transform(esriTransformDirection.esriTransformForward, inTransformation);
                pFeature.Shape = shpTransformed;
                //int id = inFC.FindField("LAYER_OID");
                //if((inFC as IDataset).Name=="宗地_Project54_1")
                //pFeature.set_Value(id,"1");

                pFCursor.UpdateFeature(pFeature);
                //cursor后移
                pFeature = pFCursor.NextFeature();
            }
            Marshal.ReleaseComObject(pFCursor);//释放cursor
            ISpatialReference     unKnownSR = new UnknownCoordinateSystemClass();
            IGeoDatasetSchemaEdit pGDSE     = inFC as IGeoDatasetSchemaEdit;

            if (pGDSE.CanAlterSpatialReference)
            {
                pGDSE.AlterSpatialReference(unKnownSR);//更新要素类的投影
            }
            IFeatureClassManage pFCM = inFC as IFeatureClassManage;

            pFCM.UpdateExtent();//更新要素类的最值范围
            IGeoDataset pGD = inFC as IGeoDataset;
            IEnvelope   ppp = pGD.Extent;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 修改要素类坐标系
        /// </summary>
        /// <param name="featureClass">要素类</param>
        /// <param name="spatialReference">新坐标系</param>
        public static void AlterSpatialRef(this IFeatureClass featureClass, ISpatialReference spatialReference)
        {
            IGeoDataset           geoDataset           = (IGeoDataset)featureClass;
            IGeoDatasetSchemaEdit geoDatasetSchemaEdit = (IGeoDatasetSchemaEdit)geoDataset;

            if (geoDatasetSchemaEdit.CanAlterSpatialReference)
            {
                geoDatasetSchemaEdit.AlterSpatialReference(spatialReference);
            }
        }
        public static void AlterSpatialReference(IFeatureClass pFeatureClass, ISpatialReference pSpatialReference)
        {
            IGeoDataset           pGeoDataset           = pFeatureClass as IGeoDataset;
            IGeoDatasetSchemaEdit pGeoDatasetSchemaEdit = pGeoDataset as IGeoDatasetSchemaEdit;

            if (pGeoDatasetSchemaEdit.CanAlterSpatialReference == true)
            {
                pGeoDatasetSchemaEdit.AlterSpatialReference(pSpatialReference);
            }
        }
Ejemplo n.º 4
0
        private bool method_2()
        {
            COMException exception;
            Exception    exception2;

            this.featureDatasetGeneralPage_0.Apply();
            IDataset featureDataset = NewObjectClassHelper.m_pObjectClassHelper.FeatureDataset;

            try
            {
                if (featureDataset.Name != NewObjectClassHelper.m_pObjectClassHelper.Name)
                {
                    featureDataset.Rename(NewObjectClassHelper.m_pObjectClassHelper.Name);
                }
            }
            catch (COMException exception1)
            {
                exception = exception1;
                MessageBox.Show(exception.Message);
                Logger.Current.Error("", exception, "");
                NewObjectClassHelper.m_pObjectClassHelper.Name = featureDataset.Name;
            }
            catch (Exception exception3)
            {
                exception2 = exception3;
                Logger.Current.Error("", exception2, "");
            }
            try
            {
                if (this.coordinateControl_0.IsDirty)
                {
                    IGeoDatasetSchemaEdit edit = featureDataset as IGeoDatasetSchemaEdit;
                    if (edit.CanAlterSpatialReference)
                    {
                        edit.AlterSpatialReference(this.coordinateControl_0.SpatialRefrence);
                    }
                    this.coordinateControl_0.Apply();
                }
            }
            catch (COMException exception4)
            {
                exception = exception4;
                MessageBox.Show(exception.Message);
                Logger.Current.Error("", exception, "");
            }
            catch (Exception exception5)
            {
                exception2 = exception5;
                Logger.Current.Error("", exception2, "");
            }
            return(true);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 创建新的shapefile文件
        /// </summary>
        /// <param name="path">建立空白shp的路径</param>
        /// <param name="name">建立shp的文件名</param>
        /// <param name="fields">待建立shp的字段</param>
        /// <param name="spatialReference">待建立shp的空间参考</param>
        /// <returns>返回建立的FeatureClass</returns>
        public IFeatureClass CreateVoidShp(string path, string name, IFields fields, ISpatialReference spatialReference)
        {
            IFeatureClass     pFeatureClass;
            IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
            IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(path, 0) as IFeatureWorkspace;

            //注意:用CreateFeatureClass()方法时应该特别注意fields参数是否含有几何信息,如空间参考,几何类型等
            pFeatureClass = pFeatureWorkspace.CreateFeatureClass(name, fields, null, null, esriFeatureType.esriFTSimple, "shape", "");
            IGeoDataset           pGeoDataset           = pFeatureClass as IGeoDataset;
            IGeoDatasetSchemaEdit pGeoDatasetSchemaEdit = pGeoDataset as IGeoDatasetSchemaEdit;

            pGeoDatasetSchemaEdit.AlterSpatialReference(spatialReference);
            pFeatureClass = pFeatureWorkspace.OpenFeatureClass(name);
            return(pFeatureClass);
        }
        private bool Work(string filePath)
        {
            IFeatureClass featureClass = ArcGISFileHelper.GetShpFeatureClass(filePath);

            if (featureClass == null)
            {
                return(false);
            }
            IGeoDataset           geoDataset           = featureClass as IGeoDataset;
            IGeoDatasetSchemaEdit geoDatasetSchemaEdit = geoDataset as IGeoDatasetSchemaEdit;

            if (geoDatasetSchemaEdit.CanAlterSpatialReference == true)
            {
                geoDatasetSchemaEdit.AlterSpatialReference(SpatialReference);
                return(true);
            }
            else
            {
                return(false);
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 将GDB的数据入到SDE中 xisheng 20110919
        /// </summary>
        private void ImportGDBToSDE(string file, string outfilename, out int featurecount)
        {
            m_success = false;//初始化
            try
            {
                string filepath = file.Substring(0, file.LastIndexOf("---"));
                string filename = file.Substring(file.LastIndexOf("-") + 1);

                //打开mdb文件所在的工作空间
                ESRI.ArcGIS.Geodatabase.IWorkspaceFactory wf = new FileGDBWorkspaceFactory();
                IFeatureWorkspace pFeatureWorkspaceGDB       = wf.OpenFromFile(@filepath, 0) as IFeatureWorkspace;
                IWorkspace        pWorkspaceGDB = pFeatureWorkspaceGDB as IWorkspace;
                // 创建源工作空间名称
                IDataset       sourceWorkspaceDataset = (IDataset)pFeatureWorkspaceGDB;
                IWorkspaceName sourceWorkspaceName    = (IWorkspaceName)sourceWorkspaceDataset.FullName;

                //创建源数据集名称
                //IFeatureClassName sourceFeatureClassName = serverContext.CreateObject("esriGeoDatabase.FeatureClassName") as IFeatureClassName;
                IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass();
                IDatasetName      sourceDatasetName      = (IDatasetName)sourceFeatureClassName;
                sourceDatasetName.WorkspaceName = sourceWorkspaceName;
                sourceDatasetName.Name          = filename;

                //打开存在的工作空间,作为导入的空间;
                IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pTargetworkspace;

                //创建目标工作空间名称
                IDataset        targetWorkspaceDataset = (IDataset)pTargetworkspace;
                IWorkspaceName  targetWorkspaceName    = (IWorkspaceName)targetWorkspaceDataset.FullName;
                IWorkspace2     pWorkspace2            = pTargetworkspace as IWorkspace2;
                IFeatureDataset tmpfeaturedataset;
                //创建目标数据集名称
                // IFeatureClassName targetFeatureClassName = serverContext.CreateObject("esriGeoDatabase.FeatureClassName") as IFeatureClassName;
                //判断要素是否存在,若存在将删除源文件
                if (pWorkspace2.get_NameExists(esriDatasetType.esriDTFeatureDataset, textBox.Text))
                {
                    tmpfeaturedataset = pFeatureWorkspace.OpenFeatureDataset(textBox.Text);
                    if (text_prj.Text != "")
                    {
                        IGeoDatasetSchemaEdit pgeodataset = tmpfeaturedataset as IGeoDatasetSchemaEdit;
                        if (pgeodataset.CanAlterSpatialReference)
                        {
                            pgeodataset.AlterSpatialReference(GetSpatialReferenceformFile(text_prj.Text));
                        }
                    }
                }
                else
                {
                    tmpfeaturedataset = CreateFeatureDataset(pTargetworkspace as IFeatureWorkspace, textBox.Text, text_prj.Text);
                }
                if (pWorkspace2.get_NameExists(esriDatasetType.esriDTFeatureClass, outfilename))
                {
                    IFeatureClass tmpfeatureclass;
                    tmpfeatureclass = pFeatureWorkspace.OpenFeatureClass(outfilename);
                    IDataset tempset = tmpfeatureclass as IDataset;
                    tempset.Delete();
                }

                IFeatureClassName targetFeatureClassName = new FeatureClassNameClass();
                IDatasetName      targetDatasetName      = (IDatasetName)targetFeatureClassName;
                targetDatasetName.WorkspaceName = targetWorkspaceName;
                targetDatasetName.Name          = outfilename;
                //目标数据集
                IFeatureDatasetName outfeaturedatasetname = tmpfeaturedataset.FullName as IFeatureDatasetName;


                //打开输入的要素类以得到字段定义
                ESRI.ArcGIS.esriSystem.IName sourceName = (ESRI.ArcGIS.esriSystem.IName)sourceFeatureClassName;
                IFeatureClass sourceFeatureClass        = (IFeatureClass)sourceName.Open();//打开源要素类

                //验证字段名称,因为你正在不同类型的工作空间之间进行数据转换
                //IFieldChecker fieldChecker = serverContext.CreateObject("esriGeoDatabase.FieldChecker") as IFieldChecker;
                IFieldChecker   fieldChecker             = new FieldCheckerClass();
                IFields         sourceFeatureClassFields = sourceFeatureClass.Fields;
                IFields         targetFeatureClassFields;
                IEnumFieldError enumFieldError;

                //最重要的设置输入和验证工作空间
                fieldChecker.InputWorkspace    = pWorkspaceGDB;
                fieldChecker.ValidateWorkspace = pTargetworkspace;
                fieldChecker.Validate(sourceFeatureClassFields, out enumFieldError, out targetFeatureClassFields);

                //遍历所有输出字段找到几何字段
                IField geometryField;
                for (int i = 0; i < targetFeatureClassFields.FieldCount; i++)
                {
                    if (targetFeatureClassFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
                    {
                        geometryField = targetFeatureClassFields.get_Field(i);
                        //得到几何字段的几何定义
                        IGeometryDef geometryDef = geometryField.GeometryDef;
                        //赋予几何定义一个空间索引格网数目和格网大小值
                        IGeometryDefEdit targetFCGeoDefEdit = (IGeometryDefEdit)geometryDef;
                        targetFCGeoDefEdit.GridCount_2 = 1;
                        targetFCGeoDefEdit.set_GridSize(0, 0);
                        //允许ArcGIS为数据加载确定一个有效的格网大小
                        targetFCGeoDefEdit.SpatialReference_2 = geometryField.GeometryDef.SpatialReference;
                        //转换要素类中所有的要素
                        //IQueryFilter queryFilter = serverContext.CreateObject("esriGeoDatabase.QueryFilter") as IQueryFilter; ;
                        QueryFilter queryFilter = new QueryFilterClass();
                        queryFilter.WhereClause = "";
                        //加载要素类
                        //IFeatureDataConverter fctofc = serverContext.CreateObject("esriGeoDatabase.FeatureDataConverter") as IFeatureDataConverter;

                        IFeatureDataConverter fctofc     = new FeatureDataConverterClass();
                        IEnumInvalidObject    enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, outfeaturedatasetname, targetFeatureClassName, geometryDef, targetFeatureClassFields, "", 1000, 0);
                    }
                }
                featurecount = sourceFeatureClass.FeatureCount(null);
                m_success    = true;
            }
            catch (Exception ee) { m_success = false; m_strErr = ee.Message; featurecount = 0; }
        }
Ejemplo n.º 8
0
        protected override void OnClick()
        {
            #region Get Shapefile
            // Ask user to browse to a shapefile
            IGxObject openedFile = commonFunctions.OpenShapefile("Select your Non-Fissure Waypoint Shapefile");
            if (openedFile == null)
            {
                return;
            }

            // Open the file as an IFeatureClass
            IWorkspaceFactory wsFact = new ShapefileWorkspaceFactoryClass();
            IFeatureWorkspace ws     = wsFact.OpenFromFile(openedFile.Parent.FullName, 0) as IFeatureWorkspace;

            string path = @"C:\tmp\config.txt";
            if (!File.Exists(path))
            {
                MessageBox.Show("Missing the config File !");
                return;
            }

            IFeatureClass nonFissureWaypoints = ws.OpenFeatureClass(openedFile.Name);

            // Make sure user selected a point featureclass
            if (nonFissureWaypoints.ShapeType != esriGeometryType.esriGeometryPoint)
            {
                MessageBox.Show("The shapefile you selected does not contain points. Try again.");
                return;
            }

            // Make sure that the Coordinate System is set
            IGeoDataset                gDs          = nonFissureWaypoints as IGeoDataset;
            IGeoDatasetSchemaEdit      schemaEditor = gDs as IGeoDatasetSchemaEdit;
            ISpatialReferenceFactory2  spaRefFact   = new SpatialReferenceEnvironmentClass();
            IProjectedCoordinateSystem projCs       = spaRefFact.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_NAD1983UTM_12N);
            schemaEditor.AlterSpatialReference(projCs);

            // Put all the points into a cursor
            IFeatureCursor sourcePoints = nonFissureWaypoints.Search(null, false);
            #endregion

            #region Prepare for Loop
            // Get a reference to the Stations featureclass in EarthFissure SDE database
            IWorkspace    sdeWs    = commonFunctions.OpenFissureWorkspace();
            IFeatureClass stations = commonFunctions.OpenFeatureClass(sdeWs, "Stations");

            // Get a reference to the Fissure Info table in the SDE database
            ITable nonFissInfoTable = commonFunctions.OpenTable(sdeWs, "NonFissureStationDescription");

            // Get a reference to the SysInfo table for spinning up IDs
            sysInfo fissDbInfo = new sysInfo(sdeWs);

            // Get field indexes
            Dictionary <string, int> stationIndexes = GetFieldIndexes(stations as ITable);
            Dictionary <string, int> infoIndexes    = GetFieldIndexes(nonFissInfoTable);
            Dictionary <string, int> sourceIndexes  = GetFieldIndexes(nonFissureWaypoints as ITable);

            // Need a geographic coordinate system in the loop
            IGeographicCoordinateSystem geoCs = spaRefFact.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_NAD1983);

            // Setup the ProgressBar
            // setupProgressBar(nonFissureWaypoints.FeatureCount(null));
            #endregion

            // Start an edit session
            IWorkspaceEdit wsEditor = sdeWs as IWorkspaceEdit;
            wsEditor.StartEditing(false);
            wsEditor.StartEditOperation();

            try
            {
                // Get Insert Cursors
                IFeatureCursor stationInsert     = stations.Insert(true);
                ICursor        stationInfoInsert = nonFissInfoTable.Insert(true);

                // Loop through the source points, appending appropriately to both tables.
                IFeature sourcePoint = sourcePoints.NextFeature();

                while (sourcePoint != null)
                {
                    // Get the new station's identifier
                    string stationID = "FIS.StationPoints." + fissDbInfo.GetNextIdValue("StationPoints");

                    // Get the new station description entry's identifier
                    string descriptionID = "FIS.NonFissureStationDescription." + fissDbInfo.GetNextIdValue("NonFissureStationDescription");

                    // Get the Lat/Long values for the new point
                    IGeometry locGeom = sourcePoint.ShapeCopy as IGeometry;
                    locGeom.Project(geoCs);
                    IPoint locPoint = locGeom as IPoint;

                    // Make the new StationPoint
                    IFeatureBuffer newStation = stations.CreateFeatureBuffer();
                    newStation.set_Value(stationIndexes["Stations_ID"], stationID);
                    newStation.set_Value(stationIndexes["FieldID"], "");
                    newStation.set_Value(stationIndexes["Label"], "");
                    newStation.set_Value(stationIndexes["Symbol"], "NonFissure");
                    newStation.set_Value(stationIndexes["PlotAtScale"], 24000);
                    newStation.set_Value(stationIndexes["LocationConfidenceMeters"], sourcePoint.get_Value(sourceIndexes["Horz_Prec"]));
                    newStation.set_Value(stationIndexes["MapY"], locPoint.Y);
                    newStation.set_Value(stationIndexes["MapX"], locPoint.X);
                    newStation.set_Value(stationIndexes["DataSourceID"], "");
                    newStation.Shape = sourcePoint.ShapeCopy;
                    stationInsert.InsertFeature(newStation);

                    // Make the new FissureDescription
                    IRowBuffer newDescription = nonFissInfoTable.CreateRowBuffer();
                    newDescription.set_Value(infoIndexes["stationid"], stationID);
                    newDescription.set_Value(infoIndexes["typeoflineament"], sourcePoint.get_Value(sourceIndexes["Type_of_Li"]));
                    newDescription.set_Value(infoIndexes["datafile"], sourcePoint.get_Value(sourceIndexes["Datafile"]));
                    newDescription.set_Value(infoIndexes["nonfissdescription_id"], descriptionID);
                    stationInfoInsert.InsertRow(newDescription);

                    // Iterate
                    sourcePoint = sourcePoints.NextFeature();
                    // progress.PerformStep();
                }

                // Done. Save edits.
                wsEditor.StopEditOperation();
                wsEditor.StopEditing(true);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.StackTrace);
                wsEditor.StopEditOperation();
                wsEditor.StopEditing(false);
            }
            finally
            {
                //progress.Visible = false;
            }
        }
Ejemplo n.º 9
0
        //直接更改图层坐标系统,并不重投影数据值
        private void btnChangeCoordinate_Click(object sender, EventArgs e)
        {
            ISpatialReference   pSpatialReference = null;
            FrmCoordinateSystem frm = new FrmCoordinateSystem(m_pLayer);

            if (frm.ShowDialog() == DialogResult.OK)
            {
                pSpatialReference = frm.pSpaReference;

                if (m_pLayer is IFeatureLayer)
                {
                    IFeatureLayer pFLayer = m_pLayer as IFeatureLayer;
                    IFeatureClass pFClass = pFLayer.FeatureClass;
                    if (pFClass == null)
                    {
                        return;
                    }
                    IFeatureDataset pFDataset = pFClass.FeatureDataset;
                    if (pFDataset == null)
                    {
                        IGeoDatasetSchemaEdit geoSchemaEdit = pFClass as IGeoDatasetSchemaEdit;
                        if (geoSchemaEdit == null)
                        {
                            return;
                        }

                        if (geoSchemaEdit.CanAlterSpatialReference == true)
                        {
                            geoSchemaEdit.AlterSpatialReference(pSpatialReference);
                        }
                    }
                    else
                    {
                        IGeoDatasetSchemaEdit geoSchemaEdit = pFDataset as IGeoDatasetSchemaEdit;
                        if (geoSchemaEdit == null)
                        {
                            return;
                        }

                        if (geoSchemaEdit.CanAlterSpatialReference == true)
                        {
                            geoSchemaEdit.AlterSpatialReference(pSpatialReference);
                        }
                    }
                }
                else if (m_pLayer is IRasterLayer)
                {
                    IRasterLayer          pRLayer       = m_pLayer as IRasterLayer;
                    IRaster               pRaster       = pRLayer.Raster;
                    IRaster2              pRaster2      = pRaster as IRaster2;
                    IRasterDataset        pRDataset     = pRaster2.RasterDataset;
                    IGeoDatasetSchemaEdit geoSchemaEdit = pRDataset as IGeoDatasetSchemaEdit;
                    if (geoSchemaEdit == null)
                    {
                        return;
                    }

                    if (geoSchemaEdit.CanAlterSpatialReference == true)
                    {
                        geoSchemaEdit.AlterSpatialReference(pSpatialReference);
                        pRLayer.CreateFromDataset(pRDataset);
                    }
                }


                string strCoord = string.Empty;
                if (m_pLayer is IGeoDataset)
                {
                    IGeoDataset geoDataset = m_pLayer as IGeoDataset;
                    if (geoDataset == null)
                    {
                        this.txtCoordinateSystem.Text = string.Empty;
                    }
                    else
                    {
                        ISpatialReference reference = geoDataset.SpatialReference;

                        strCoord = ClsGDBDataCommon.GetReferenceString(reference);
                        txtCoordinateSystem.Text = strCoord;
                        txtCoordinateSystem.Update();
                    }
                }
            }
        }
Ejemplo n.º 10
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            bool resultErr = false;

            if (txtCtrlPtPath.Text == "" || txtSrcPath.Text == "" || txtToPath.Text == "")
            {
                return;
            }
            if (lstFC.CheckedItems.Count == 0)
            {
                return;
            }
            try
            {
                initTransformation();
            }
            catch (Exception ex)
            {
                ErrorHandle.ShowFrmErrorHandle("提示", ex.Message);
                return;
            }
            if (rdoMDB.Checked)//personal GDB
            {
                try
                {
                    pWF = new AccessWorkspaceFactoryClass();
                    string         path  = txtToPath.Text.Substring(0, txtToPath.Text.LastIndexOf("\\") + 1);
                    string         name  = txtToPath.Text.Substring(txtToPath.Text.LastIndexOf("\\") + 1);
                    IWorkspaceName pToWN = pWF.Create(path, name, null, 0);
                    if (pToWN == null)
                    {
                        return;
                    }

                    pToWorkspace = pWF.OpenFromFile(txtToPath.Text, 0);
                }
                catch { }
                if (pToWorkspace == null)
                {
                    return;
                }
            }
            else if (rdoGDB.Checked)//file GDB
            {
                pWF = new FileGDBWorkspaceFactoryClass();
                string         path  = txtToPath.Text.Substring(0, txtToPath.Text.LastIndexOf("\\") + 1);
                string         name  = txtToPath.Text.Substring(txtToPath.Text.LastIndexOf("\\") + 1);
                IWorkspaceName pToWN = pWF.Create(path, name, null, 0);
                if (pToWN == null)
                {
                    return;
                }
                try
                {
                    pToWorkspace = pWF.OpenFromFile(txtToPath.Text, 0);
                }
                catch { }
                if (pToWorkspace == null)
                {
                    return;
                }
            }
            else if (rdoSHP.Checked)//shp
            {
                pWF = new ShapefileWorkspaceFactoryClass();
                try
                {
                    pToWorkspace = pWF.OpenFromFile(txtToPath.Text, 0);
                }
                catch { }
                if (pToWorkspace == null)
                {
                    return;
                }
            }
            try
            {
                toPath             = txtToPath.Text;//保存目标路径,因转换结束要清空目标文本框防止用户再次点击转换,查看日志需要知道目标路径
                pbCoorTran.Value   = 0;
                pbCoorTran.Minimum = 0;
                pbCoorTran.Maximum = lstFC.CheckedItems.Count;
                pbCoorTran.Step    = 1;
                pbCoorTran.Visible = true;
                start = DateTime.Now;//开始时间
                Application.DoEvents();
                pResult = new Dictionary <string, string>();
                IWorkspaceEdit pWorkSpaceEdit = pToWorkspace as IWorkspaceEdit;
                pWorkSpaceEdit.StartEditing(false);
                foreach (ListViewItem lvi in lstFC.CheckedItems)
                {
                    IDataset pToD = null;
                    try
                    {
                        IFeatureClass pFc = (pSrcWorkspace as IFeatureWorkspace).OpenFeatureClass(lvi.Text);
                        IDataset      pD  = pFc as IDataset;
                        lblRMS.Text = "正在转换要素类" + pD.Name + "...";
                        Application.DoEvents();
                        IFeatureClass pToFC = TransFeatures.CreateFeatureClass(pD.Name, pFc, pToWorkspace, null, null, pFc.ShapeType);
                        pToD = pToFC as IDataset;
                        TransFeatures.CopyFeatureAndTran(pFc.Search(null, false), pToFC, pTransformation);
                        IGeoDataset           pGD  = pToD as IGeoDataset;
                        IGeoDatasetSchemaEdit pGDS = pGD as IGeoDatasetSchemaEdit;
                        if (pSR != null && pGDS.CanAlterSpatialReference)
                        {
                            pGDS.AlterSpatialReference(pSR);//定义空间参考
                        }
                        pResult.Add(pToD.Name, "转换成功");
                        pbCoorTran.PerformStep();
                    }
                    catch (Exception ex)
                    {
                        pResult.Add(pToD.Name, "转换失败/" + ex.Message);
                        if (ex.Message == "The coordinates or measures are out of bounds.")
                        {
                            pResult[pToD.Name] = "转换失败/控制点坐标超出该要素类坐标域边界";
                        }
                        pToD.Delete();
                        resultErr = true;
                    }

                    //if (rdoSHP.Checked)
                    //    pD.Copy(pD.Name, pToWorkspace);
                    //else
                    //    CopyPasteGDBData.CopyPasteGeodatabaseData(pSrcWorkspace, pToWorkspace, pD.Name, esriDatasetType.esriDTFeatureClass);
                }//foreach
                #region 20110815前代码
                //IWorkspaceEdit pWorkSpaceEdit = pToWorkspace as IWorkspaceEdit;
                //pWorkSpaceEdit.StartEditing(false);
                //IEnumDataset enumDS = pToWorkspace.get_Datasets(esriDatasetType.esriDTFeatureClass);
                //IDataset pDs = enumDS.Next();
                //while (pDs != null)
                //{
                //    lblRMS.Text = "正在转换要素类"+pDs.Name+"...";
                //    try
                //    {
                //        IFeatureClass pFC = pDs as IFeatureClass;
                //        coordTransfermation(pFC, pTransformation);
                //        pResult.Add(pDs.Name, "转换成功");
                //    }
                //    catch (Exception ex)
                //    {
                //        pResult.Add(pDs.Name, "转换失败/" + ex.Message);
                //        if (ex.Message == "The coordinates or measures are out of bounds.")
                //            pResult[pDs.Name] = "转换失败/控制点坐标超出该要素类坐标域边界";
                //        pDs.Delete();
                //        resultErr = true;

                //    }
                //    finally
                //    {
                //        pbCoorTran.PerformStep();
                //        pDs = enumDS.Next();
                //    }
                //}
                //IEnumDataset enumDS1 = pToWorkspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);
                //IDataset pDs1 = enumDS1.Next();
                //while (pDs1 != null)
                //{
                //    lblRMS.Text = "正在转换要素集" + pDs1.Name + "...";
                //    IEnumDataset pED = pDs1.Subsets;
                //    IDataset pDs2 = pED.Next();
                //    while (pDs2 != null)
                //    {
                //        try
                //        {
                //            IFeatureClass pFC2 = pDs2 as IFeatureClass;
                //            coordTransfermation(pFC2, pTransformation);
                //            pResult.Add(pDs2.Name, "转换成功");
                //        }
                //        catch (Exception ex)
                //        {

                //            pResult.Add(pDs2.Name, "转换失败/" + ex.Message);
                //            if (ex.Message == "The coordinates or measures are out of bounds.")
                //                pResult[pDs2.Name] = "转换失败/控制点坐标超出该要素类坐标域边界";
                //            pDs2.Delete();
                //            resultErr = true;
                //        }
                //        finally
                //        {

                //            pDs2 = pED.Next();
                //        }
                //    }
                //    pbCoorTran.PerformStep();
                //    pDs1 = enumDS1.Next();
                //}


                //}
                //foreach (KeyValuePair<string, string> kvp in pResult)
                //{
                //    ListViewItem lvi = lstViewResult.Items.Add(kvp.Key);
                //    lvi.SubItems.Add(kvp.Value);
                //}
                //lstViewResult.Refresh();
                //this.Height = 529;
                #endregion
                pWorkSpaceEdit.StopEditing(true);
            }
            catch (Exception ex)
            {
                MessageBox.Show("坐标转换失败!" + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            finally
            {
                //vProgress.Close();
                pToWorkspace       = null;
                txtToPath.Text     = "";
                pbCoorTran.Visible = false;
            }

            if (!resultErr)
            {
                lblRMS.Text = "转换成功!";
            }
            else
            {
                lblRMS.Text = "转换结束!但是部分要素转换失败,请查看日志。";
            }
            stop = DateTime.Now;//结束时间
        }