using System; using System.Collections; using System.IO; using System.Windows.Forms; using System.Xml; using GeoScene.Data; using GeoScene.Engine; using GeoScene.Globe; namespace Cyberpipe { public abstract class ModelBuilder { protected GSOLayer layer; protected GSODataSource ds; protected static Hashtable en_cns = new Hashtable(); static ModelBuilder() { string filename = Application.StartupPath + "\\FormText.xml"; if (File.Exists(filename)) { XmlTextReader XmlReader = new XmlTextReader(filename); try { while (XmlReader.Read()) { if (XmlReader.Name == "Field") { string str1 = XmlReader["label"]; string str3 = XmlReader["type"]; string str2 = XmlReader.ReadElementString(); en_cns.Add(str1, str2); } } } catch (Exception ex) { LogError.PublishError(ex); MessageBox.Show(ex.Message); } } } public bool build(GSOLayer layer, EnumUpdateMode updateMode, EnumBuildMode buildMode,BaseParam param) { this.layer = layer; if (validate(layer)) { return doBuild(updateMode, buildMode, param); } return false; } public ModelBuilder(GSODataSource ds) { this.ds = ds; } public abstract bool validate(GSOLayer layer); public abstract bool doBuild(EnumUpdateMode updateMode, EnumBuildMode buildMode, BaseParam param); /// <returns></returns> public GSOFeatureDataset CreateDBFeatureDataset(GSOLayer layer, string layerName) { GSOFeatureDataset featDs = ds.CreateFeatureDataset(layerName); if (featDs == null) { return null; } GSOFeatures features = layer.GetAllFeatures(); if (features.Length == 0) { return null; } for (int i = 0; i < features[0].GetFieldCount(); i++) { GSOFieldDefn fielddef = features[0].GetFieldDefn(i); if (fielddef == null) { continue; } GSOFieldAttr field = new GSOFieldAttr(); field.Name = en_cns.ContainsKey(fielddef.Name) ? en_cns[fielddef.Name].ToString() : fielddef.Name; switch (fielddef.Type) { case EnumFieldType.Text: field.Type = EnumFieldType.Text; field.Width = 8000; break; case EnumFieldType.INT32: field.Type = EnumFieldType.INT32; field.Width = 4; break; case EnumFieldType.Double: field.Type = EnumFieldType.Double; field.Width = 8; break; case EnumFieldType.Date: field.Type = EnumFieldType.Date; field.Width = 10; break; } bool res = featDs.AddField(field); } featDs.Save(); return featDs; } protected void setFeatureValueByShapeFeature(GSOFeature src, GSOFeature dst) { for (int j = 0; j < dst.GetFieldCount(); j++) { GSOFieldDefn fielddef = src.GetFieldDefn(j); object fieldvalue = src.GetValue(fielddef.Name);// convertFieldValue(fielddef.Name, f.GetValue(fielddef.Name)); dst.SetValue(fielddef.Name, fieldvalue); /* * if (fieldvalue == null) continue; string fieldName = en_cns.ContainsKey(fielddef.Name) == true ? en_cns[fielddef.Name].ToString() : fielddef.Name; dst.SetValue(fieldName, fieldvalue); */ } } } }