public IFeatureClass CreatePointFeatureClass(IFeatureDataset pFeatureDataset, CParkPoint xml) { try { //建立shape字段 IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields; IField pField = new FieldClass(); IFieldEdit pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "Shape"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; //设置Geometry definition IGeometryDef pGeometryDef = new GeometryDefClass(); IGeometryDefEdit pGeometryDefEdit = (IGeometryDefEdit)pGeometryDef; pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint; //点、线、面 pGeometryDefEdit.SpatialReference_2 = ClsGDBDataCommon.CreateProjectedCoordinateSystem(); pFieldEdit.GeometryDef_2 = pGeometryDef; pFieldsEdit.AddField(pField); //新建字段 pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "SzID"; //代号 pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldEdit.IsNullable_2 = true; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "Changed"; //停泊点类型是否改变 pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldEdit.IsNullable_2 = true; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "Symbol"; //停泊点类型 pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldEdit.IsNullable_2 = true; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "BegineTime"; //到达停泊点时间 pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldEdit.IsNullable_2 = true; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "LeaveTime"; //离开停泊点时间 pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldEdit.IsNullable_2 = true; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "太阳方位角"; //太阳方位角 pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; pFieldEdit.IsNullable_2 = true; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "地球方位角"; //地球方位角 pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; pFieldEdit.IsNullable_2 = true; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "WorkModeNum"; //离开停泊点时间 pFieldEdit.Type_2 = esriFieldType.esriFieldTypeSmallInteger; pFieldEdit.IsNullable_2 = true; pFieldsEdit.AddField(pField); for (int i = 0; i <= 7; i++) { pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "Mode_" + i.ToString() + "_symbol"; //第i工作模式名称 pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldEdit.IsNullable_2 = true; pFieldsEdit.AddField(pField); //pField = new FieldClass(); //pFieldEdit = (IFieldEdit)pField; //pFieldEdit.Name_2 = "Mode_" + i.ToString() + "_Name"; //第i工作模式名称 //pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; //pFieldEdit.IsNullable_2 = true; //pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "Mode_" + i.ToString() + "_Slice"; //第i工作模式固有时长 pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; pFieldEdit.IsNullable_2 = true; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "Mode_" + i.ToString() + "_AssSlice"; //第i工作模式分配时长 pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; pFieldEdit.IsNullable_2 = true; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "Mode_" + i.ToString() + "_BeginTime"; //第i工作模式开始时刻 pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldEdit.IsNullable_2 = true; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "Mode_" + i.ToString() + "_EndTime"; //第i工作模式结束时刻 pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldEdit.IsNullable_2 = true; pFieldsEdit.AddField(pField); //pField = new FieldClass(); //pFieldEdit = (IFieldEdit)pField; //pFieldEdit.Name_2 = "Mode_" + i.ToString() + "_Energy"; //第i工作模式结束能量 //pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; //pFieldEdit.IsNullable_2 = true; //pFieldsEdit.AddField(pField); } IFeatureClass pFeatureClass = pFeatureDataset.CreateFeatureClass(textBoxX3.Text + "_parkpoint", pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", ""); for (int j = 0; j < xml.uiParkNum; j++) { IPoint pPoint = new PointClass(); pPoint.X = xml.ParkSList[j].stCoord.dx; pPoint.Y = xml.ParkSList[j].stCoord.dy; IFeature pFeature = pFeatureClass.CreateFeature(); pFeature.Shape = pPoint; pFeature.Store(); AddAttributeTable(pFeature, xml.ParkSList[j], j); } return(pFeatureClass); } catch (System.Exception ex) { MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(null); } }
private void buttonX_ok_Click(object sender, EventArgs e) { CParkPoint xml = new CParkPoint(); bool result = xml.ReadParkXML(XMLPath); Regex regNum = new Regex("^[0-9]"); if (regNum.IsMatch(textBoxX3.Text) == true) { MessageBox.Show("数据集名称不能以数字开头命名", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } if (result == true) { try { IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactoryClass(); gdbPath = textBoxX2.Text; IFeatureWorkspace pFeatureWorkspace = workspaceFactory.OpenFromFile(gdbPath, 0) as IFeatureWorkspace; ISpatialReferenceFactory pSpatialReferenceFactory = new SpatialReferenceEnvironment(); //ISpatialReference pSpatialReference = new UnknownCoordinateSystemClass(); ISpatialReference pSpatialReference = ClsGDBDataCommon.CreateProjectedCoordinateSystem(); pSpatialReference.SetDomain(-8000000, 8000000, -800000, 8000000); IFeatureDataset pFeatureDataset = pFeatureWorkspace.CreateFeatureDataset(textBoxX3.Text, pSpatialReference); IFeatureClass pFeatureclass = CreatePointFeatureClass(pFeatureDataset, xml); IFeatureClass pFCLine = CreatLineFC(pFeatureDataset, pFeatureclass); if (pFeatureclass == null || pFCLine == null) { MessageBox.Show("数据生成失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } IFeatureLayer pFPointLayer = new FeatureLayerClass(); pFPointLayer.FeatureClass = pFeatureclass; pFPointLayer.Name = textBoxX3.Text + "_parkpoint"; IFeatureLayer pFLintLayer = new FeatureLayerClass(); pFLintLayer.FeatureClass = pFCLine; pFLintLayer.Name = textBoxX3.Text + "_parkline"; m_pMapCtl.AddLayer(pFLintLayer as ILayer, 0); m_pMapCtl.AddLayer(pFPointLayer as ILayer, 0); m_pMapCtl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); if (cmbImpSymbol.Text != null && symFilePath != null) { ImpSymbolFromFile(symFilePath, pFPointLayer, pFLintLayer); } //MessageBox.Show("数据已经生成", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); this.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } } else { MessageBox.Show("XML文件解析失败!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } }