步骤

  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         }

转载于:https://www.cnblogs.com/listened/p/4081172.html

统计面要素中点要素的个数.相关推荐

  1. 统计学习方法的三要素

    统计学习方法的三要素 方法=模型+策略+算法 模型 定义1:决策函数的集合 决策函数的集合:F={f∣Y=f(X)}\mathcal{F}=\{f \mid Y=f(X)\}F={f∣Y=f(X)}​ ...

  2. python绘制散点图将整个区域分为10乘10个网格,并统计每个网格中点的个数

    #绘制散点图将整个区域分为10乘10个网格,并统计每个网格中点的个数 from matplotlib import pyplot as plt import matplotlib as mpl imp ...

  3. 统计一个字符串中单词的个数

    <程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p113 习题4 7.统计一个字符串中单词的个数.字符串中两个空格之间的非空格字符串可看做单词. #in ...

  4. php实现 统计输入中各种字符的个数

    php实现 统计输入中各种字符的个数 一.总结 一句话总结:谋而后动,想清楚,会非常节约编写代码的时间. 1.对结果可能是0的变量,记得初始化? 4 $len=0; 5 $len=strlen($st ...

  5. python处理文本文件 提取英文单词看成一个整体_任意一个英文的纯文本文件,统计其中的单词出现的个数(shell python 两种语言实现)...

    现有plain text titled test.txt,统计其中的单词出现的个数. test.txt的内容: i have have application someday oneday day d ...

  6. 统计寄存器AX中1 的个数

    1 ;==================================== 2 ; 统计寄存器AX中1 的个数 3 DATAS segment 4 5 DATAS ends 6 7 CODES s ...

  7. Excel:Excel使用技巧经验总结之(利用Excel自带功能统计各个字段不同类别及其个数并进行图表可视化+非编程实现)图文教程之详细攻略

    Excel:Excel使用技巧经验总结之(利用Excel自带功能统计各个字段不同类别及其个数并进行图表可视化+非编程实现)图文教程之详细攻略 目录 利用Excel自带筛选功能统计各个字段不同类别及其个 ...

  8. Linux学习:读取目录内容 (目录名和类型)和递归统计指定目录下普通文件个数练习

    一.读取目录内容 #include <stdio.h> #include <unistd.h> #include <dirent.h> #include <s ...

  9. 计算机统计字符数,如何在Word中统计相同字符(文字)出现的个数 -电脑资料

    大家都知道,在Word中我们可以统计一篇文章字符的总个数! 但是,却不知道是啥原因,不知道是Word觉得此功能太简单了,还是忽略了这一点;却没有统计相同字符个数的功能! 但这未提供的功能却广为大众所需 ...

最新文章

  1. dsu on tree 模板题目(CF600E Lomsat gelral)
  2. 怎么解决tomcat占用8080端口问题图文教程
  3. [日志]保证让你一天不困的方法
  4. python怎么安装第三方库-怎样安装Python的第三方库
  5. 304 Not Modified
  6. 5、Linux系统的目录结构
  7. 硬件安全系列 逻辑电路基础知识介绍(二)
  8. vue配置git的子模块
  9. 标识为普通SQL语法
  10. Android中文翻译组 - 简介
  11. mac 版ideal 查找类_4款mac窗口切换工具 提高你的工作效率
  12. ubuntu shuangxitong
  13. layer 延时设置
  14. mysql url认证_Springboot+shiro基于url身份认证和授权认证
  15. stl之string类用法详细总结
  16. 怎么修改HTML中样式的项目序号,给Ol的序号设置样式,怎么做?
  17. Linux学习笔记——网络组成
  18. List集合排序及去重
  19. 遇到一个很冷门的bug(java.lang.NoSuchMethodException问题原因及解决办法)
  20. centos7上装qt5.15.2

热门文章

  1. ajax post请求怎么传参_如何在$ ajax POST中传递参数?
  2. cisco 模拟器安装及交换机的基本配置实验心得_看完这份1113页的TCP/IP协议+路由与交换机,成功上岸字节跳动...
  3. 银行考试计算机重点知识,银行计算机考试试题
  4. linux列出组_如何列出Linux中的所有组?
  5. java设计模式工厂模式_Java中的工厂设计模式
  6. java8foreach_Java forEach – Java 8 forEach
  7. java随机数_Java随机
  8. Java LocalTime
  9. primefaces_Primefaces主题
  10. android 崩溃捕获_Android从相机和图库捕获图像