4///5publicstaticESRI.ArcGIS.Geodatabase.IFieldsCreateFields(){6ESRI.ArcGIS.Geodatabase.IFieldfieldId=newESRI.ArcGIS.Geodatabase.FieldClass();7//todo(" />

统计"面"要素中"点"要素的个数.

系统 1795 0

步骤

  1,创建字段 IFields

      
         1
      
      
        ///
      
      
        <summary>
      
      
         2
      
      
        ///
      
      
         创建:"面"-"点数"的字段.


      
      
         3
      
      
        ///
      
      
        </summary>
      
      
         4
      
      
        ///
      
      
        <returns></returns>
      
      
         5
      
      
        public
      
      
        static
      
      
         ESRI.ArcGIS.Geodatabase.IFields CreateFields() {


      
      
         6
      
                   ESRI.ArcGIS.Geodatabase.IField fieldId = 
      
        new
      
      
         ESRI.ArcGIS.Geodatabase.FieldClass();


      
      
         7
      
      
        //
      
      
        todo(IFieldEdit2).


      
      
         8
      
      
        //
      
      
        面ID.
      
      
         9
      
                   ESRI.ArcGIS.Geodatabase.IFieldEdit2 fieldIdEdit =
      
         (ESRI.ArcGIS.Geodatabase.IFieldEdit2)fieldId;


      
      
        10
      
                   fieldIdEdit.Type_2 =
      
         ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeInteger;


      
      
        11
      
                   fieldIdEdit.Name_2 = 
      
        "
      
      
        面ID
      
      
        "
      
      
        ;


      
      
        12
      
      
        13
      
      
        //
      
      
        点数.
      
      
        14
      
                   ESRI.ArcGIS.Geodatabase.IField fieldCount = 
      
        new
      
      
         ESRI.ArcGIS.Geodatabase.FieldClass();


      
      
        15
      
                   ESRI.ArcGIS.Geodatabase.IFieldEdit2 fieldCountEdit =
      
         (ESRI.ArcGIS.Geodatabase.IFieldEdit2)fieldCount;


      
      
        16
      
                   fieldCountEdit.Type_2 =
      
         ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeInteger;


      
      
        17
      
                   fieldCountEdit.Name_2 = 
      
        "
      
      
        个数
      
      
        "
      
      
        ;


      
      
        18
      
      
        19
      
                   ESRI.ArcGIS.Geodatabase.IObjectClassDescription objClsDes = 
      
        new
      
      
         ESRI.ArcGIS.Geodatabase.ObjectClassDescriptionClass();


      
      
        20
      
                   ESRI.ArcGIS.Geodatabase.IFields fields =
      
         objClsDes.RequiredFields;


      
      
        21
      
                   ESRI.ArcGIS.Geodatabase.IFieldsEdit fieldsEdit =
      
         (ESRI.ArcGIS.Geodatabase.IFieldsEdit)fields;


      
      
        22
      
      
                    fieldsEdit.AddField(fieldId);


      
      
        23
      
      
                    fieldsEdit.AddField(fieldCount);


      
      
        24
      
      
        return
      
      
         fields;


      
      
        25
      
               }
    

  2,根据Fields穿件 ITable

      
         1
      
      
        ///
      
      
        <summary>
      
      
         2
      
      
        ///
      
      
         Creates a table with some default fields.


      
      
         3
      
      
        ///
      
      
        </summary>
      
      
         4
      
      
        ///
      
      
        <param name="workspace">
      
      
        An IWorkspace2 interface
      
      
        </param>
      
      
         5
      
      
        ///
      
      
        <param name="tableName">
      
      
        表名称,如: "owners"
      
      
        </param>
      
      
         6
      
      
        ///
      
      
        <param name="fields">
      
      
        An IFields interface or Nothing.
      
      
        </param>
      
      
         7
      
      
        ///
      
      
        <returns></returns>
      
      
         8
      
      
        public
      
      
        static
      
      
         ESRI.ArcGIS.Geodatabase.ITable CreateTable(ESRI.ArcGIS.Geodatabase.IWorkspace2 workspace, System.String tableName, ESRI.ArcGIS.Geodatabase.IFields fields) {


      
      
         9
      
      
        //
      
      
         create the behavior clasid for the featureclass
      
      
        10
      
                   ESRI.ArcGIS.esriSystem.UID uid = 
      
        new
      
      
         ESRI.ArcGIS.esriSystem.UIDClass();


      
      
        11
      
      
        //
      
      
         valid feature workspace not passed in as an argument to the method
      
      
        12
      
      
        if
      
       (workspace == 
      
        null
      
      ) 
      
        return
      
      
        null
      
      
        ;


      
      
        13
      
      
        14
      
                   ESRI.ArcGIS.Geodatabase.IFeatureWorkspace featureWorkspace =
      
         (ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)workspace;


      
      
        15
      
      
        16
      
      
        //
      
      
         table with that name already exists return that table 
      
      
        17
      
      
        if
      
      
         (workspace.get_NameExists(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTTable, tableName))


      
      
        18
      
      
        return
      
      
         featureWorkspace.OpenTable(tableName);


      
      
        19
      
      
        20
      
                   uid.Value = 
      
        "
      
      
        esriGeoDatabase.Object
      
      
        "
      
      
        ;


      
      
        21
      
      
        22
      
                   ESRI.ArcGIS.Geodatabase.IObjectClassDescription objClsDes = 
      
        new
      
      
         ESRI.ArcGIS.Geodatabase.ObjectClassDescriptionClass();


      
      
        23
      
      
        24
      
      
        //
      
      
         if a fields collection is not passed in then supply our own
      
      
        25
      
      
        if
      
       (fields == 
      
        null
      
      
        ) {


      
      
        26
      
      
        //
      
      
         create the fields using the required fields method
      
      
        27
      
                       fields =
      
         objClsDes.RequiredFields;


      
      
        28
      
                       ESRI.ArcGIS.Geodatabase.IFieldsEdit fieldsEdit = (ESRI.ArcGIS.Geodatabase.IFieldsEdit)fields; 
      
        //
      
      
         Explicit Cast
      
      
        29
      
      
        30
      
                       ESRI.ArcGIS.Geodatabase.IField field = 
      
        new
      
      
         ESRI.ArcGIS.Geodatabase.FieldClass();


      
      
        31
      
      
        32
      
      
        //
      
      
         create a user defined text field
      
      
        33
      
                       ESRI.ArcGIS.Geodatabase.IFieldEdit fieldEdit =
      
         (ESRI.ArcGIS.Geodatabase.IFieldEdit)field;


      
      
        34
      
      
        35
      
      
        //
      
      
         setup field properties
      
      
        36
      
                       fieldEdit.Name_2 = 
      
        "
      
      
        SampleField
      
      
        "
      
      
        ;


      
      
        37
      
                       fieldEdit.Type_2 =
      
         ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeString;


      
      
        38
      
                       fieldEdit.IsNullable_2 = 
      
        true
      
      
        ;


      
      
        39
      
                       fieldEdit.AliasName_2 = 
      
        "
      
      
        Sample Field Column
      
      
        "
      
      
        ;


      
      
        40
      
                       fieldEdit.DefaultValue_2 = 
      
        "
      
      
        test
      
      
        "
      
      
        ;


      
      
        41
      
                       fieldEdit.Editable_2 = 
      
        true
      
      
        ;


      
      
        42
      
                       fieldEdit.Length_2 = 
      
        100
      
      
        ;


      
      
        43
      
      
        44
      
      
        //
      
      
         add field to field collection
      
      
        45
      
      
                        fieldsEdit.AddField(field);


      
      
        46
      
                       fields =
      
         (ESRI.ArcGIS.Geodatabase.IFields)fieldsEdit;


      
      
        47
      
      
                    }


      
      
        48
      
      
        49
      
      
        //
      
      
         Use IFieldChecker to create a validated fields collection.
      
      
        50
      
                   ESRI.ArcGIS.Geodatabase.IFieldChecker fieldChecker = 
      
        new
      
      
         ESRI.ArcGIS.Geodatabase.FieldCheckerClass();


      
      
        51
      
                   ESRI.ArcGIS.Geodatabase.IEnumFieldError enumFieldError = 
      
        null
      
      
        ;


      
      
        52
      
                   ESRI.ArcGIS.Geodatabase.IFields validatedFields = 
      
        null
      
      
        ;


      
      
        53
      
                   fieldChecker.ValidateWorkspace =
      
         (ESRI.ArcGIS.Geodatabase.IWorkspace)workspace;


      
      
        54
      
                   fieldChecker.Validate(fields, 
      
        out
      
       enumFieldError, 
      
        out
      
      
         validatedFields);


      
      
        55
      
      
        56
      
      
        //
      
      
         The enumFieldError enumerator can be inspected at this point to determine 


      
      
        57
      
      
        //
      
      
         which fields were modified during validation.


      
      
        58
      
      
        59
      
      
        //
      
      
         create and return the table
      
      
        60
      
      
        return
      
       featureWorkspace.CreateTable(tableName, validatedFields, uid, 
      
        null
      
      , 
      
        ""
      
      
        );


      
      
        61
      
               }
    

  3,根据创建ITable的结构,统计"面"要素中"点"要素的个数

      
         1
      
      
        ///
      
      
        <summary>
      
      
         2
      
      
        ///
      
      
         查询"面"要素中的"点个数".


      
      
         3
      
      
        ///
      
      
        </summary>
      
      
         4
      
      
        ///
      
      
        <param name="polygonFeatureClass">
      
      
        "面"要素类.
      
      
        </param>
      
      
         5
      
      
        ///
      
      
        <param name="pointFeatureClass">
      
      
        "点"要素类.
      
      
        </param>
      
      
         6
      
      
        ///
      
      
        <param name="t">
      
      
        ITable表.
      
      
        </param>
      
      
         7
      
      
        ///
      
      
        <returns></returns>
      
      
         8
      
      
        public
      
      
        static
      
      
         ESRI.ArcGIS.Geodatabase.ITable PointInPolygonCount(ESRI.ArcGIS.Geodatabase.IFeatureClass polygonFeatureClass, ESRI.ArcGIS.Geodatabase.IFeatureClass pointFeatureClass, ESRI.ArcGIS.Geodatabase.ITable t) {


      
      
         9
      
      
        if
      
       (!(polygonFeatureClass.ShapeType ==
      
         ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon))


      
      
        10
      
      
        throw
      
      
        new
      
       InvalidCastException(
      
        "
      
      
        Statistics_Assist::PointInPolygonCount:polygonFeatureClass
      
      
        "
      
      
        );


      
      
        11
      
      
        if
      
       (!(pointFeatureClass.ShapeType ==
      
         ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint))


      
      
        12
      
      
        throw
      
      
        new
      
       InvalidCastException(
      
        "
      
      
        Statistics_Assist::PointInPolygonCount:pointFeatureClass
      
      
        "
      
      
        );


      
      
        13
      
      
        14
      
                   ESRI.ArcGIS.Geodatabase.ISpatialFilter polySpatialFilter = 
      
        new
      
      
         ESRI.ArcGIS.Geodatabase.SpatialFilterClass();


      
      
        15
      
                   polySpatialFilter.WhereClause = 
      
        "
      
      
        name like '%辽宁%'
      
      
        "
      
      ; 
      
        //
      
      
        指定名称的"面"要素.
      
      
        16
      
      
        17
      
                   ESRI.ArcGIS.Geodatabase.IFeatureCursor fCurPoly = polygonFeatureClass.Search(polySpatialFilter, 
      
        false
      
      
        );


      
      
        18
      
                   ESRI.ArcGIS.Geodatabase.IFeature fPoly = 
      
        null
      
      
        ;


      
      
        19
      
      
        while
      
       ((fPoly = fCurPoly.NextFeature()) != 
      
        null
      
      
        ) {


      
      
        20
      
                       ESRI.ArcGIS.Geometry.IGeometry polyGeo =
      
         fPoly.Shape;


      
      
        21
      
                       ESRI.ArcGIS.Geodatabase.ISpatialFilter pntSpatialFilter = 
      
        new
      
      
         ESRI.ArcGIS.Geodatabase.SpatialFilterClass();


      
      
        22
      
                       pntSpatialFilter.Geometry =
      
         polyGeo;


      
      
        23
      
      
        //
      
      
        包含在"面"要素中的"点".
      
      
        24
      
                       pntSpatialFilter.SpatialRel =
      
         ESRI.ArcGIS.Geodatabase.esriSpatialRelEnum.esriSpatialRelContains;


      
      
        25
      
                       ESRI.ArcGIS.Geodatabase.IFeatureCursor fCurPnt = pointFeatureClass.Search(pntSpatialFilter, 
      
        false
      
      
        );


      
      
        26
      
                       ESRI.ArcGIS.Geodatabase.IFeature fPnt = 
      
        null
      
      
        ;


      
      
        27
      
      
        int
      
       count = 
      
        0
      
      ;  
      
        ///
      
      
        /"点"要素的个数.
      
      
        28
      
      
        while
      
       ((fPnt = fCurPnt.NextFeature()) != 
      
        null
      
      
        )


      
      
        29
      
                           ++
      
        count;


      
      
        30
      
      
        31
      
      
        if
      
       (count != 
      
        0
      
      
        ) {


      
      
        32
      
                           ESRI.ArcGIS.Geodatabase.IRow r =
      
         t.CreateRow();


      
      
        33
      
                           r.set_Value(
      
        1
      
      , fPoly.get_Value(
      
        0
      
      )); 
      
        //
      
      
        注意的是,0下标是不可更改的(OID).
      
      
        34
      
                           r.set_Value(
      
        2
      
      
        , count);


      
      
        35
      
      
                            r.Store();


      
      
        36
      
      
                        }


      
      
        37
      
      
                    }


      
      
        38
      
      
        39
      
      
        return
      
      
         t;


      
      
        40
      
               }
    

  4,在住函数中调用

      
         1
      
      
        try
      
      
         {


      
      
         2
      
      
        //
      
      
        面.
      
      
         3
      
                       ESRI.ArcGIS.Carto.IFeatureLayer PolyFLyr = (ESRI.ArcGIS.Carto.IFeatureLayer)Engine.App_Code.Layer_Assist.GetLayerByName(mapCtrl_main.Map, 
      
        "
      
      
        省市
      
      
        "
      
      
        );


      
      
         4
      
      
         5
      
      
        //
      
      
        点.
      
      
         6
      
                       ESRI.ArcGIS.Carto.IFeatureLayer PntFLyr = (ESRI.ArcGIS.Carto.IFeatureLayer)Engine.App_Code.Layer_Assist.GetLayerByName(mapCtrl_main.Map, 
      
        "
      
      
        地市级以上居民地
      
      
        "
      
      
        );


      
      
         7
      
      
         8
      
      
        //
      
      
        表.
      
      
         9
      
      
        string
      
       tPath = 
      
        @"
      
      
        G:\doc\gis\1.400\data\feature
      
      
        "
      
      
        ;


      
      
        10
      
      
        11
      
      
        //
      
      
        1,根据"表路径"和"表名"创建.


      
      
        12
      
      
        //
      
      
        ESRI.ArcGIS.Geodatabase.ITable tOri = Engine.App_Code.AttributeTable_Assist.CreateTable(tPath, "tOri");


      
      
        13
      
      
        //
      
      
        2,根据"表路径"和"表名",以及"字段"创建.
      
      
        14
      
                       ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2 wsf = 
      
        new
      
      
         ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass();


      
      
        15
      
                       ESRI.ArcGIS.Geodatabase.IWorkspace2 ws = (ESRI.ArcGIS.Geodatabase.IWorkspace2)wsf.OpenFromFile(tPath, 
      
        0
      
      
        );


      
      
        16
      
                       ESRI.ArcGIS.Geodatabase.IFields fields =
      
         Engine.App_Code.AttributeTable_Assist.CreateFields();


      
      
        17
      
                       ESRI.ArcGIS.Geodatabase.ITable t = Engine.App_Code.AttributeTable_Assist.CreateTable(ws, 
      
        "
      
      
        fields_table_LiaoNing
      
      
        "
      
      
        , fields);


      
      
        18
      
      
        //
      
      
        查询面中的点.
      
      
        19
      
                       ESRI.ArcGIS.Geodatabase.ITable tRes =
      
         Engine.App_Code.Statistics_Assist.PointInPolygonCount(PolyFLyr.FeatureClass, PntFLyr.FeatureClass, t);


      
      
        20
      
                   }
    


