统计面要素中点要素的个数.
步骤
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:决策函数的集合 决策函数的集合:F={f∣Y=f(X)}\mathcal{F}=\{f \mid Y=f(X)\}F={f∣Y=f(X)} ...
- python绘制散点图将整个区域分为10乘10个网格,并统计每个网格中点的个数
#绘制散点图将整个区域分为10乘10个网格,并统计每个网格中点的个数 from matplotlib import pyplot as plt import matplotlib as mpl imp ...
- 统计一个字符串中单词的个数
<程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p113 习题4 7.统计一个字符串中单词的个数.字符串中两个空格之间的非空格字符串可看做单词. #in ...
- php实现 统计输入中各种字符的个数
php实现 统计输入中各种字符的个数 一.总结 一句话总结:谋而后动,想清楚,会非常节约编写代码的时间. 1.对结果可能是0的变量,记得初始化? 4 $len=0; 5 $len=strlen($st ...
- python处理文本文件 提取英文单词看成一个整体_任意一个英文的纯文本文件,统计其中的单词出现的个数(shell python 两种语言实现)...
现有plain text titled test.txt,统计其中的单词出现的个数. test.txt的内容: i have have application someday oneday day d ...
- 统计寄存器AX中1 的个数
1 ;==================================== 2 ; 统计寄存器AX中1 的个数 3 DATAS segment 4 5 DATAS ends 6 7 CODES s ...
- Excel:Excel使用技巧经验总结之(利用Excel自带功能统计各个字段不同类别及其个数并进行图表可视化+非编程实现)图文教程之详细攻略
Excel:Excel使用技巧经验总结之(利用Excel自带功能统计各个字段不同类别及其个数并进行图表可视化+非编程实现)图文教程之详细攻略 目录 利用Excel自带筛选功能统计各个字段不同类别及其个 ...
- Linux学习:读取目录内容 (目录名和类型)和递归统计指定目录下普通文件个数练习
一.读取目录内容 #include <stdio.h> #include <unistd.h> #include <dirent.h> #include <s ...
- 计算机统计字符数,如何在Word中统计相同字符(文字)出现的个数 -电脑资料
大家都知道,在Word中我们可以统计一篇文章字符的总个数! 但是,却不知道是啥原因,不知道是Word觉得此功能太简单了,还是忽略了这一点;却没有统计相同字符个数的功能! 但这未提供的功能却广为大众所需 ...
最新文章
- dsu on tree 模板题目(CF600E Lomsat gelral)
- 怎么解决tomcat占用8080端口问题图文教程
- [日志]保证让你一天不困的方法
- python怎么安装第三方库-怎样安装Python的第三方库
- 304 Not Modified
- 5、Linux系统的目录结构
- 硬件安全系列 逻辑电路基础知识介绍(二)
- vue配置git的子模块
- 标识为普通SQL语法
- Android中文翻译组 - 简介
- mac 版ideal 查找类_4款mac窗口切换工具 提高你的工作效率
- ubuntu shuangxitong
- layer 延时设置
- mysql url认证_Springboot+shiro基于url身份认证和授权认证
- stl之string类用法详细总结
- 怎么修改HTML中样式的项目序号,给Ol的序号设置样式,怎么做?
- Linux学习笔记——网络组成
- List集合排序及去重
- 遇到一个很冷门的bug(java.lang.NoSuchMethodException问题原因及解决办法)
- centos7上装qt5.15.2
热门文章
- ajax post请求怎么传参_如何在$ ajax POST中传递参数?
- cisco 模拟器安装及交换机的基本配置实验心得_看完这份1113页的TCP/IP协议+路由与交换机,成功上岸字节跳动...
- 银行考试计算机重点知识,银行计算机考试试题
- linux列出组_如何列出Linux中的所有组?
- java设计模式工厂模式_Java中的工厂设计模式
- java8foreach_Java forEach – Java 8 forEach
- java随机数_Java随机
- Java LocalTime
- primefaces_Primefaces主题
- android 崩溃捕获_Android从相机和图库捕获图像