总结:GIS数据的查找,插入,删除,更新

1、查找数据
1)、利用FeaturCursor进行空间查询
//利用构造的Envelope(矩形框),查找和Envelope相交的FeatureClass的要素集
//结果数据利用循环FeatureCursor.nextFeature获得
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);
IFeature feature = searchCursor.NextFeature();
int n = 0;
while (feature != null){
    n++;
    feature = baseCursor.NextFeature();
}

2)、利用FeatureCursor在选择集中进行查询
IFeatureSelection pFeatureSelectio = pFeatureLayer as IFeatureSelection; 
ICursor ppCursor;
pFeatureSelectio.SelectionSet.Search(null, false, out ppCursor);
IFeatureCursor pFeatureCursor = ppCursor as IFeatureCursor; 
IFeature pFeature = pFeatureCursor.NextFeature();

3)、利用FeatureCursor进行属性查询
IQueryFilter pQueryFilter = new QueryFilterClass();                           
pQueryFilter.WhereClause = "PROJECTCODE = '" + this.ProjectNumTextBox.Text.Trim() + "'";
IFeatureCursor pFeatureCursor = LineFeaClass.Search(pQueryFilter, false);                           
IFeature pFeatureIfExit = pFeatureCursor.NextFeature();

2、 插入数据
1)、利用Insert Cursors和featureBuffer
public static void LoadOnlyModeInsert(IFeatureClass featureClass, List<IGeometry> geometryList)
        {
            // Cast the feature class to the IFeatureClassLoad interface.
            IFeatureClassLoad featureClassLoad = (IFeatureClassLoad)featureClass;

            // Acquire an exclusive schema lock for the class.
            ISchemaLock schemaLock = (ISchemaLock)featureClass;
            try
            {
                schemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);
                // Enable load-only mode on the feature class.
                featureClassLoad.LoadOnlyMode = true;
                using (ComReleaser comReleaser = new ComReleaser())
                {
                    // Create the feature buffer.
                    IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
                    comReleaser.ManageLifetime(featureBuffer);

                    // Create an insert cursor.
                    IFeatureCursor insertCursor = featureClass.Insert(true);
                    comReleaser.ManageLifetime(insertCursor);

                    // All of the features to be created are classified as Primary Highways.
                    int typeFieldIndex = featureClass.FindField("TYPE");
                    featureBuffer.set_Value(typeFieldIndex, "Primary Highway");

                    foreach (IGeometry geometry in geometryList)
                    {
                        // Set the feature buffer's shape and insert it.
                        featureBuffer.Shape = geometry;
                        insertCursor.InsertFeature(featureBuffer);
                    }


                    // Flush the buffer to the geodatabase.
                    insertCursor.Flush();
                }
            }
            catch (Exception)
            {
                // Handle the failure in a way appropriate to the application.
            }
            finally
            {
                // Disable load-only mode on the feature class.
                featureClassLoad.LoadOnlyMode = false;


                // Demote the exclusive schema lock to a shared lock.
                schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
            }
        }

2)、直接进行数据插入(Feature.Store方法)

IFeature newLineFeature = LineFeaClass.CreateFeature();                           

newLineFeature.Shape = pFeature.Shape;
int ii = newLineFeature.Fields.FindField(AreaZonalName); 

 if (ii > 0)                           

{                               
newLineFeature.set_Value(ii, this.AnalysAreaComboBox.Text.Trim());
}
newLineFeature.Store();

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");
// 属性查询
IQueryFilter queryFilter = new QueryFilterClass();
queryFilter.WhereClause = "ZONING_S = 'U'";
//利用FeatureCursor进行数据更新
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();
}




 






  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值