zoukankan      html  css  js  c++  java
  • 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();
    }
    
  • 相关阅读:
    【剑指Offer】49把字符串转换成整数
    【剑指Offer】48不用加减乘除做加法
    【剑指Offer】47求1+2+3+...+n
    判断两个线段是否相交
    EM算法--原理
    理解KMP算法
    阿里校招笔试的一道逻辑题
    线性拟合之最小二乘方法和最小距离方法
    Oracle Net Manager 服务命名配置以及用PL/SQL 登陆数据库
    正则表达式总结
  • 原文地址:https://www.cnblogs.com/arxive/p/6114330.html
Copyright © 2011-2022 走看看