ArcGis面要素空间连接,取相交面积最大者 C#
核心代码:
#region JoinWork_IntersectMax
private void CreateNewFields_IntersectMax(IFeatureClass destFeatureClass,IFeatureClass sourceFeatureClass)
{
List<IField> fieldList = new List<IField>();
foreach (var item in this.chkField.CheckedItems)
{
IField field=sourceFeatureClass.Fields.get_Field( sourceFeatureClass.Fields.FindField(item.ToString()));
fieldList.Add(field);
}
string[] fieldArray = Utils.FieldUtils.GetFieldsNameArray(destFeatureClass);
foreach (IField field in fieldList)
{
if (!fieldArray.Contains(field.Name))
{
Utils.FieldUtils.CreateField(destFeatureClass, field.Type, field.Name, "Source_"+ field.Name, field.Length, field.Precision, field.Scale);
}
}
}
private void GetFieldIndex(IFeatureClass destFeatureClass, IFeatureClass sourceFeatureClass, out List<int> destCLSFieldIDList, out List<int> sourceCLSFieldIDList)
{
List<int> destIdList = new List<int>();
List<int> sourceIdList = new List<int>();
foreach (var item in this.chkField.CheckedItems)
{
destIdList.Add( destFeatureClass.Fields.FindField(item.ToString()));
sourceIdList.Add( sourceFeatureClass.Fields.FindField(item.ToString()));
}
destCLSFieldIDList = destIdList;
sourceCLSFieldIDList = sourceIdList;
} private void JoinWork_IntersectMax(IFeatureClass featureClassD, IFeatureClass featureClassS)
{
IFeatureCursor featureCursorD = null;
IFeatureCursor featureCursorD_S = null;
try
{
int index = ;
int count = featureClassD.FeatureCount(null);
Utils.UserArcMapProgressbar userArcMapProgressbar = new UserArcMapProgressbar(m_hookHelper);
userArcMapProgressbar.SetProgressbar(,count, ); //create Fields
CreateNewFields_IntersectMax(featureClassD, featureClassS);
//get link field id list
List<int> destCLSFieldIdList;
List<int> sourceCLSFieldIdList;
GetFieldIndex(featureClassD, featureClassS, out destCLSFieldIdList, out sourceCLSFieldIdList); Utils.UserWorkspace.FeatureWorkspace featureWorkspace = new Utils.UserWorkspace.FeatureWorkspace(featureClassD);
featureWorkspace.StartEdit(false); featureCursorD = featureClassD.Update(null, true);
IFeature featureD = featureCursorD.NextFeature();
while (featureD != null)
{
userArcMapProgressbar.Position = index;
userArcMapProgressbar.Message = $"空间连接_相交,取重叠面积最大者_已处理:{index}/{count}";
userArcMapProgressbar.Step();
ISpatialFilter spatialFilterD_S = Utils.FilterUtils.SpatialFilter(featureD.Shape, esriSpatialRelEnum.esriSpatialRelIntersects);
featureCursorD_S = featureClassS.Search(spatialFilterD_S, true);
IFeature featureS = featureCursorD_S.NextFeature();
Dictionary<int, double> feature_Area = new Dictionary<int, double>();
while (featureS != null)
{
ITopologicalOperator topologicalOperatorD_S = featureD.Shape as ITopologicalOperator;
IGeometry geometryD_S = topologicalOperatorD_S.Intersect(featureS.Shape, esriGeometryDimension.esriGeometry2Dimension);
if (!feature_Area.ContainsKey(featureS.OID))
feature_Area.Add(featureS.OID, (geometryD_S as IArea).Area);
featureS = featureCursorD_S.NextFeature();
}
if (feature_Area.Count > )
{
IFeature featureGoal;
var matches = feature_Area.Where(item => item.Value == feature_Area.Values.Max());
featureGoal = featureClassS.GetFeature(matches.First().Key);
for (int i = ; i < sourceCLSFieldIdList.Count; i++)
{
featureD.set_Value(destCLSFieldIdList[i], featureGoal.get_Value(sourceCLSFieldIdList[i]));
}
featureCursorD.UpdateFeature(featureD);
}
featureD = featureCursorD.NextFeature();
index++;
}
userArcMapProgressbar.Hide();
featureWorkspace.StopEdit(true);
}
catch (Exception exp)
{
ErrorForm err = new ErrorForm(exp.Message + "\r\n" + exp.StackTrace);
err.Show();
}
finally
{
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(featureCursorD);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(featureCursorD_S);
}
}
#endregion
ArcGis面要素空间连接,取相交面积最大者 C#的更多相关文章
- 简述ArcGIS的空间连接(Spatial Join)与字段映射(Field Map)操作
插个广告,制作ArcGIS的Tool工具学习下面的教程就对了:零基础学习Python制作ArcGIS自定义工具 牢骚一下 在使用ArcMap进行空间连接操作的时候,往往会有两种特殊需求,其一是连接重叠 ...
- 建议入门-用ArcMap进行空间查询与空间连接
1.打开arcmap并导入数据(如本图导入美国地图(usa.mxd)): 2.空间查询操作,在地图上的某片区域点击右键,得到下图,点击identify,此时我在阿拉斯加上面点击的 地图会闪现一下被查询 ...
- 将位图导入为ArcGIS面要素
本文根据笔者经验,介绍一种从位图图像导入ArcGIS称为要素的方法.这种方法适用于从现有出版物图片中获取地理信息的情况. 首先要说明的是,从位图导入要素是非常非常不精确的方式,如果有其它数据来源,那么 ...
- ArcGIS Engine中空间参照(地理坐标)相关方法总结转
ArcGIS Engine中空间参照(地理坐标)相关方法总结 来自:http://blog.csdn.net/u011170962/article/details/38776101 1.创建空间参考 ...
- ArcGIS Engine中空间参照(地理坐标)相关方法总结
转自原文 ArcGIS Engine中空间参照(地理坐标)相关方法总结 1.创建空间参考 /// <summary> /// 根据prj文件创建空间参考 /// </summary& ...
- hdu3060Area2(任意多边形相交面积)
链接 多边形的面积求解是通过选取一个点(通常为原点或者多边形的第一个点)和其它边组成的三角形的有向面积. 对于两个多边形的相交面积就可以通过把多边形分解为三角形,求出三角形的有向面积递加.三角形为凸多 ...
- I - Intersection HDU - 5120(圆环相交面积)
Matt is a big fan of logo design. Recently he falls in love with logo made up by rings. The followin ...
- Gym 100952J&&2015 HIAST Collegiate Programming Contest J. Polygons Intersection【计算几何求解两个凸多边形的相交面积板子题】
J. Polygons Intersection time limit per test:2 seconds memory limit per test:64 megabytes input:stan ...
- hdu 3264 09 宁波 现场 E - Open-air shopping malls 计算几何 二分 圆相交面积 难度:1
Description The city of M is a famous shopping city and its open-air shopping malls are extremely at ...
随机推荐
- php &引用符的注意情况
- Vue篇1
2019 Vue 面试题汇总(持续更新中...) 1. vue中的MVVM模式 即Model-View-ViewModel. Vue是以数据为驱动的,Vue自身将DOM和数据进行绑定,一旦创建绑定,D ...
- mysql 5.7.20 取得动态sql执行结果
drop procedure test; delimiter ;; CREATE procedure test() -- 取动态sql的值 begin ); ); set v_sqlcounts = ...
- CentOS7 部署单节点 FastDFS
准备 环境 系统:CentOS7.5 软件即依赖 libfatscommon FastDFS分离出的一些公用函数包 FastDFS fastdfs-nginx-module FastDFS和nginx ...
- Java面试宝典(2)Java基础部分
31.String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? 没有.因为Str ...
- C#5.0 异步编程 Async和Await--异步方法的规范和注意事项
要些异步方法要注意一下几点: 异步方法的返回值有三种: 1.没有任何返回值的void 2.返回一个Task任务的Task,可以获得该异步方法的执行状态 3.返回Task<T> 可以获得异步 ...
- 如何在mysql数据库中开启使用tab键补全功能
声明:数据库tab键补全的是表名,列名,数据库名,不是数据库中的命令,变量等 永久支持tab键补全[root@localhost ~]# vim /etc/my.cnf添加以下两行:[mysql]au ...
- redis的密码设置
若连接redis时报错:Redis (error) NOAUTH Authentication required.,通常是由于redis设了密码但连接时却未提供密码引起的. 设置密码: 编辑redis ...
- C中的lvalue和rvalue
该贴子第一条回答虽然浅尝辄止,但还是很有参考价值. https://www.quora.com/What-is-lvalue-and-rvalue-in-C IBM一个简单的说法是: "-通 ...
- Vue2.0源码思维导图-------------Vue 构造函数、原型、静态属性和方法
已经用vue有一段时间了,最近花一些时间去阅读Vue源码,看源码的同时便于理解,会用工具画下结构图. 今天把最近看到总结的结构图分享出来.希望可以帮助和其他同学一起进步.当然里边可能存在一些疏漏的,或 ...