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

来源:互联网 发布:滁州学院网络教学平台 编辑:程序博客网 时间:2024/05/22 05:33

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 0