Ejemplo n.º 1
0
        private void btn_OK_Click(object sender, EventArgs e)
        {
            try
            {
                //属性索引
                foreach (string sDbIndexName in DelAttrIndexList)
                {
                    featureCls.DeleteDbIndex(sDbIndexName);
                    AttrIndexList.Remove(sDbIndexName);
                }
                for (int i = 0; i < this.lb_AttrIndex.Items.Count; i++)
                {
                    myAttrIndex oneIndexItem = this.lb_AttrIndex.Items[i] as myAttrIndex;
                    if (AttrIndexList.Contains(oneIndexItem.ToString()))
                    {
                        continue;
                    }
                    featureCls.AddDbIndex(oneIndexItem.dbIndex);
                }

                //空间索引
                for (int j = 0; j < this.lb_SpatialIndexGeo.Items.Count; j++)
                {
                    CheckIndexEdit oneIndexItem = this.lb_SpatialIndexGeo.Items[j] as CheckIndexEdit;
                    string         sGeoCol      = oneIndexItem.GeoFieldName;
                    if (oneIndexItem.ExistIndex == null && GridIndexHash.ContainsKey(sGeoCol))
                    {
                        featureCls.DeleteSpatialIndex(sGeoCol);
                    }
                    if (oneIndexItem.ExistIndex == null && oneIndexItem.NewIndex.IsInitail)
                    {
                        IGridIndexInfo NewIndexInfo = new GridIndexInfo();
                        NewIndexInfo.GeoColumnName = sGeoCol;
                        NewIndexInfo.L1            = oneIndexItem.NewIndex.L1;
                        NewIndexInfo.L2            = oneIndexItem.NewIndex.L2;
                        NewIndexInfo.L3            = oneIndexItem.NewIndex.L3;
                        featureCls.AddSpatialIndex(NewIndexInfo as IIndexInfo);
                    }
                    if (oneIndexItem.ExistIndex != null && !oneIndexItem.IsSameIndex())
                    {
                        featureCls.DeleteSpatialIndex(sGeoCol);
                        IGridIndexInfo NewIndexInfo = new GridIndexInfo();
                        NewIndexInfo.GeoColumnName = sGeoCol;
                        NewIndexInfo.L1            = oneIndexItem.NewIndex.L1;
                        NewIndexInfo.L2            = oneIndexItem.NewIndex.L2;
                        NewIndexInfo.L3            = oneIndexItem.NewIndex.L3;
                        featureCls.AddSpatialIndex(NewIndexInfo as IIndexInfo);
                    }
                }

                //渲染索引
                for (int k = 0; k < this.lb_RenderIndexGeo.Items.Count; k++)
                {
                    CheckIndexEdit oneIndexItem = this.lb_RenderIndexGeo.Items[k] as CheckIndexEdit;
                    string         sGeoCol      = oneIndexItem.GeoFieldName;
                    if (oneIndexItem.ExistIndex == null && RenderIndexHash.ContainsKey(sGeoCol))
                    {
                        featureCls.DeleteRenderIndex(sGeoCol);
                    }
                    if (oneIndexItem.ExistIndex == null && oneIndexItem.NewIndex.IsInitail)
                    {
                        IRenderIndexInfo NewIndexInfo = new RenderIndexInfo();
                        NewIndexInfo.GeoColumnName = sGeoCol;
                        NewIndexInfo.L1            = oneIndexItem.NewIndex.L1;
                        featureCls.AddRenderIndex(NewIndexInfo);
                    }
                    if (oneIndexItem.ExistIndex != null && !oneIndexItem.IsSameIndex())
                    {
                        featureCls.DeleteRenderIndex(sGeoCol);
                        IRenderIndexInfo NewIndexInfo = new RenderIndexInfo();
                        NewIndexInfo.GeoColumnName = sGeoCol;
                        NewIndexInfo.L1            = oneIndexItem.NewIndex.L1;
                        featureCls.AddRenderIndex(NewIndexInfo);
                    }
                }
                for (int l = 0; l < this.lb_RenderField.Items.Count; l++)
                {
                    myFieldInfo oneField = this.lb_RenderField.Items[l] as myFieldInfo;
                    if (RegRenderIndexFields.Contains(oneField.ToString()))
                    {
                        RegRenderIndexFields.Remove(oneField.ToString());
                        continue;
                    }
                    else
                    {
                        oneField.fieldinfo.RegisteredRenderIndex = true;
                        featureCls.ModifyField(oneField.fieldinfo);
                    }
                }
                if (RegRenderIndexFields.Count > 0)
                {
                    foreach (string sFieldName in RegRenderIndexFields)
                    {
                        IFieldInfo delField = RegRenderIndexHash[sFieldName] as IFieldInfo;
                        delField.RegisteredRenderIndex = false;
                        featureCls.ModifyField(delField);
                    }
                }
                MessageBox.Show("保存成功!");
            }
            catch (Exception ex)
            {
                MessageBox.Show("保存失败!" + ex.ToString());
            }
            finally
            {
                featureCls.LockType = gviLockType.gviLockSharedSchema;
                this.Close();
            }
        }
