using System.Drawing; using GeoScene.Data; using GeoScene.Engine; namespace Cyberpipe { class CreateLine { public static void batchInsert(GSODataSource ds, string datasetName, GSOFeatures features, Color color) { GSOFeatureDataset featdataset = fetchFeatureDataset(ds, datasetName, features[0]); featdataset.Open(); for (int j = 0; j < features.Length; j++) { //TODO LIST:创建管线对象 GSOFeature feature = createFeatureWithModel(features[j], featdataset, color); featdataset.AddFeature(feature); } featdataset.Save(); } private static GSOFeature createFeatureWithModel(GSOFeature gsoFeature, GSOFeatureDataset fds,Color color) { GSOFeature newfeature = fds.CreateFeature(); GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); style.LineWidth = 3; style.LineColor = Color.FromArgb(255, color); GSOGeoPolyline3D line = gsoFeature.Geometry.Clone() as GSOGeoPolyline3D; GSOPoint3ds pt3ds = line[0]; for (int n = 0; n < pt3ds.Count; n++) { GSOPoint3d pt3d = pt3ds[n]; pt3d.Z = 0; pt3ds[n] = pt3d; } line[0] = pt3ds; line.Style = style; line.Name = gsoFeature.Dataset.Caption; newfeature.Geometry = line; for (int i = 0; i < newfeature.GetFieldCount(); i++) { GSOFieldDefn fielddef = gsoFeature.GetFieldDefn(i); object obu = gsoFeature.GetValue(fielddef.Name); if (obu != null) { newfeature.SetValue(fielddef.Name, obu); } } return newfeature; } public static GSOFeatureDataset fetchFeatureDataset(GSODataSource ds, string datasetName, GSOFeature feature) { GSODataset dataset = ds.GetDatasetByName(datasetName); GSOFeatureDataset gsoFeatureDataset; if (dataset != null) { //获取原有的GSOFeatureDataSet gsoFeatureDataset = dataset as GSOFeatureDataset; } else { //创建新的GSOFeatureDataSet,同时要创建各个feature的字段值 gsoFeatureDataset = createFeatureDatasetWithFields(ds, datasetName, feature); } return gsoFeatureDataset; } public static GSOFeatureDataset createFeatureDatasetWithFields(GSODataSource ds, string datasetName, GSOFeature feature) { GSOFeatureDataset featDs = ds.CreateFeatureDataset(datasetName); for (int i = 0; i < feature.GetFieldCount(); i++) { GSOFieldDefn fielddef = feature.GetFieldDefn(i); GSOFieldAttr field = new GSOFieldAttr { Name = fielddef.Name }; switch (fielddef.Type) { 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; case EnumFieldType.Text: field.Type = EnumFieldType.Text; field.Width = 100; break; } bool res = featDs.AddField(field); } featDs.Save(); return featDs; } } }