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 yllandgis@126.com yanleigis@21cn.com2008.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 yllandgis@126.com yanleigis@21cn.com2008.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();
}

原文链接: https://www.cnblogs.com/arxive/p/6114330.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/244808

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午12:23
下一篇 2023年2月14日 上午12:24

相关推荐