Ejemplo n.º 2
0
        private bool CreateFacClassReg(FacClass fc)
        {
            if (fc == null || fc.FacilityType == null)
            {
                return(false);
            }
            IFdeCursor cursor = null;
            IRowBuffer row    = null;

            try
            {
                IFeatureDataSet fds = this._dsPipe.OpenFeatureDataset("DataSet_BIZ");
                if (fds == null)
                {
                    return(false);
                }
                IFeatureDataSet fdsActuality = this._dsPipe.OpenFeatureDataset("DataSet_GEO_Actuality");
                if (fdsActuality == null)
                {
                    return(false);
                }
                IObjectClass oc = fds.OpenObjectClass("OC_FacilityClass");
                if (oc == null)
                {
                    return(false);
                }

                row    = oc.CreateRowBuffer();
                cursor = oc.Insert();
                if (row != null)
                {
                    row.SetValue(row.FieldIndex("FacClassCode"), fc.Code);
                    row.SetValue(row.FieldIndex("Name"), fc.Name);
                    row.SetValue(row.FieldIndex("FacilityType"), fc.FacilityType.Name);
                    row.SetValue(row.FieldIndex("LocationType"), fc.LocationType.ToString());
                    row.SetValue(row.FieldIndex("TurnerStyle"), fc.TurnerStyle.ToString());
                    row.SetValue(row.FieldIndex("Comment"), fc.Comment);
                    string fcName = string.Format("FC_{0}_{1}", (int)DataLifeCyle.Actuality, fc.Code);
                    List <CMFieldConfig> fieldConfig  = GetFieldsConfig(fc.Code);
                    IFieldInfoCollection fielInfoCol  = CreateFieldInfoCollection(fieldConfig, fc.FacilityType.Name);
                    IFeatureClass        featureClass = fdsActuality.CreateFeatureClass(fcName, fielInfoCol);
                    if (featureClass == null)
                    {
                        return(false);
                    }
                    featureClass.AliasName = fc.Name;
                    featureClass.LockType  = gviLockType.gviLockExclusiveSchema;
                    IGridIndexInfo indexInfo = new GridIndexInfoClass
                    {
                        L1            = 500.0,
                        L2            = 2000.0,
                        L3            = 10000.0,
                        GeoColumnName = "Geometry"
                    };
                    featureClass.AddSpatialIndex(indexInfo);
                    indexInfo.GeoColumnName = "Shape";
                    featureClass.AddSpatialIndex(indexInfo);
                    indexInfo.GeoColumnName = "FootPrint";
                    featureClass.AddSpatialIndex(indexInfo);
                    IRenderIndexInfo info2 = new RenderIndexInfoClass
                    {
                        L1            = 500.0,
                        GeoColumnName = "Geometry"
                    };
                    featureClass.AddRenderIndex(info2);
                    info2.GeoColumnName = "Shape";
                    featureClass.AddRenderIndex(info2);
                    info2.GeoColumnName = "FootPrint";
                    featureClass.AddRenderIndex(info2);
                    featureClass.LockType = gviLockType.gviLockSharedSchema;
                    row.SetValue(row.FieldIndex("FeatureClassId"), featureClass.Guid.ToString());
                    row.SetValue(row.FieldIndex("DataSetName"), "DataSet_GEO_Actuality");
                    row.SetValue(row.FieldIndex("FcName"), featureClass.Name);
                    row.SetValue(row.FieldIndex("DataType"), DataLifeCyle.Actuality.ToString());
                    cursor.InsertRow(row);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                WaitForm.SetCaption("创建管线库中的设施要素类【" + fc.Name + "】失败!");
                return(false);
            }
            finally
            {
                if (cursor != null)
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(cursor);
                    cursor = null;
                }
                if (row != null)
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(row);
                    row = null;
                }
            }
        }
