核心代码:

         #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#的更多相关文章

  1. 简述ArcGIS的空间连接(Spatial Join)与字段映射(Field Map)操作

    插个广告,制作ArcGIS的Tool工具学习下面的教程就对了:零基础学习Python制作ArcGIS自定义工具 牢骚一下 在使用ArcMap进行空间连接操作的时候,往往会有两种特殊需求,其一是连接重叠 ...

  2. 建议入门-用ArcMap进行空间查询与空间连接

    1.打开arcmap并导入数据(如本图导入美国地图(usa.mxd)): 2.空间查询操作,在地图上的某片区域点击右键,得到下图,点击identify,此时我在阿拉斯加上面点击的 地图会闪现一下被查询 ...

  3. 将位图导入为ArcGIS面要素

    本文根据笔者经验,介绍一种从位图图像导入ArcGIS称为要素的方法.这种方法适用于从现有出版物图片中获取地理信息的情况. 首先要说明的是,从位图导入要素是非常非常不精确的方式,如果有其它数据来源,那么 ...

  4. ArcGIS Engine中空间参照(地理坐标)相关方法总结转

    ArcGIS Engine中空间参照(地理坐标)相关方法总结 来自:http://blog.csdn.net/u011170962/article/details/38776101 1.创建空间参考 ...

  5. ArcGIS Engine中空间参照(地理坐标)相关方法总结

    转自原文 ArcGIS Engine中空间参照(地理坐标)相关方法总结 1.创建空间参考 /// <summary> /// 根据prj文件创建空间参考 /// </summary& ...

  6. hdu3060Area2(任意多边形相交面积)

    链接 多边形的面积求解是通过选取一个点(通常为原点或者多边形的第一个点)和其它边组成的三角形的有向面积. 对于两个多边形的相交面积就可以通过把多边形分解为三角形,求出三角形的有向面积递加.三角形为凸多 ...

  7. 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 ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. 2.1 Nginx服务器安装

    2.1 Nginx目录和文件介绍 windows下解压nginx后的文件介绍: conf:存放Nginx服务器的配置文件,包含Nginx服务器的基本配置文件和对部分特性的配置文件,正确配置此文件可以保 ...

  2. linux Jenkins搭建

    安装jdk 下载jdk   解压 jdk1.8 vim /etc/profile export JAVA_HOME=/usr/local/java/jdk1.8.0_111export CLASSPA ...

  3. Mysq sql语句教程

    mysql管理命令  show  databases;  显示服务器上当前所有的数据库  use  数据库名称;  进入指定的数据库  show  tables;  显示当前数据库中所有的数据表  d ...

  4. 多线程实现奇偶统计v1 - 暴力版

    #include <stdio.h> #include <stdlib.h> #include <time.h> #include "pthread.h& ...

  5. Java中的session详解

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  6. 2019南昌邀请赛预选赛 I. Max answer (前缀和+单调栈)

    题目:https://nanti.jisuanke.com/t/38228 这题题解参考网上大佬的. 程序的L[i],R[i]代表a[i]这个点的值在区间 [L[i],R[i]] 中最小的并且能拓展到 ...

  7. HDU 6534 莫队+ 树状数组

    题意及思路:https://blog.csdn.net/tianyizhicheng/article/details/90369491 代码: #include <bits/stdc++.h&g ...

  8. koa-artTemplate 的使用

    1.父页面 <html> <head> <meta charset="UTF-8"> <title>我的音乐</title&g ...

  9. webpack devServer配置项的坑

    本文所用webpack版本为4+,阅读本章的同学请注意区分. webpack默认不需要配置文件 但是你仍可在项目的node_module目录同级目录建立一个webpack.config.js文件进行配 ...

  10. 56. Map(双列集合)

    在生活中有些数据是以映射关系存在的,也就是成对出现的,比如:老公  老婆(key-->value) 双列集合:-------------------| Map    如果是实现了Map接口的集合 ...