public void CreateXml() { ShapeReaderConfiguration SRC = new ShapeReaderConfiguration(); SRC.XHeader = "XUTM"; SRC.YHeader = "YUTM"; SRC.PlantIDHeader = "PLANTID"; SRC.WellIDHeader = "BOREHOLENO"; SRC.IntakeNumber = "INTAKENO"; SRC.BOTTOMHeader = "INTAKBOTK"; SRC.TOPHeader = "INTAKTOPK"; SRC.TerrainHeader = "JUPKOTE"; SRC.FraAArHeader = "FRAAAR"; SRC.TilAArHeader = "TILAAR"; SRC.LayerHeader = "Layer"; XmlSerializer x = new XmlSerializer(typeof(ShapeReaderConfiguration)); using (FileStream fs = new FileStream(@"..\..\..\ThirdpartyBinaries\ShapeReaderConfig.xml", FileMode.Create )) { x.Serialize(fs,SRC); } ShapeReaderConfiguration SRC2; using (FileStream fs = new FileStream(@"..\..\..\ThirdpartyBinaries\ShapeReaderConfig.xml", FileMode.Open)) { SRC2 = (ShapeReaderConfiguration)x.Deserialize(fs); } Assert.AreEqual(SRC.XHeader, SRC2.XHeader); Assert.AreEqual(SRC.YHeader, SRC2.YHeader); Assert.AreEqual(SRC.WellIDHeader, SRC2.WellIDHeader); Assert.AreEqual(SRC.TOPHeader, SRC2.TOPHeader); }
/// <summary> /// Opens a point shape /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, EventArgs e) { openFileDialog2.Filter = "Known file types (*.shp)|*.shp"; this.openFileDialog2.ShowReadOnly = true; this.openFileDialog2.Title = "Select a shape file with data for wells or intakes"; if (openFileDialog2.ShowDialog() == DialogResult.OK) { string FileName = openFileDialog2.FileName; PointShapeReader SR = new PointShapeReader(FileName); DataTable FullDataSet = SR.Data.Read(); //Launch a data selector DataSelector DS = new DataSelector(FullDataSet); if (DS.ShowDialog() == DialogResult.OK) { if (ShpConfig == null) { XmlSerializer x = new XmlSerializer(typeof(ShapeReaderConfiguration)); string InstallationPath = Path.GetDirectoryName(this.GetType().Assembly.Location); string config = Path.Combine(InstallationPath, "ShapeReaderConfig.xml"); using (FileStream fs = new FileStream(config, FileMode.Open)) { ShpConfig = (ShapeReaderConfiguration)x.Deserialize(fs); if (CheckColumn(FullDataSet, ShpConfig.WellIDHeader, config)) if (CheckColumn(FullDataSet, ShpConfig.IntakeNumber, config)) if (CheckColumn(FullDataSet, ShpConfig.XHeader, config)) if (CheckColumn(FullDataSet, ShpConfig.YHeader, config)) if (CheckColumn(FullDataSet, ShpConfig.TOPHeader, config)) if (CheckColumn(FullDataSet, ShpConfig.BOTTOMHeader, config)) { Wells = new Dictionary<string, IWell>(); if (FullDataSet.Columns.Contains(ShpConfig.PlantIDHeader)) { DPlants = new Dictionary<int, Plant>(); HeadObservations.FillInFromNovanaShape(DS.SelectedRows, ShpConfig, Wells, DPlants); } else HeadObservations.FillInFromNovanaShape(DS.SelectedRows, ShpConfig, Wells); UpdateListsAndListboxes(); } } } } SR.Dispose(); } }
/// <summary> /// Creates wells from DataRows based on ShapeReaderConfiguration /// </summary> /// <param name="DS"></param> /// <param name="SRC"></param> public static void FillInFromNovanaShape(DataRow[] DS, ShapeReaderConfiguration SRC, Dictionary<string, IWell> Wells, Dictionary<int, Plant> Plants) { bool ReadPumpActivity = false; bool ReadPlants = false; bool ReadLayer = false; if (DS.First().Table.Columns.Contains(SRC.FraAArHeader) & DS.First().Table.Columns.Contains(SRC.TilAArHeader)) ReadPumpActivity = true; if (DS.First().Table.Columns.Contains(SRC.LayerHeader)) ReadLayer = true; if (Plants != null) if (DS.First().Table.Columns.Contains(SRC.PlantIDHeader)) ReadPlants = true; IWell CurrentWell; IIntake CurrentIntake; foreach (DataRow DR in DS) { //Find the well in the dictionary if (!Wells.TryGetValue((string)DR[SRC.WellIDHeader], out CurrentWell)) { //Add a new well if it was not found CurrentWell = new Well(DR[SRC.WellIDHeader].ToString()); CurrentWell.UsedForExtraction = true; Wells.Add(CurrentWell.ID, CurrentWell); } int intakeno = Convert.ToInt32(DR[SRC.IntakeNumber]); CurrentIntake = CurrentWell.Intakes.FirstOrDefault(var => var.IDNumber == intakeno); if (CurrentIntake==null) CurrentIntake = CurrentWell.AddNewIntake(intakeno); if (ReadLayer) if (!Convert.IsDBNull(DR[SRC.LayerHeader])) CurrentIntake.Layer = Convert.ToInt32(DR[SRC.LayerHeader]); if (ReadPlants) { Plant CurrentPlant; int PlantID = Convert.ToInt32(DR[SRC.PlantIDHeader]); if (!Plants.TryGetValue(PlantID, out CurrentPlant)) { CurrentPlant = new Plant(PlantID); Plants.Add(PlantID, CurrentPlant); } PumpingIntake CurrentPumpingIntake = new PumpingIntake(CurrentIntake); CurrentPlant.PumpingIntakes.Add(CurrentPumpingIntake); if (ReadPumpActivity) { CurrentPumpingIntake.Start = new DateTime(Convert.ToInt32(DR[SRC.FraAArHeader]), 1, 1); CurrentPumpingIntake.End = new DateTime(Convert.ToInt32(DR[SRC.TilAArHeader]), 12, 31); } } CurrentWell.X = Convert.ToDouble(DR[SRC.XHeader]); CurrentWell.Y = Convert.ToDouble(DR[SRC.YHeader]); CurrentWell.Terrain = Convert.ToDouble(DR[SRC.TerrainHeader]); Screen CurrentScreen = new Screen(CurrentIntake); CurrentScreen.BottomAsKote = Convert.ToDouble(DR[SRC.BOTTOMHeader]); CurrentScreen.TopAsKote = Convert.ToDouble(DR[SRC.TOPHeader]); } }
/// <summary> /// Creates wells from DataRows based on ShapeReaderConfiguration /// </summary> /// <param name="DS"></param> /// <param name="SRC"></param> public static void FillInFromNovanaShape(DataRow[] DS, ShapeReaderConfiguration SRC, Dictionary<string, IWell> Wells) { FillInFromNovanaShape(DS, SRC, Wells, null); }