/// <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; }
/// <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); } }
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); }
/// <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); } }
/// <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; } }
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; } }
//直接更改图层坐标系统,并不重投影数据值 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(); } } } }
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;//结束时间 }