/// <summary> /// CreateFeatures - make ESRI features based on text /// </summary> /// <param name="layername">layer to add data to</param> /// <returns></returns> internal bool CreateFeatures(string layername) { bool result = true; try { ESRI.ArcGIS.Carto.IFeatureLayer2 featlayer = code.Layers.getFeatureLayerByName("MyLines"); if (featlayer != null) { ESRI.ArcGIS.Geodatabase.IFeatureBuffer newFeatBuff = featlayer.FeatureClass.CreateFeatureBuffer(); ESRI.ArcGIS.Geodatabase.IFeatureCursor featureCursor = featlayer.FeatureClass.Insert(true); foreach (TextGeomItem item in this.TextGeometries) { // // ID = unique id for gis line feature newFeatBuff.set_Value(featlayer.FeatureClass.FindField("LineID"), Guid.NewGuid().ToString("B")); newFeatBuff.set_Value(featlayer.FeatureClass.FindField("LETTER"), item.Text); newFeatBuff.Shape = item.Geometry; featureCursor.InsertFeature(newFeatBuff); } featureCursor.Flush(); System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor); } return(result); } catch (System.Exception ex) { return(false); } }
/// <summary> /// 合并要素图形范围 /// </summary> /// <param name="pFeatureclass">要合并的要素类</param> /// <param name="filter">过滤条件</param> /// <returns></returns> public static IGeometry UnionFeature(ESRI.ArcGIS.Geodatabase.IFeatureClass pFeatureclass, string filter) { IGeometry geo = null; using (ComReleaser comReleaser = new ComReleaser()) { List <IGeometry> geoLst = new List <IGeometry>(); ESRI.ArcGIS.Geodatabase.IGeoDataset geoDataset = pFeatureclass as ESRI.ArcGIS.Geodatabase.IGeoDataset; ESRI.ArcGIS.Geodatabase.IFeatureCursor featureCursor = pFeatureclass.Search(new ESRI.ArcGIS.Geodatabase.QueryFilter { WhereClause = filter }, false); ESRI.ArcGIS.Geodatabase.IFeature pFeature = featureCursor.NextFeature(); while (pFeature != null) { geoLst.Add(pFeature.ShapeCopy); if (geoLst.Count == 50) { geo = UnionGeometry(geoLst, geoDataset.SpatialReference); geoLst.Clear(); geoLst.Add(geo); } comReleaser.ManageLifetime(pFeature); pFeature = featureCursor.NextFeature(); } if (geoLst.Count == 1) { geo = geoLst[0]; } if (geoLst.Count > 1) { geo = UnionGeometry(geoLst, geoDataset.SpatialReference); } IZAware ipZAware = geo as IZAware; if (ipZAware.ZAware == true) { ipZAware.ZAware = false; } comReleaser.ManageLifetime(featureCursor); System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor); } return(geo); }
private DataTable SpatialSearch(ESRI.ArcGIS.Geodatabase.IFeatureClass pFtClass, string pWhereClause, IGeometry pGeometry, ESRI.ArcGIS.Geodatabase.esriSpatialRelEnum pSpRel) { //定义空间查询过滤器对象 ESRI.ArcGIS.Geodatabase.ISpatialFilter pSpatialFilter = new ESRI.ArcGIS.Geodatabase.SpatialFilterClass(); //设置sql查询语句 pSpatialFilter.WhereClause = pWhereClause; //设置查询范围 pSpatialFilter.Geometry = pGeometry; //给定范围与查询对象的空间关系 pSpatialFilter.SpatialRel = pSpRel; axMapControl1.Map.ClearSelection(); //清除上次查询结果 //查询结果以游标的形式返回(下面与属性查询一样) ESRI.ArcGIS.Geodatabase.IFeatureCursor pFtCursor = pFtClass.Search(pSpatialFilter, false); ESRI.ArcGIS.Geodatabase.IFeature pFt = pFtCursor.NextFeature(); DataTable DT = new DataTable(); for (int i = 0; i < pFtCursor.Fields.FieldCount; i++) { DataColumn dc = new DataColumn(pFtCursor.Fields.get_Field(i).Name, System.Type.GetType(ParseFieldType((pFtCursor.Fields.get_Field(i).Type)))); DT.Columns.Add(dc); } while (pFt != null) { axMapControl1.Map.SelectFeature(pLayer, pFt); //选择要素 DataRow dr = DT.NewRow(); for (int i = 0; i < pFt.Fields.FieldCount; i++) { dr[i] = pFt.get_Value(i); } DT.Rows.Add(dr); pFt = pFtCursor.NextFeature(); } return(DT); }
public double CaculateLandIndex(ESRI.ArcGIS.Geodatabase.IFeatureCursor pFeatureCursor, BaseData basedata) { throw new NotImplementedException(); }
public List <double> CaculateClassIndex(ESRI.ArcGIS.Geodatabase.IFeatureCursor pFeatureCursor, BaseData basedata) { throw new NotImplementedException(); }