/// <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);
        }
Example #3
0
        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);
        }
Example #4
0
 public double CaculateLandIndex(ESRI.ArcGIS.Geodatabase.IFeatureCursor pFeatureCursor, BaseData basedata)
 {
     throw new NotImplementedException();
 }
Example #5
0
 public List <double> CaculateClassIndex(ESRI.ArcGIS.Geodatabase.IFeatureCursor pFeatureCursor, BaseData basedata)
 {
     throw new NotImplementedException();
 }