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

1、 查找数据Search Cursors 
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—目前数据插入最快的方法  

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

}

  更多GIS开发相关问题请加入 GIS开发学习QQ交流群 192251607 共同交流学习!

猜你喜欢

转载自www.cnblogs.com/hl137510705/p/9266663.html