Ejemplo n.º 3
0
        private void createFeatureClassToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FeatureClassForm fcForm = new FeatureClassForm();

            if (fcForm.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            IDataSource     ds   = null;
            IFeatureDataSet dset = null;
            IFeatureClass   fc   = null;

            try
            {
                myTreeNode      node = (myTreeNode)selectNode.Parent;
                IConnectionInfo ci   = node.con;
                ds   = dsFactory.OpenDataSource(ci);
                dset = ds.OpenFeatureDataset(selectNode.Text);

                // 定义字段
                IFieldInfoCollection fields = new FieldInfoCollection();
                IFieldInfo           field  = new FieldInfo();
                field.Name      = "Name";
                field.FieldType = gviFieldType.gviFieldString;
                field.Length    = 255;
                fields.Add(field);

                field                       = new FieldInfo();
                field.Name                  = "Groupid";
                field.FieldType             = gviFieldType.gviFieldInt32;
                field.RegisteredRenderIndex = true;  //为支持逻辑图层树控制图层显示,需要注册渲染索引
                fields.Add(field);

                field             = new FieldInfo();
                field.Name        = "Geometry";
                field.FieldType   = gviFieldType.gviFieldGeometry;
                field.GeometryDef = new GeometryDef();
                field.GeometryDef.GeometryColumnType = gviGeometryColumnType.gviGeometryColumnModelPoint; //模型
                field.RegisteredRenderIndex          = true;                                              //为支持空间列在RenderControl中显示出来,必须注册渲染索引
                fields.Add(field);

                fc = dset.CreateFeatureClass(fcForm.FeatureClassName, fields);

                //创建空间索引
                IGridIndexInfo index = new GridIndexInfo();
                //index.Name = fc.Guid;
                index.L1            = 500;
                index.L2            = 2000;
                index.L3            = 10000;
                index.GeoColumnName = "Geometry";
                fc.AddSpatialIndex(index as IIndexInfo);

                IRenderIndexInfo rInfo = new RenderIndexInfo();
                rInfo.GeoColumnName = "Geometry";
                rInfo.L1            = 500;
                fc.AddRenderIndex(rInfo);

                // 往树上挂节点
                TreeNode fcNode = new TreeNode(fcForm.FeatureClassName, 1, 1);
                fcNode.ContextMenuStrip = this.contextMenuStrip3;
                selectNode.Nodes.Add(fcNode);
                TreeNode fieldNode = new TreeNode("oid", 1, 1);
                fieldNode.ContextMenuStrip = this.contextMenuStrip4;
                fcNode.Nodes.Add(fieldNode);
                fieldNode = new TreeNode("Name", 1, 1);
                fieldNode.ContextMenuStrip = this.contextMenuStrip4;
                fcNode.Nodes.Add(fieldNode);
                fieldNode = new TreeNode("Groupid", 1, 1);
                fieldNode.ContextMenuStrip = this.contextMenuStrip4;
                fcNode.Nodes.Add(fieldNode);
                fieldNode = new TreeNode("Geometry", 1, 1);
                fieldNode.ContextMenuStrip = this.contextMenuStrip4;
                fcNode.Nodes.Add(fieldNode);
            }
            catch (COMException ex)
            {
                System.Diagnostics.Trace.WriteLine(ex.Message);
            }
            finally
            {
                if (ds != null)
                {
                    //Marshal.ReleaseComObject(ds);
                    ds = null;
                }
                if (dset != null)
                {
                    //Marshal.ReleaseComObject(dset);
                    dset = null;
                }
                if (fc != null)
                {
                    //Marshal.ReleaseComObject(fc);
                    fc = null;
                }
            }
        }