arcengine,深入理解游标Cursors,实现数据的快速查找,插入,删除,更新

风过无痕 原文  arcengine,深入理解游标Cursors,实现数据的快速查找,插入,删除,更新

 

深入理解游标Cursors,实现数据的快速查找,插入,删除,更新

1、查找数据Search Cursors

//by yl landgis@126.com yanleigis@21cn.com 2008.7.7

IEnvelope envelope = new EnvelopeClass();
envelope.PutCoords(508786, 681196, 513033, 684341);
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);//只查询,true快一些
IFeature feature = searchCursor.NextFeature();
int n = 0;
while (feature != null){
    n++;
    feature = baseCursor.NextFeature();
}

 

2、插入数据Insert Cursors—目前数据插入最快的方法   

//by yl landgis@126.com yanleigis@21cn.com 2008.7.7

IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
IFeatureCursor featureCursor = featureClass.Insert(true);
object featureOID;         
featureBuffer.set_Value(featureBuffer.Fields.FindField("InstBy"), "B Pierce");

for (int ic = 0; ic < 99; ic++) {      
   featureBuffer.Shape = geometry
   featureOID = featureCursor.InsertFeature(featureBuffer);
}

featureBuffer.set_Value(featureBuffer.Fields.FindField("InstBy"), "K Johnston");

for (int ic = 0; ic < 99; ic++)
{
     featureBuffer.Shape = geometry
     featureOID = featureCursor.InsertFeature(featureBuffer);
}

featureCursor.Flush();

3、 数据删除 delete   

//by yl landgis@126.com yanleigis@21cn.com 2008.7.7

IFeatureClass featureClass = featureWorkspace.OpenFeatureClass("Parcels");
 
IQueryFilter queryFilter = new QueryFilterClass();
queryFilter.WhereClause = "ZONING_S = 'R'";
IFeatureCursor updateCursor = featureClass.Update(queryFilter, false);

IFeature feature = updateCursor.NextFeature();
 
int m = 0;
while (feature != null)
{
    m++;
    updateCursor.DeleteFeature(feature);
    feature = updateCursor.NextFeature();
}

 

4、数据更新 update   

//by yl landgis@126.com yanleigis@21cn.com 2008.7.7
IFeatureClass featureClass = featureWorkspace.OpenFeatureClass("Parcels");

// restrict the number of features to be updated.
IQueryFilter queryFilter = new QueryFilterClass();
queryFilter.WhereClause = "ZONING_S = 'U'";

 
// use IFeatureClass::Update to populate IFeatureCursor
IFeatureCursor updateCursor = featureClass.Update(queryFilter, false);
int fieldindex = featureClass.FindField("ZONING_S");
IFeature feature = updateCursor.NextFeature();

int m = 0;
while (feature != null)
{
    m++;
    feature.set_Value(fieldindex, "X");
    updateCursor.UpdateFeature(feature);
    feature = updateCursor.NextFeature();
}