/// <summary> /// 生成signature文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SC_CreateSampleFiles_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (SC_dataGridView.Rows.Count == 0) { return; } SaveFileDialog SaveSignatureFile = new SaveFileDialog(); SaveSignatureFile.Title = "生成Signature文件"; SaveSignatureFile.Filter = "样本文件|*.gsg"; if (SaveSignatureFile.ShowDialog() == DialogResult.OK) { IGeoDataset inputraster = SampleLayerCombox.Tag as IGeoDataset; //在临时文件夹生成featureclass,根据featureclass生成signature文件 //判断临时文件夹下是否有重名 int changefilename = 0; while (System.IO.File.Exists(Application.StartupPath + "\\temp\\TempSample" + changefilename + ".shp")) { changefilename++; } //新建featureclass字段 IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = pFields as IFieldsEdit; IField pField = new FieldClass(); IFieldEdit pFieldEdit = pField as IFieldEdit; pFieldEdit.Name_2 = "Shape"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; //设置geometry definition IGeometryDef pGeometryDef = new GeometryDefClass(); IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit; pGeometryDefEdit.GeometryType_2 = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon; pGeometryDefEdit.SpatialReference_2 = inputraster.SpatialReference; pFieldEdit.GeometryDef_2 = pGeometryDef; pFieldsEdit.AddField(pField); IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory(); IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(Application.StartupPath + "\\temp", 0) as IFeatureWorkspace; IFeatureClass featureclass = pFeatureWorkspace.CreateFeatureClass("TempSample" + changefilename + ".shp", pFields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); //根据单元格tag中存储的多边形生成对应要素 for (int i = 0; i < SC_dataGridView.Rows.Count; i++) { IFeature feature = featureclass.CreateFeature(); feature.Shape = SC_dataGridView.Rows[i].Cells["color"].Tag as IPolygon; feature.Store(); } //生成signature文件 IGeoDataset Sampledataset = featureclass as IGeoDataset; IMultivariateOp Multivariateop = new RasterMultivariateOpClass(); Multivariateop.CreateSignatures(inputraster, Sampledataset, SaveSignatureFile.FileName + ".gsg", true); } }