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(); } }
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; } } }