可以通过"表路径"和"表名"创建ITable

      
         1
      
      
        ///
      
      
        <summary>
      
      
         2
      
      
        ///
      
      
         创建表.


      
      
         3
      
      
        ///
      
      
        </summary>
      
      
         4
      
      
        ///
      
      
        <param name="tablePath">
      
      
        即将创建表的路径,如:"G:\doc\gis\1.400\data\feature"
      
      
        </param>
      
      
         5
      
      
        ///
      
      
        <param name="tableName">
      
      
        表名,如:"owner"
      
      
        </param>
      
      
         6
      
      
        ///
      
      
        <returns></returns>
      
      
         7
      
      
        public
      
      
        static
      
       ESRI.ArcGIS.Geodatabase.ITable CreateTable(
      
        string
      
       tablePath, 
      
        string
      
      
         tableName) {


      
      
         8
      
      
        //
      
      
        需要注意的是必须为"IWorkspaceFactory2",不能为"IWorkspaceFactory".
      
      
         9
      
                   ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2 wsf = 
      
        new
      
      
         ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass();


      
      
        10
      
                   ESRI.ArcGIS.Geodatabase.IFeatureWorkspace fws = (ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)wsf.OpenFromFile(tablePath, 
      
        0
      
      
        );


      
      
        11
      
      
        12
      
                   ESRI.ArcGIS.esriSystem.UID uid = 
      
        new
      
      
         ESRI.ArcGIS.esriSystem.UIDClass();


      
      
        13
      
      
        14
      
                   ESRI.ArcGIS.Geodatabase.IField fieldId = 
      
        new
      
      
         ESRI.ArcGIS.Geodatabase.FieldClass();


      
      
        15
      
      
        //
      
      
        todo(IFieldEdit2).


      
      
        16
      
      
        //
      
      
        面ID.
      
      
        17
      
                   ESRI.ArcGIS.Geodatabase.IFieldEdit2 fieldIdEdit =
      
         (ESRI.ArcGIS.Geodatabase.IFieldEdit2)fieldId;


      
      
        18
      
                   fieldIdEdit.Type_2 =
      
         ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeInteger;


      
      
        19
      
                   fieldIdEdit.Name_2 = 
      
        "
      
      
        面ID
      
      
        "
      
      
        ;


      
      
        20
      
      
        21
      
      
        //
      
      
        点数.
      
      
        22
      
                   ESRI.ArcGIS.Geodatabase.IField fieldCount = 
      
        new
      
      
         ESRI.ArcGIS.Geodatabase.FieldClass();


      
      
        23
      
                   ESRI.ArcGIS.Geodatabase.IFieldEdit2 fieldCountEdit =
      
         (ESRI.ArcGIS.Geodatabase.IFieldEdit2)fieldCount;


      
      
        24
      
                   fieldCountEdit.Type_2 =
      
         ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeInteger;


      
      
        25
      
                   fieldCountEdit.Name_2 = 
      
        "
      
      
        个数
      
      
        "
      
      
        ;


      
      
        26
      
      
        27
      
                   ESRI.ArcGIS.Geodatabase.IObjectClassDescription objClsDes = 
      
        new
      
      
         ESRI.ArcGIS.Geodatabase.ObjectClassDescriptionClass();


      
      
        28
      
                   ESRI.ArcGIS.Geodatabase.IFields fields =
      
         objClsDes.RequiredFields;


      
      
        29
      
                   ESRI.ArcGIS.Geodatabase.IFieldsEdit fieldsEdit =
      
         (ESRI.ArcGIS.Geodatabase.IFieldsEdit)fields;


      
      
        30
      
      
                    fieldsEdit.AddField(fieldId);


      
      
        31
      
      
                    fieldsEdit.AddField(fieldCount);


      
      
        32
      
      
        33
      
      
        return
      
       fws.CreateTable(tableName, fields, uid, 
      
        null
      
      , 
      
        ""
      
      
        );


      
      
        34
      
               }
    

 

统计"面"要素中"点"要素的个数.


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论