1)、利用FeaturCursor进行空间查询

//空间查询
ISpatialFilter spatialFilter = new SpatialFilterClass();
spatialFilter.Geometry = envelope;//指定几何体
String shpFld = featureClass.ShapeFieldName;
spatialFilter.GeometryField = shpFld;
spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;//相交
IQueryFilter queryFilter = new QueryFilterClass();
queryFilter = (IQueryFilter)spatialFilter;
IFeatureCursor searchCursor = featureClass.Search(queryFilter, true);
IFeature feature = searchCursor.NextFeature();

int n = 0;
while (feature != null){
    n++;
    feature = baseCursor.NextFeature();
}

 

2)、利用FeatureCursor在选择集中进行查询

IFeatureSelection pFeatureSelectio = pFeatureLayer as IFeatureSelection; 
ICursor ppCursor;
pFeatureSelectio.SelectionSet.Search(null, false, out ppCursor);
IFeatureCursor pFeatureCursor = ppCursor as IFeatureCursor; 
IFeature pFeature = pFeatureCursor.NextFeature();

3)、利用FeatureCursor进行属性查询

IQueryFilter pQueryFilter = new QueryFilterClass();                           
pQueryFilter.WhereClause = "PROJECTCODE = '" + this.ProjectNumTextBox.Text.Trim() + "'";
IFeatureCursor pFeatureCursor = LineFeaClass.Search(pQueryFilter, false);                           
IFeature pFeatureIfExit = pFeatureCursor.NextFeature();

用Environment.TickCount进行代码执行时间测试,结果发现4)读取整个表的时间为4984ms,而 3)读取同一个属性给的时间仅为32 ms,3)的执行效率是法一的156倍!!!

完整测试代码如下:

     IFeatureLayer pLayer = Utilities.GetLayerByName((string)cmbRegLayers.SelectedItem, m_mapControl) as IFeatureLayer;  
     IFeatureCursor FCursor = pLayer.FeatureClass.Search(new QueryFilterClass(), false);  
     IFeature feature = FCursor.NextFeature();  
      
     int t = Environment.TickCount;  
      
     object clsFldValue=null;  
     for (int i = 0; i < pLayer.FeatureClass.FeatureCount(null); i++)  
     {  
         clsFldValue = feature.get_Value(3);  
         feature = FCursor.NextFeature();  
     }  
      
     t = Environment.TickCount - t;  
     MessageBox.Show(t.ToString());  
      
     ITable pTable = pLayer.FeatureClass as ITable;  
      
     t = Environment.TickCount;  
      
     for (int i = 0; i < pTable.RowCount(null); i++)  
         clsFldValue = pTable.GetRow(i).get_Value(3);  
     t = Environment.TickCount - t;  
     MessageBox.Show(t.ToString());  
View Code

相关文章:

  • 2021-12-22
  • 2021-08-07
  • 2022-12-23
  • 2021-09-27
  • 2022-02-08
  • 2021-06-02
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-12-10
  • 2021-05-19
  • 2021-12-26
  • 2022-12-23
相关资源
相似解决方案