Chinaunix首页 | 论坛 | 博客
  • 博客访问: 721330
  • 博文数量: 33
  • 博客积分: 10012
  • 博客等级: 上将
  • 技术积分: 1365
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-15 09:11
文章分类
文章存档

2009年(10)

2008年(23)

我的朋友

分类:

2008-09-01 17:14:16

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

1、         查找数据Search Cursors  //by yl    2008.7.7

 [C#]

//Create an envelope for the lower right portion of data

IEnvelope envelope = new EnvelopeClass();

envelope.PutCoords(508786, 681196, 513033, 684341);

 

// create a spatial query filter

ISpatialFilter spatialFilter = new SpatialFilterClass();

 

// specify the geometry to query with

spatialFilter.Geometry = envelope;

 

// specify what the geometry field is called on the Feature Class that we will querying against

String shpFld = featureClass.ShapeFieldName;

spatialFilter.GeometryField = shpFld;

 

// specify the type of spatial operation to use

spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;

// perform the query and use a cursor to hold the results

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    2008.7.7

//Create the Feature Buffer
IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
 
//Create insert feature cursor using buffering = true.
IFeatureCursor featureCursor = featureClass.Insert(true);
 
object featureOID;       
 
//All of the features to be created were installed by "B Pierce"
featureBuffer.set_Value(featureBuffer.Fields.FindField("InstBy"), "B Pierce");
for (int ic = 0; ic < 99; ic++) 
{
    
    //Set the featurebuffers's shape
    featureBuffer.Shape = geometry
    
    //Insert the feature into the feature cursor
    featureOID = featureCursor.InsertFeature(featureBuffer);
}
 
//All of the features to be created were installed by "K Johnston"
featureBuffer.set_Value(featureBuffer.Fields.FindField("InstBy"), "K Johnston");
for (int ic = 0; ic < 99; ic++)
{
    //Set the feature's shape
    featureBuffer.Shape = geometry
 
    //Insert the feature into the feature cursor
    featureOID = featureCursor.InsertFeature(featureBuffer);
}
 
featureCursor.Flush();

 

3、         数据删除 delete   //by yl    2008.7.7

IFeatureClass featureClass = featureWorkspace.OpenFeatureClass("Parcels");

 

IQueryFilter queryFilter = new QueryFilterClass();

queryFilter.WhereClause = "ZONING_S = 'R'";

 

// use IFeatureClass::Update to populate IFeatureCursor

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

}
阅读(2605) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~