ArcGIS 面要素缝隙孔洞检查代码 C# GP
- public class PolygonGapChecker : CheckProgressMessageSender, IChecker, ICheckProgressChangeEvent
- {
- private IFeatureLayer featureLayer;
- /// <summary>
- /// 待检查的面要素类图层
- /// </summary>
- public IFeatureLayer FeatureLayer
- {
- set
- {
- if (value != null)
- {
- if (value.FeatureClass.ShapeType == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon)
- featureLayer = value;
- else
- throw new ArgumentException("要素类不是期望的类型,应是面要素类。");
- }
- else
- throw new ArgumentException("要素类对象传入的是null");
- }
- }
- private int featureCount = -;
- /// <summary>
- /// 受检要素类的要素个数
- /// </summary>
- public int FeatureCount { get { return featureCount; } }
- //private double distance = 0.2;
- /// <summary>
- /// 距离值,一个大于零的值
- /// </summary>
- public double Distance { set { } }
- private double tolerance = 0.001;
- /// <summary>
- /// 容差值,一个大于零的值
- /// </summary>
- public double Tolerance { set {
- if (value <= )
- throw new ArgumentException("容差应是一个大于0的小数。");
- else
- tolerance = value;
- }
- }
- //private double angle = 10.0;
- /// <summary>
- /// 角度值,一个大于零的值
- /// </summary>
- public double Angle { set { } }
- private string workspacePath = string.Empty;
- /// <summary>
- /// FGDB或文件夹的路径
- /// </summary>
- public string WorkspacePath
- {
- set
- {
- if (System.IO.Directory.Exists(value))
- workspacePath = value;
- else
- throw new ArgumentException("给定FGDB或文件夹的路径不存在!");
- }
- }
- private readonly CheckerType checkerType = CheckerType.面缝隙或孔洞;
- /// <summary>
- /// 检查类型
- /// </summary>
- public CheckerType CheckerType { get { return checkerType; } }
- /// <summary>
- /// 检查方法
- /// </summary>
- /// <returns>检查结果要素类</returns>
- public IFeatureClass Check()
- {
- IFeatureClass featureClass_cover;
- //IFeatureClass featureClass_erase;
- //IFeatureClass featureClass_erase_explode;
- IFeatureClass featureClass_result;
- IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactory();
- string featureClass_cover_Name=featureLayer.Name+"_cover.shp";
- string featureClass_erase_Name = $"{workspacePath}\\{featureLayer.Name}_erase.shp";
- string featureClass_result_Name = $"{workspacePath}\\{featureLayer.Name}_gap.shp";
- if (workspacePath.Split('.').Last().ToLower() == "gdb")
- {
- //确定要素类的名称,如workspace是文件地理数据库那么要素类名字最后没有有.shp。
- featureClass_cover_Name= featureClass_cover_Name.Replace(".shp", "");
- featureClass_erase_Name=featureClass_erase_Name.Replace(".shp", "");
- featureClass_result_Name=featureClass_result_Name.Replace(".shp", "");
- //若是文件地理数据库,应实例化FileGDBWorkspaceFactoryClass对象。
- workspaceFactory = new FileGDBWorkspaceFactoryClass();
- }
- IFeatureWorkspace featureWorkspace = workspaceFactory.OpenFromFile(workspacePath, ) as IFeatureWorkspace;
- #region 创建Cover要素类,用于被擦除
- FeatureClassCreator featureClassCreator = new FeatureClassCreator(featureLayer, featureClass_cover_Name, esriGeometryType.esriGeometryPolygon, workspacePath);
- featureClass_cover = featureClassCreator.Create();
- OnCheckProgresChange(checkProgressChangeEventHandler, ">>>成功创建Cover。");
- IPolygon polygon_cover = new PolygonClass();
- IPoint pointUpperLeft = new PointClass { X = (featureLayer.FeatureClass as IGeoDataset).Extent.UpperLeft.X - , Y = (featureLayer.FeatureClass as IGeoDataset).Extent.UpperLeft.Y- };
- IPoint pointUpperRight = new PointClass { X = (featureLayer.FeatureClass as IGeoDataset).Extent.UpperRight.X + , Y = (featureLayer.FeatureClass as IGeoDataset).Extent.UpperRight.Y- };
- IPoint pointLowerRight = new PointClass { X = (featureLayer.FeatureClass as IGeoDataset).Extent.LowerRight.X + , Y = (featureLayer.FeatureClass as IGeoDataset).Extent.LowerRight.Y+ };
- IPoint pointLowerLeft = new PointClass { X = (featureLayer.FeatureClass as IGeoDataset).Extent.LowerLeft.X - , Y = (featureLayer.FeatureClass as IGeoDataset).Extent.LowerLeft.Y+ };
- IPointCollection pointCollection_cover = polygon_cover as IPointCollection;
- pointCollection_cover.AddPoint(pointUpperLeft);
- pointCollection_cover.AddPoint(pointUpperRight);
- pointCollection_cover.AddPoint(pointLowerRight);
- pointCollection_cover.AddPoint(pointLowerLeft);
- pointCollection_cover.AddPoint(pointUpperLeft);
- IFeature feature_cover= featureClass_cover.CreateFeature();
- feature_cover.Shape = polygon_cover;
- feature_cover.Store();
- OnCheckProgresChange(checkProgressChangeEventHandler, ">>>成功创建Cover要素,准备执行Erase。");
- #endregion
- Geoprocessor.Geoprocessor gp = new Geoprocessor.Geoprocessor
- {
- AddOutputsToMap = false,
- OverwriteOutput = true
- };
- Erase erase = new Erase
- {
- in_features = $"{workspacePath}\\{featureClass_cover_Name}",
- erase_features = featureLayer,
- out_feature_class = featureClass_erase_Name,
- cluster_tolerance = this.tolerance,
- };
- gp.Execute(erase, null);
- OnCheckProgresChange(checkProgressChangeEventHandler, ">>>成功创建Erase,准备执行Explode。");
- MultipartToSinglepart multipartToSinglepart = new MultipartToSinglepart
- {
- in_features = featureClass_erase_Name,
- out_feature_class = featureClass_result_Name
- };
- gp.Execute(multipartToSinglepart, null);
- featureClass_result = featureWorkspace.OpenFeatureClass(featureClass_result_Name.Replace($"{workspacePath}\\", ""));
- CheckAuxiliaryHelper.SpatialSearchAndDeleteFeatures(featureClass_result, pointUpperLeft, esriSpatialRelEnum.esriSpatialRelIntersects);
- featureClass_result.DeleteField(featureClass_result.Fields.Field[featureClass_result.FindField("ORIG_FID")]);
- CheckAuxiliaryHelper.DeleteFeatureClass(featureClass_cover_Name, featureWorkspace);
- CheckAuxiliaryHelper.DeleteFeatureClass(featureClass_erase_Name, featureWorkspace);
- return featureClass_result;
- }
- private CheckProgressChangeEventHandler checkProgressChangeEventHandler;
- /// <summary>
- /// 进度改变事件
- /// </summary>
- public event CheckProgressChangeEventHandler CheckProgressChangeEvent
- {
- add
- {
- this.checkProgressChangeEventHandler += value;
- }
- remove
- {
- this.checkProgressChangeEventHandler-=value;
- }
- }
- }
ArcGIS 面要素缝隙孔洞检查代码 C# GP的更多相关文章
- ESLint 检查代码质量
利用 ESLint 检查代码质量 其实很早的时候就想尝试 ESLint 了,但是很多次都是玩了一下就觉得这东西巨复杂,一执行检查就是满屏的error,简直是不堪入目,遂放弃.直到某天终于下定决心深入看 ...
- C#编译器怎么检查代码是否会执行
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:C#编译器怎么检查代码是否会执行.
- 利用ESLint检查代码质量
1. ESLint ESLint 是一个插件化的 javascript 代码检测工具,它可以用于检查常见的 JavaScript 代码错误,也可以进行代码风格检查,这样我们就可以根据自己的喜好指定一套 ...
- 将位图导入为ArcGIS面要素
本文根据笔者经验,介绍一种从位图图像导入ArcGIS称为要素的方法.这种方法适用于从现有出版物图片中获取地理信息的情况. 首先要说明的是,从位图导入要素是非常非常不精确的方式,如果有其它数据来源,那么 ...
- 在IDEA中停止和关闭SonarLint自动检查,手动运行SonarLint检查代码
关闭SonarLint自动检查代码 有时敲一行代码SonarLint插件就会自动检查,让人感觉很不舒服,还会使电脑卡顿: 依次点击:File -> Settings 或直接Ctrl+Alt+S ...
- android 中的一些资源注解,让编译器帮你检查代码
android 中的一些资源注解,让编译器帮你检查代码 写方便的时候可以用注解来声明一些参数,以明确的指示参数的类型,让代码更安全.我们看到,在android源代码里大量使用了注解.我整理了一些注解如 ...
- 使用eslint检查代码质量
1.安装 全局安装 npm install eslint -g 局部安装 npm install eslint --save 2.初始化一个配置文件 eslint --init 执行后根据项目需要回答 ...
- 项目git commit时卡主不良代码:husky让Git检查代码规范化工作
看完 <前端规范之Git工作流规范(Husky + Commitlint + Lint-staged) https://www.cnblogs.com/Yellow-ice/p/15349873 ...
- ArcGIS Runtime SDK for Android开发之调用GP服务(异步调用)
一.背景说明 通过调用GP服务,Android客户端也能实现专业的.复杂的GIS分析处理功能,从而增加应用的实用价值. ArcGIS Server发布的GP服务,分为同步和异步两种类型,一般执行步骤较 ...
随机推荐
- 搭建个人使用服务器-vultr
内容来自https://www.noobyy.com/31.html 谢谢教程,侵权的话会立即删除! 1. 首先进入Vultr官网注册:https://www.vultr.com 注册完开始充值,我 ...
- Swift--Unmanaged使用
Unmanaged使用 作者 Nate Cook 翻译者 Croath Liu 2015年4月13日 API 对于开发者来说不只是把功能点接口暴露出来而已,同时也传达给我们一些其他的信息 ...
- 大数据之hadoop框架知识
https://blog.csdn.net/zytbft/article/details/79285500
- mysql Got a packet bigger than 'max_allowed_packet' bytes
背景 数据库备份执行SQL文件时,执行到图片表插入图片数据时错误: 错误提示:Got a packet bigger than 'max_allowed_packet' bytes 原因分析及解决 m ...
- Web核心之Response对象
http协议的响应部分 格式: HTTP/1.1 200 OK Content-Type: text/html;charset=UTF-8 Content-Length: 101 Date: Wed, ...
- Delphi Win API 函数 [ ShellAPI ] ShellExecute 函数
引用单元:uses ShellAPI; 函数原型:function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory ...
- python学习笔记(二)列表操作
列表及列表操作: 列表是最常用的数据类型之一,列表也叫数组,列表定义,使用[]即可:列表里面可以再套列表,一个里面套一个列表,叫二维数组:一个里面套一个列表,里面的列表再套一个列表,这个叫三位数组,套 ...
- php pi()函数 语法
php pi()函数 语法 pi()函数是什么意思? php pi()函数用于获取圆周率值,语法是pi(),这个函数只是单纯的用来获取圆周率值深圳大理石平台 作用:获取圆周率值 语法:pi() 参数: ...
- 数据挖掘:周期性分析SMCA算法
数据挖掘:周期性分析SMCA算法 原文地址:http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1423978 算法介绍 以时间顺序挖掘周期性的模式 ...
- 【Linux】端口反查进程
平时时常遇到端口占用的情况,又不知道端口是哪个服务启的. 本文以80端口为例. [root@localhost jenkins]# netstat -tunlp | grep 80 tcp6 0 0 ...